我想通过Qt的接口获取默认音频输入输出设备的名称,首先想到的就是QAudioDeviceInfo::defaultInputDevice(),QAudioDeviceInfo::defaultOutputDevice()这两个函数,返回值;类型QAudioDeviceInfo,QAudioDeviceInfo::defaultInputDevice().deviceName()和QAudioDeviceInfo::defaultOutputDevice().deviceName()轻松搞定,得到输入设备和输出设备的名称,但是理想和显示总是有差距的,将这两个信息打印输出,显示的信息是"Default Input Device"和"Default Output Device",我的电脑上也没有这两个名字的设备呀。。。
换了另外一种方式QAudioDeviceInfo::availableDevices(QAudio::AudioInput)和QAudioDeviceInfo::availableDevices(QAudio::AudioOutput),返回值都是QList的QAudioDeviceInfo,此时打印的deviceName()都是正常的设备名称,就用default系列函数得到的信息打印的不正确。。。
最后查阅了一些资料,defaultOutputDevice接口:
QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice() {
QAudioEngineFactoryInterface* plugin =
qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
if (plugin)
{
QList<QByteArray> list = plugin->deviceList(QAudio::AudioOutput);
if (list.size() > 0)
return QAudioDeviceInfo(QLatin1String("default"),list.at(0),QAudio::AudioOutput);
}
#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
return QAudioDeviceInfo(QLatin1String("builtin"),QAudioDeviceInfoInternal::defaultOutputDevice(), QAudio::AudioOutput);
#endif
return QAudioDeviceInfo();
}
defaultInputDevice接口:
QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice() {
QAudioEngineFactoryInterface* plugin =
qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
if (plugin) {
QList<QByteArray> list = plugin->availableDevices(QAudio::AudioInput);
if (list.size() > 0)
return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioInput); }
#ifndef QT_NO_AUDIO_BACKEND #if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultInputDevice(), QAudio::AudioInput);
#endif
return QAudioDeviceInfo();
}
由此得知,在电脑上有音频输入输出设备时,defaultInputDevice(),defaultOutputDevice()接口返回的分别是QAudioDeviceInfo::availableDevices(QAudio::AudioInput)和QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)列表第一个元素的数据,所以,获取默认输入输出设备的名称使用QAudioDeviceInfo::availableDevices(QAudio::AudioInput)和QAudioDeviceInfo::availableDevices(QAudio::AudioOutput),当返回的list中有数据时,第一个元素的名称就是默认设备的名称。