0
点赞
收藏
分享

微信扫一扫

QAudioDeviceInfo::defaultInputDevice(),defaultOutputDevice()无法获取默认设备名称问题

Java旺 2022-03-23 阅读 31
qt

我想通过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中有数据时,第一个元素的名称就是默认设备的名称。

举报

相关推荐

0 条评论