質問:
1. QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) は、3 つのオーディオ出力デバイスから 1 つのオーディオ デバイス (デフォルト デバイス) のみを返します。なんで? 合計 3 つのオーディオ出力デバイスが利用可能で、ALSA デバイスでチェックしながら、コマンド ラインで「tinyplay」ユーティリティを使用して出力を検証しました。しかし、QAudioDeviceInfo::availableDevices() はこれら 3 つのデバイスを返さず、1 つのデバイスのみを返します (デフォルト)。
注: qt サンプルのサンプル コードをオーディオ出力に使用しました。返却されたデバイスは 1 つだけです。
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、デバイス 0) をデフォルトのオーディオデバイスとして設定するには? この場合、QAudioDeviceInfo::defaultOutputDevice() はサウンド カード 2 のデバイス 0 として設定されます。
詳細は下記をご覧ください。
システム設定:
対象ボード:iMX6QセイバーAI
OS : アンドロイドM6
Qt : QT 5.8
Android NDK r10
アンドロイド 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-社会
利用可能なサウンド デバイス:
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 --> サウンド確認済み。注 : サウンド カード 0 の ALSA デバイス 0 は、サウンドを生成するために実行されています。
tinyplay test.wav -D 0 -d 1 --> サウンド確認済み。
tinyplay test.wav -D 2 -d 0 --> サウンド確認済み。