=== modified file 'mixxx/src/sounddevice.h' --- mixxx/src/sounddevice.h 2010-11-27 16:27:27 +0000 +++ mixxx/src/sounddevice.h 2013-01-03 19:57:07 +0000 @@ -48,6 +48,7 @@ virtual int open() = 0; virtual int close() = 0; virtual QString getError() const = 0; + virtual unsigned int getDefaultSampleRate() const = 0; int getNumOutputChannels() const; int getNumInputChannels() const; SoundDeviceError addOutput(const AudioOutput &out); === modified file 'mixxx/src/sounddeviceportaudio.h' --- mixxx/src/sounddeviceportaudio.h 2012-09-04 21:04:36 +0000 +++ mixxx/src/sounddeviceportaudio.h 2013-01-03 19:57:59 +0000 @@ -48,6 +48,9 @@ float *output, short *in, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags); + virtual unsigned int getDefaultSampleRate() const { + return (unsigned int)m_deviceInfo->defaultSampleRate; + } private: /** PortAudio stream for this device. */ PaStream *m_pStream; === modified file 'mixxx/src/soundmanager.cpp' --- mixxx/src/soundmanager.cpp 2012-12-10 02:52:32 +0000 +++ mixxx/src/soundmanager.cpp 2013-01-03 19:59:00 +0000 @@ -429,13 +429,12 @@ m_config.loadDefaults(this, SoundManagerConfig::API | SoundManagerConfig::DEVICES); } if (!m_config.checkSampleRate(*this)) { - m_config.setSampleRate(SoundManagerConfig::kDefaultSampleRate); + m_config.setSampleRate(SoundManagerConfig::kFallbackSampleRate); m_config.loadDefaults(this, SoundManagerConfig::OTHER); } // latency checks itself for validity on SMConfig::setLatency() } - QHash SoundManager::requestBuffer( QList outputs, unsigned long iFramesPerBuffer, SoundDevice* device, double streamTime /* = 0 */) { === modified file 'mixxx/src/soundmanagerconfig.cpp' --- mixxx/src/soundmanagerconfig.cpp 2012-11-20 00:40:18 +0000 +++ mixxx/src/soundmanagerconfig.cpp 2013-01-03 20:15:50 +0000 @@ -23,14 +23,15 @@ const unsigned int SoundManagerConfig::kMaxLatency = 7; const QString SoundManagerConfig::kDefaultAPI = QString("None"); -const unsigned int SoundManagerConfig::kDefaultSampleRate = 48000; +// Sample Rate even the cheap sound Devices will support most likely +const unsigned int SoundManagerConfig::kFallbackSampleRate = 48000; // latency=5 means about 21 ms of latency which is default in trunk r2453 -- bkgood const int SoundManagerConfig::kDefaultLatency = 5; -SoundManagerConfig::SoundManagerConfig() - : m_api("None") - , m_sampleRate(kDefaultSampleRate) - , m_latency(kDefaultLatency) { +SoundManagerConfig::SoundManagerConfig() : + m_api("None"), + m_sampleRate(kFallbackSampleRate), + m_latency(kDefaultLatency) { m_configFile = QFileInfo(CmdlineArgs::Instance().getSettingsPath() + SOUNDMANAGERCONFIG_FILENAME); } @@ -166,7 +167,7 @@ void SoundManagerConfig::setSampleRate(unsigned int sampleRate) { // making sure we don't divide by zero elsewhere - m_sampleRate = sampleRate != 0 ? sampleRate : kDefaultSampleRate; + m_sampleRate = sampleRate != 0 ? sampleRate : kFallbackSampleRate; } /** @@ -315,28 +316,35 @@ #endif } } + + unsigned int defaultSampleRate = kFallbackSampleRate; if (flags & SoundManagerConfig::DEVICES) { clearOutputs(); clearInputs(); QList outputDevices = soundManager->getDeviceList(m_api, true, false); if (!outputDevices.isEmpty()) { foreach (SoundDevice *device, outputDevices) { - if (device->getNumOutputChannels() < 2) continue; + if (device->getNumOutputChannels() < 2) { + continue; + } AudioOutput masterOut(AudioPath::MASTER, 0); addOutput(device->getInternalName(), masterOut); + defaultSampleRate = device->getDefaultSampleRate(); break; } } } if (flags & SoundManagerConfig::OTHER) { QList sampleRates = soundManager->getSampleRates(m_api); - if (sampleRates.contains(kDefaultSampleRate)) { - m_sampleRate = kDefaultSampleRate; + if (sampleRates.contains(defaultSampleRate)) { + m_sampleRate = defaultSampleRate; + } else if (sampleRates.contains(kFallbackSampleRate)) { + m_sampleRate = kFallbackSampleRate; } else if (!sampleRates.isEmpty()) { m_sampleRate = sampleRates.first(); } else { qWarning() << "got empty sample rate list from SoundManager, this is a bug"; - m_sampleRate = kDefaultSampleRate; + m_sampleRate = kFallbackSampleRate; } m_latency = kDefaultLatency; } === modified file 'mixxx/src/soundmanagerconfig.h' --- mixxx/src/soundmanagerconfig.h 2011-07-19 17:16:39 +0000 +++ mixxx/src/soundmanagerconfig.h 2013-01-03 20:05:43 +0000 @@ -37,7 +37,7 @@ }; static const unsigned int kMaxLatency; static const QString kDefaultAPI; - static const unsigned int kDefaultSampleRate; + static const unsigned int kFallbackSampleRate; static const int kDefaultLatency; SoundManagerConfig();