QAudioDeviceInfo::availableDevices() не возвращает все доступные устройства, вместо этого возвращает только одно из трех реально существующих устройств вывода звука. Почему?
Вопрос:
1. QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) возвращает только одно аудиоустройство (устройство по умолчанию) из трех аудиоустройств. Зачем? Всего доступно три аудиовыхода, и при проверке с устройствами ALSA проверял вывод с помощью утилиты tinyplay из командной строки. Но QAudioDeviceInfo::availableDevices() не возвращает эти три устройства, он возвращает только одно устройство (по умолчанию).
Примечание: Использовал пример кода на сэмплах qt для аудио выхода. Вернулось только одно устройство.
m_deviceBox->addItem(defaultDeviceInfo.deviceName(), qVariantFromValue(defaultDeviceInfo));
foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
if (deviceInfo != defaultDeviceInfo) {
m_deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
}
}
2. Как установить конкретное устройство ALSA (например, card0, device 0) в качестве аудиоустройства по умолчанию? В этом случае QAudioDeviceInfo::defaultOutputDevice() устанавливается как устройство 0 на звуковой карте2.
Детали смотрите ниже........
Настройка системы:
Целевая плата: iMX6Q Sabre AI
ОС: Android M6
Qt: QT 5.8
Android NDK r10
Android SDK: 25.2.5
Доступные звуковые карты:
root @ sabreauto_6q: / # cat / proc / asound / cards
0 [cs42888audio]: cs42888-audio - cs42888-audio cs42888-audio 1 [imxspdif]: imx-spdif - imx-spdif imx-spdif 2 [imxhdmisoc]: imx-hdmi-soc - imx-hdmi-soc imx-hdmi- Soc
Доступные звуковые устройства:
root @ sabreauto_6q: / # cat / proc / asound / card0 / id pcm0c / pcm0p / pcm1c / pcm1p /
root @ sabreauto_6q: / # cat / proc / asound / card1 / id pcm0c /
root @ sabreauto_6q: / # cat / proc / asound / card2 / id pcm0p /
Примечание. Всего имеется 3 звуковые карты и 3 аудио (ALSA) устройства.
Попытки проверить аудио устройства:
Использование утилиты tinyplay для вывода звука проверено для всех драйверов аудио выхода.
tinyplay test.wav -D 0 -d 0 -> Звук проверен. Примечание: устройство ALSA 0 на звуковой карте 0 работает для вывода звука.
tinyplay test.wav -D 0 -d 1 -> Звук проверен.
tinyplay test.wav -D 2 -d 0 -> Звук проверен.