examples/multimedia/audiodevices/audiodevices.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    38 ** $QT_END_LICENSE$
    38 ** $QT_END_LICENSE$
    39 **
    39 **
    40 ****************************************************************************/
    40 ****************************************************************************/
    41 
    41 
    42 
    42 
    43 #include <QDebug>
       
    44 #include <QAudioDeviceInfo>
    43 #include <QAudioDeviceInfo>
    45 
    44 
    46 #include "audiodevices.h"
    45 #include "audiodevices.h"
    47 
    46 
    48 AudioDevicesBase::AudioDevicesBase( QMainWindow *parent, Qt::WFlags f )
    47 AudioDevicesBase::AudioDevicesBase(QWidget *parent, Qt::WFlags f)
    49 {
    48     : QMainWindow(parent, f)
    50     Q_UNUSED(parent)
    49 {
    51     Q_UNUSED(f)
    50     setupUi(this);
    52     setupUi( this );
       
    53 }
    51 }
    54 
    52 
    55 AudioDevicesBase::~AudioDevicesBase() {}
    53 AudioDevicesBase::~AudioDevicesBase() {}
    56 
    54 
    57 
    55 
    58 AudioTest::AudioTest( QMainWindow *parent, Qt::WFlags f )
    56 AudioTest::AudioTest(QWidget *parent, Qt::WFlags f)
    59     : AudioDevicesBase( parent, f )
    57     : AudioDevicesBase(parent, f)
    60 {
    58 {
    61     nearestFreq->setDisabled(true);
       
    62     nearestChannel->setDisabled(true);
       
    63     nearestCodec->setDisabled(true);
       
    64     nearestSampleSize->setDisabled(true);
       
    65     nearestSampleType->setDisabled(true);
       
    66     nearestEndian->setDisabled(true);
       
    67     logOutput->setDisabled(true);
       
    68 
       
    69     mode = QAudio::AudioOutput;
    59     mode = QAudio::AudioOutput;
    70     modeBox->addItem("Input");
    60 
    71     modeBox->addItem("Output");
    61     connect(testButton, SIGNAL(clicked()), SLOT(test()));
    72 
    62     connect(modeBox, SIGNAL(activated(int)), SLOT(modeChanged(int)));
    73     connect(testButton,SIGNAL(clicked()),SLOT(test()));
    63     connect(deviceBox, SIGNAL(activated(int)), SLOT(deviceChanged(int)));
    74     connect(modeBox,SIGNAL(activated(int)),SLOT(modeChanged(int)));
    64     connect(frequencyBox, SIGNAL(activated(int)), SLOT(freqChanged(int)));
    75     connect(deviceBox,SIGNAL(activated(int)),SLOT(deviceChanged(int)));
    65     connect(channelsBox, SIGNAL(activated(int)), SLOT(channelChanged(int)));
    76     connect(frequencyBox,SIGNAL(activated(int)),SLOT(freqChanged(int)));
    66     connect(codecsBox, SIGNAL(activated(int)), SLOT(codecChanged(int)));
    77     connect(channelsBox,SIGNAL(activated(int)),SLOT(channelChanged(int)));
    67     connect(sampleSizesBox, SIGNAL(activated(int)), SLOT(sampleSizeChanged(int)));
    78     connect(codecsBox,SIGNAL(activated(int)),SLOT(codecChanged(int)));
    68     connect(sampleTypesBox, SIGNAL(activated(int)), SLOT(sampleTypeChanged(int)));
    79     connect(sampleSizesBox,SIGNAL(activated(int)),SLOT(sampleSizeChanged(int)));
    69     connect(endianBox, SIGNAL(activated(int)), SLOT(endianChanged(int)));
    80     connect(sampleTypesBox,SIGNAL(activated(int)),SLOT(sampleTypeChanged(int)));
       
    81     connect(endianBox,SIGNAL(activated(int)),SLOT(endianChanged(int)));
       
    82 
    70 
    83     modeBox->setCurrentIndex(0);
    71     modeBox->setCurrentIndex(0);
    84     modeChanged(0);
    72     modeChanged(0);
    85     deviceBox->setCurrentIndex(0);
    73     deviceBox->setCurrentIndex(0);
    86     deviceChanged(0);
    74     deviceChanged(0);
    96     logOutput->clear();
    84     logOutput->clear();
    97     logOutput->append("NOTE: an invalid codec audio/test exists for testing, to get a fail condition.");
    85     logOutput->append("NOTE: an invalid codec audio/test exists for testing, to get a fail condition.");
    98 
    86 
    99     if (!deviceInfo.isNull()) {
    87     if (!deviceInfo.isNull()) {
   100         if (deviceInfo.isFormatSupported(settings)) {
    88         if (deviceInfo.isFormatSupported(settings)) {
   101             logOutput->append("Success");
    89             logOutput->append(tr("Success"));
   102             nearestFreq->setText("");
    90             nearestFreq->setText("");
   103             nearestChannel->setText("");
    91             nearestChannel->setText("");
   104             nearestCodec->setText("");
    92             nearestCodec->setText("");
   105             nearestSampleSize->setText("");
    93             nearestSampleSize->setText("");
   106             nearestSampleType->setText("");
    94             nearestSampleType->setText("");
   134                     nearestEndian->setText("BigEndian");
   122                     nearestEndian->setText("BigEndian");
   135             }
   123             }
   136         }
   124         }
   137     }
   125     }
   138     else
   126     else
   139         logOutput->append("No Device");
   127         logOutput->append(tr("No Device"));
   140 }
   128 }
   141 
   129 
   142 void AudioTest::modeChanged(int idx)
   130 void AudioTest::modeChanged(int idx)
   143 {
   131 {
   144     // mode has changed
   132     // mode has changed
   145     if(idx == 0)
   133     if (idx == 0)
   146         mode=QAudio::AudioInput;
   134         mode = QAudio::AudioInput;
   147     else
   135     else
   148         mode=QAudio::AudioOutput;
   136         mode = QAudio::AudioOutput;
   149 
   137 
   150     deviceBox->clear();
   138     deviceBox->clear();
   151     foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::deviceList(mode))
   139     foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(mode))
   152         deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
   140         deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
   153 }
   141 }
   154 
   142 
   155 void AudioTest::deviceChanged(int idx)
   143 void AudioTest::deviceChanged(int idx)
   156 {
   144 {
   160     // device has changed
   148     // device has changed
   161     deviceInfo = deviceBox->itemData(idx).value<QAudioDeviceInfo>();
   149     deviceInfo = deviceBox->itemData(idx).value<QAudioDeviceInfo>();
   162 
   150 
   163     frequencyBox->clear();
   151     frequencyBox->clear();
   164     QList<int> freqz = deviceInfo.supportedFrequencies();
   152     QList<int> freqz = deviceInfo.supportedFrequencies();
   165     for(int i = 0; i < freqz.size(); ++i)
   153     for (int i = 0; i < freqz.size(); ++i)
   166         frequencyBox->addItem(QString("%1").arg(freqz.at(i)));
   154         frequencyBox->addItem(QString("%1").arg(freqz.at(i)));
   167     if(freqz.size())
   155     if (freqz.size())
   168         settings.setFrequency(freqz.at(0));
   156         settings.setFrequency(freqz.at(0));
   169 
   157 
   170     channelsBox->clear();
   158     channelsBox->clear();
   171     QList<int> chz = deviceInfo.supportedChannels();
   159     QList<int> chz = deviceInfo.supportedChannels();
   172     for(int i = 0; i < chz.size(); ++i)
   160     for (int i = 0; i < chz.size(); ++i)
   173         channelsBox->addItem(QString("%1").arg(chz.at(i)));
   161         channelsBox->addItem(QString("%1").arg(chz.at(i)));
   174     if(chz.size())
   162     if (chz.size())
   175         settings.setChannels(chz.at(0));
   163         settings.setChannels(chz.at(0));
   176 
   164 
   177     codecsBox->clear();
   165     codecsBox->clear();
   178     QStringList codecz = deviceInfo.supportedCodecs();
   166     QStringList codecz = deviceInfo.supportedCodecs();
   179     for(int i = 0; i < codecz.size(); ++i)
   167     for (int i = 0; i < codecz.size(); ++i)
   180         codecsBox->addItem(QString("%1").arg(codecz.at(i)));
   168         codecsBox->addItem(QString("%1").arg(codecz.at(i)));
   181     if(codecz.size())
   169     if (codecz.size())
   182         settings.setCodec(codecz.at(0));
   170         settings.setCodec(codecz.at(0));
   183     // Add false to create failed condition!
   171     // Add false to create failed condition!
   184     codecsBox->addItem("audio/test");
   172     codecsBox->addItem("audio/test");
   185 
   173 
   186     sampleSizesBox->clear();
   174     sampleSizesBox->clear();
   187     QList<int> sampleSizez = deviceInfo.supportedSampleSizes();
   175     QList<int> sampleSizez = deviceInfo.supportedSampleSizes();
   188     for(int i = 0; i < sampleSizez.size(); ++i)
   176     for (int i = 0; i < sampleSizez.size(); ++i)
   189         sampleSizesBox->addItem(QString("%1").arg(sampleSizez.at(i)));
   177         sampleSizesBox->addItem(QString("%1").arg(sampleSizez.at(i)));
   190     if(sampleSizez.size())
   178     if (sampleSizez.size())
   191         settings.setSampleSize(sampleSizez.at(0));
   179         settings.setSampleSize(sampleSizez.at(0));
   192 
   180 
   193     sampleTypesBox->clear();
   181     sampleTypesBox->clear();
   194     QList<QAudioFormat::SampleType> sampleTypez = deviceInfo.supportedSampleTypes();
   182     QList<QAudioFormat::SampleType> sampleTypez = deviceInfo.supportedSampleTypes();
   195     for(int i = 0; i < sampleTypez.size(); ++i) {
   183     for (int i = 0; i < sampleTypez.size(); ++i) {
   196         switch(sampleTypez.at(i)) {
   184         switch(sampleTypez.at(i)) {
   197             case QAudioFormat::SignedInt:
   185             case QAudioFormat::SignedInt:
   198                 sampleTypesBox->addItem("SignedInt");
   186                 sampleTypesBox->addItem("SignedInt");
   199                 break;
   187                 break;
   200             case QAudioFormat::UnSignedInt:
   188             case QAudioFormat::UnSignedInt:
   204                 sampleTypesBox->addItem("Float");
   192                 sampleTypesBox->addItem("Float");
   205                 break;
   193                 break;
   206             case QAudioFormat::Unknown:
   194             case QAudioFormat::Unknown:
   207                 sampleTypesBox->addItem("Unknown");
   195                 sampleTypesBox->addItem("Unknown");
   208         }
   196         }
   209 	if(sampleTypez.size())
   197 	if (sampleTypez.size())
   210             settings.setSampleType(sampleTypez.at(0));
   198             settings.setSampleType(sampleTypez.at(0));
   211     }
   199     }
   212 
   200 
   213     endianBox->clear();
   201     endianBox->clear();
   214     QList<QAudioFormat::Endian> endianz = deviceInfo.supportedByteOrders();
   202     QList<QAudioFormat::Endian> endianz = deviceInfo.supportedByteOrders();
   215     for(int i = 0; i < endianz.size(); ++i) {
   203     for (int i = 0; i < endianz.size(); ++i) {
   216         switch(endianz.at(i)) {
   204         switch (endianz.at(i)) {
   217             case QAudioFormat::LittleEndian:
   205             case QAudioFormat::LittleEndian:
   218                 endianBox->addItem("Little Endian");
   206                 endianBox->addItem("Little Endian");
   219                 break;
   207                 break;
   220             case QAudioFormat::BigEndian:
   208             case QAudioFormat::BigEndian:
   221                 endianBox->addItem("Big Endian");
   209                 endianBox->addItem("Big Endian");
   222                 break;
   210                 break;
   223         }
   211         }
   224     }
   212     }
   225     if(endianz.size())
   213     if (endianz.size())
   226         settings.setByteOrder(endianz.at(0));
   214         settings.setByteOrder(endianz.at(0));
   227 }
   215 }
   228 
   216 
   229 void AudioTest::freqChanged(int idx)
   217 void AudioTest::freqChanged(int idx)
   230 {
   218 {
   247     settings.setSampleSize(sampleSizesBox->itemText(idx).toInt());
   235     settings.setSampleSize(sampleSizesBox->itemText(idx).toInt());
   248 }
   236 }
   249 
   237 
   250 void AudioTest::sampleTypeChanged(int idx)
   238 void AudioTest::sampleTypeChanged(int idx)
   251 {
   239 {
   252     switch(sampleTypesBox->itemText(idx).toInt()) {
   240     switch (sampleTypesBox->itemText(idx).toInt()) {
   253         case QAudioFormat::SignedInt:
   241         case QAudioFormat::SignedInt:
   254             settings.setSampleType(QAudioFormat::SignedInt);
   242             settings.setSampleType(QAudioFormat::SignedInt);
   255             break;
   243             break;
   256         case QAudioFormat::UnSignedInt:
   244         case QAudioFormat::UnSignedInt:
   257             settings.setSampleType(QAudioFormat::UnSignedInt);
   245             settings.setSampleType(QAudioFormat::UnSignedInt);
   261     }
   249     }
   262 }
   250 }
   263 
   251 
   264 void AudioTest::endianChanged(int idx)
   252 void AudioTest::endianChanged(int idx)
   265 {
   253 {
   266     switch(endianBox->itemText(idx).toInt()) {
   254     switch (endianBox->itemText(idx).toInt()) {
   267         case QAudioFormat::LittleEndian:
   255         case QAudioFormat::LittleEndian:
   268             settings.setByteOrder(QAudioFormat::LittleEndian);
   256             settings.setByteOrder(QAudioFormat::LittleEndian);
   269             break;
   257             break;
   270         case QAudioFormat::BigEndian:
   258         case QAudioFormat::BigEndian:
   271             settings.setByteOrder(QAudioFormat::BigEndian);
   259             settings.setByteOrder(QAudioFormat::BigEndian);
   272     }
   260     }
   273 }
   261 }
   274