From f3e2ccf63de242feeba10e75fd00ffd43fc038b0 Mon Sep 17 00:00:00 2001 From: Kurt Korbatits Date: Mon, 14 Sep 2009 12:33:37 +1000 Subject: AudioDevices demo doesn't do anything on Windows -put example audiodevices in layout. -added more checking to testSettings() in win32 implementation. -disabled objects in example audiodevices that are not editable. -added more checking to alsa implementation for preferredFormat(). -changed internal strings from tr to QLatin1String. Reviewed-by:Justin Mcpherson --- .../multimedia/audio/audiodevices/audiodevices.cpp | 12 +- .../audio/audiodevices/audiodevicesbase.ui | 444 ++++++++++----------- src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp | 67 +++- src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp | 36 +- src/multimedia/audio/qaudioinput_alsa_p.cpp | 8 +- src/multimedia/audio/qaudioinput_win32_p.cpp | 2 +- src/multimedia/audio/qaudiooutput_alsa_p.cpp | 8 +- src/multimedia/audio/qaudiooutput_win32_p.cpp | 2 +- 8 files changed, 303 insertions(+), 276 deletions(-) diff --git a/examples/multimedia/audio/audiodevices/audiodevices.cpp b/examples/multimedia/audio/audiodevices/audiodevices.cpp index 52aa4db..0d305ff 100644 --- a/examples/multimedia/audio/audiodevices/audiodevices.cpp +++ b/examples/multimedia/audio/audiodevices/audiodevices.cpp @@ -58,6 +58,14 @@ AudioDevicesBase::~AudioDevicesBase() {} AudioTest::AudioTest( QMainWindow *parent, Qt::WFlags f ) : AudioDevicesBase( parent, f ) { + nearestFreq->setDisabled(true); + nearestChannel->setDisabled(true); + nearestCodec->setDisabled(true); + nearestSampleSize->setDisabled(true); + nearestSampleType->setDisabled(true); + nearestEndian->setDisabled(true); + logOutput->setDisabled(true); + mode = QAudio::AudioOutput; modeBox->addItem("Input"); modeBox->addItem("Output"); @@ -87,6 +95,8 @@ AudioTest::~AudioTest() void AudioTest::test() { // tries to set all the settings picked. + logOutput->clear(); + logOutput->append("NOTE: an invalid codec audio/test exists for testing, to get a fail condition."); if(device) { if(device->isFormatSupported(settings)) { @@ -179,7 +189,7 @@ void AudioTest::deviceChanged(int idx) if(codecz.size()) settings.setCodec(codecz.at(0)); // Add false to create failed condition! - codecsBox->addItem("audio/mpeg"); + codecsBox->addItem("audio/test"); sampleSizesBox->clear(); QList sampleSizez = device->supportedSampleSizes(); diff --git a/examples/multimedia/audio/audiodevices/audiodevicesbase.ui b/examples/multimedia/audio/audiodevices/audiodevicesbase.ui index 674f201..5207338 100644 --- a/examples/multimedia/audio/audiodevices/audiodevicesbase.ui +++ b/examples/multimedia/audio/audiodevices/audiodevicesbase.ui @@ -1,7 +1,8 @@ - + + AudioDevicesBase - - + + 0 0 @@ -9,246 +10,223 @@ 702 - + AudioDevicesBase - - - - 0 - 28 - 504 - 653 - - - - - - 40 - 21 - 321 - 506 - - - - - - - - 1 - 0 - - - - Device - - - - - - - Mode - - - - - - - - - - - - - QFrame::Panel - - - QFrame::Raised - - - Actual Settings - - - Qt::AlignCenter - - - - - - - QFrame::Panel - - - QFrame::Raised - - - Nearest Settings - - - Qt::AlignCenter - - - - - - - Frequency - - - - - - - Frequency - - - - - - - - - - - - - Channels - - - - - - - Channel - - - - - - - - - - - - - Codecs - - - - - - - Codec - - - - - - - - - - - - - SampleSize - - - - - - - SampleSize - - - - - - - - - - - - - SampleType - - - - - - - SampleType - - - - - - - - - - - - - Endianess - - - - - - - Endianess - - - - - - - - - - - - - - 0 - 40 - - - - - - - - Test - - - - - + + + + + + + + + 1 + 0 + + + + Device + + + + + + + Mode + + + + + + + + + + + + + QFrame::Panel + + + QFrame::Raised + + + Actual Settings + + + Qt::AlignCenter + + + + + + + QFrame::Panel + + + QFrame::Raised + + + Nearest Settings + + + Qt::AlignCenter + + + + + + + Frequency + + + + + + + Frequency + + + + + + + + + + + + + Channels + + + + + + + Channel + + + + + + + + + + + + + Codecs + + + + + + + Codec + + + + + + + + + + + + + SampleSize + + + + + + + SampleSize + + + + + + + + + + + + + SampleType + + + + + + + SampleType + + + + + + + + + + + + + Endianess + + + + + + + Endianess + + + + + + + + + + + + + + 0 + 40 + + + + + + + + Test + + + + + + - - + + 0 0 504 - 28 - - - - - - - 0 - 681 - 504 - 21 + 19 + diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index 4ed1b41..c944cf0 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -81,13 +81,18 @@ QAudioFormat QAudioDeviceInfoPrivate::preferredFormat() const nearest.setByteOrder(QAudioFormat::LittleEndian); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(16); - nearest.setCodec(tr("audio/pcm")); + nearest.setCodec(QLatin1String("audio/pcm")); } else { nearest.setFrequency(8000); nearest.setChannels(1); - nearest.setSampleType(QAudioFormat::SignedInt); + nearest.setSampleType(QAudioFormat::UnSignedInt); nearest.setSampleSize(8); - nearest.setCodec(tr("audio/pcm")); + nearest.setCodec(QLatin1String("audio/pcm")); + if(!testSettings(nearest)) { + nearest.setChannels(2); + nearest.setSampleSize(16); + nearest.setSampleType(QAudioFormat::SignedInt); + } } return nearest; } @@ -145,9 +150,9 @@ bool QAudioDeviceInfoPrivate::open() { int err = 0; QString dev = device; - if(!dev.contains(tr("default"))) { + if(!dev.contains(QLatin1String("default"))) { int idx = snd_card_get_index(dev.toLocal8Bit().constData()); - dev = QString(tr("hw:%1,0")).arg(idx); + dev = QString(QLatin1String("hw:%1,0")).arg(idx); } if(mode == QAudio::AudioOutput) { err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0); @@ -172,16 +177,15 @@ bool QAudioDeviceInfoPrivate::testSettings(const QAudioFormat& format) const { // Set nearest to closest settings that do work. // See if what is in settings will work (return value). - int err = 0; snd_pcm_t* handle; snd_pcm_hw_params_t *params; QString dev = device; // open() - if(!dev.contains(tr("default"))) { + if(!dev.contains(QLatin1String("default"))) { int idx = snd_card_get_index(dev.toLocal8Bit().constData()); - dev = QString(tr("hw:%1,0")).arg(idx); + dev = QString(QLatin1String("hw:%1,0")).arg(idx); } if(mode == QAudio::AudioOutput) { err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0); @@ -205,8 +209,45 @@ bool QAudioDeviceInfoPrivate::testSettings(const QAudioFormat& format) const snd_pcm_hw_params_alloca( ¶ms ); snd_pcm_hw_params_any( handle, params ); + // set the values! + snd_pcm_hw_params_set_channels(handle,params,format.channels()); + snd_pcm_hw_params_set_rate(handle,params,format.frequency(),dir); + switch(format.sampleSize()) { + case 8: + if(format.sampleType() == QAudioFormat::SignedInt) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S8); + else if(format.sampleType() == QAudioFormat::UnSignedInt) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U8); + break; + case 16: + if(format.sampleType() == QAudioFormat::SignedInt) { + if(format.byteOrder() == QAudioFormat::LittleEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_LE); + else if(format.byteOrder() == QAudioFormat::BigEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_BE); + } else if(format.sampleType() == QAudioFormat::UnSignedInt) { + if(format.byteOrder() == QAudioFormat::LittleEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_LE); + else if(format.byteOrder() == QAudioFormat::BigEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_BE); + } + break; + case 32: + if(format.sampleType() == QAudioFormat::SignedInt) { + if(format.byteOrder() == QAudioFormat::LittleEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_LE); + else if(format.byteOrder() == QAudioFormat::BigEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_BE); + } else if(format.sampleType() == QAudioFormat::UnSignedInt) { + if(format.byteOrder() == QAudioFormat::LittleEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_LE); + else if(format.byteOrder() == QAudioFormat::BigEndian) + snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_BE); + } + } + // For now, just accept only audio/pcm codec - if(!format.codec().startsWith(tr("audio/pcm"))) { + if(!format.codec().startsWith(QLatin1String("audio/pcm"))) { err=-1; } else testCodec = true; @@ -313,7 +354,7 @@ void QAudioDeviceInfoPrivate::updateLists() typez.append(QAudioFormat::SignedInt); typez.append(QAudioFormat::UnSignedInt); typez.append(QAudioFormat::Float); - codecz.append(tr("audio/pcm")); + codecz.append(QLatin1String("audio/pcm")); close(); } @@ -346,10 +387,10 @@ QList QAudioDeviceInfoPrivate::deviceList(QAudio::Mode mode) if(io == NULL) _m = mode; - QString str = tr(name); + QString str = QLatin1String(name); - if(str.contains(tr("default"))) { - int pos = str.indexOf(tr("="),0); + if(str.contains(QLatin1String("default"))) { + int pos = str.indexOf(QLatin1String("="),0); devices.append(str.mid(pos+1).toLocal8Bit().constData()); } } diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp index 371f442..ba9f5e2 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp @@ -99,13 +99,13 @@ QAudioFormat QAudioDeviceInfoPrivate::preferredFormat() const nearest.setByteOrder(QAudioFormat::LittleEndian); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(16); - nearest.setCodec(tr("audio/pcm")); + nearest.setCodec(QLatin1String("audio/pcm")); } else { nearest.setFrequency(11025); nearest.setChannels(1); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(8); - nearest.setCodec(tr("audio/pcm")); + nearest.setCodec(QLatin1String("audio/pcm")); } return nearest; } @@ -174,27 +174,25 @@ bool QAudioDeviceInfoPrivate::testSettings(const QAudioFormat& format) const // Set nearest to closest settings that do work. // See if what is in settings will work (return value). - bool testChannel = false; - bool testCodec = false; - bool testFreq = false; - - int err = 0; + bool failed = false; // For now, just accept only audio/pcm codec - if(!format.codec().startsWith(tr("audio/pcm"))) { - err=-1; - } else - testCodec = true; + if(!format.codec().startsWith(QLatin1String("audio/pcm"))) + failed = true; - if(err>=0 && format.channels() != -1) { - testChannel = true; - } + if(!failed && !(format.channels() == 1 || format.channels() == 2)) + failed = true; - if(err>=0 && format.frequency() != -1) { - testFreq = true; + if(!failed) { + if(!(format.frequency() == 8000 || format.frequency() == 11025 || format.frequency() == 22050 || + format.frequency() == 44100 || format.frequency() == 48000 || format.frequency() == 96000)) + failed = true; } - if(err == 0) { + if(!failed && !(format.sampleSize() == 8 || format.sampleSize() == 16)) + failed = true; + + if(!failed) { // settings work return true; } @@ -209,7 +207,7 @@ void QAudioDeviceInfoPrivate::updateLists() DWORD fmt = NULL; QString tmp; - if(device.compare(tr("default")) == 0) + if(device.compare(QLatin1String("default")) == 0) base = true; if(mode == QAudio::AudioOutput) { @@ -331,7 +329,7 @@ void QAudioDeviceInfoPrivate::updateLists() typez.append(QAudioFormat::SignedInt); typez.append(QAudioFormat::UnSignedInt); - codecz.append(tr("audio/pcm")); + codecz.append(QLatin1String("audio/pcm")); } } diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp index c98102c..f36ffc8 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp @@ -78,7 +78,7 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFor pullMode = true; resuming = false; - QStringList list1 = QString(tr(device)).split(tr(":")); + QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":")); m_device = QByteArray(list1.at(0).toLocal8Bit().constData()); timer = new QTimer(this); @@ -254,9 +254,9 @@ bool QAudioInputPrivate::open() int count=0; unsigned int freakuency=settings.frequency(); - QString dev = QString(tr(m_device.constData())); - if(!dev.contains(tr("default"))) { - dev = QString(tr("default:CARD=%1")).arg(tr(m_device.constData())); + QString dev = QString(QLatin1String(m_device.constData())); + if(!dev.contains(QLatin1String("default"))) { + dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData())); } // Step 1: try and open the device diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp index 315a59b..31441ae 100644 --- a/src/multimedia/audio/qaudioinput_win32_p.cpp +++ b/src/multimedia/audio/qaudioinput_win32_p.cpp @@ -245,7 +245,7 @@ bool QAudioInputPrivate::open() == MMSYSERR_NOERROR) { QString tmp; tmp = QString::fromUtf16((const unsigned short*)wic.szPname); - if(tmp.compare(tr(m_device)) == 0) { + if(tmp.compare(QLatin1String(m_device)) == 0) { devId = ii; break; } diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index 45ff115..e8a3f5c 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -81,7 +81,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioF resuming = false; opened = false; - QStringList list1 = QString(tr(device)).split(tr(":")); + QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":")); m_device = QByteArray(list1.at(0).toLocal8Bit().constData()); timer = new QTimer(this); @@ -277,9 +277,9 @@ bool QAudioOutputPrivate::open() int count=0; unsigned int freakuency=settings.frequency(); - QString dev = tr(m_device.constData()); - if(!dev.contains(tr("default"))) { - dev = QString(tr("default:CARD=%1")).arg(tr(m_device.constData())); + QString dev = QLatin1String(m_device.constData()); + if(!dev.contains(QLatin1String("default"))) { + dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData())); } // Step 1: try and open the device while((count < 5) && (err < 0)) { diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp index fae680c..aea3a3f 100644 --- a/src/multimedia/audio/qaudiooutput_win32_p.cpp +++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp @@ -241,7 +241,7 @@ bool QAudioOutputPrivate::open() == MMSYSERR_NOERROR) { QString tmp; tmp = QString::fromUtf16((const unsigned short*)woc.szPname); - if(tmp.compare(tr(m_device)) == 0) { + if(tmp.compare(QLatin1String(m_device)) == 0) { devId = ii; break; } -- cgit v0.12