Qt5.3 はデフォルトの Raspberry Pi also_output.0.analog-mono デバイス (3.5 mm ヘッドフォン ジャック) を認識し、5.3 の QAudioOutput はそのデバイスにオーディオを正常に書き込み、ヘッドフォンでオーディオを聞くことができます。これはすべてデフォルトの Raspbian で動作し、apt-get の PulseAudio 2.0 を使用し、追加の構成は必要ありません。PulseAudio は、システム デーモン モードではなく、セッション プロセスとして実行されます。Qt 5.4 は、まったく同じソース コードと Raspbian (Qt 5.3.2 ではなく Qt 5.4.0 でクロスコンパイルされている場合を除く) を持つデバイスを認識せず、それにデータを書き込むこともできません。
このエラーが表示されます ( sys default:CARD=ALSA と 'default' の両方を手動で割り当てましたが、どちらも同じ 'snd_pcm_hw_params' エラーを返すことに注意してください):
Output Device name: "sysdefault:CARD=ALSA"
Output Device name: "default"
Default device is "default"
Output device is: "default"
"QAudioOutput: snd_pcm_hw_params: err = -12"
Pactl はそれを見ます:
pactl list sinks
Sink #0
State: SUSPENDED
Name: alsa_output.0.analog-mono
Description: bcm2835 ALSA Analog Mono
Driver: module-alsa-card.c
Sample Specification: u8 1ch 8000Hz
/etc/pulse/default.pa を変更して、出力デバイスを強制するためにこれを下部に追加しようとしました:
load-module module-alsa-sink sink_name=alsa_output.0.analog-mono device=hw:0
set-default-sink alsa_output.0.analog-mono
エラーが発生するセットアップコードは次のとおりです。
// Coordinator receives Audio data
m_Format.setSampleRate(8000);
m_Format.setChannelCount(1);
m_Format.setSampleSize(8);
m_Format.setCodec("audio/pcm");
m_Format.setByteOrder(QAudioFormat::BigEndian);
m_Format.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo infoOut(QAudioDeviceInfo::defaultOutputDevice());
foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
qDebug() << "Output Device name: " << deviceInfo.deviceName();
}
qDebug() << "Default device is" << infoOut.deviceName();
if (!infoOut.isFormatSupported(m_Format))
{
qDebug()<< "Default format not supported - trying to use nearest";
m_Format = infoOut.nearestFormat(m_Format);
}
qDebug() << "Output device is: " << infoOut.deviceName();
m_AudioOutput = new QAudioOutput(infoOut, m_Format, this);
// This data accumulates and dumps data to output
m_DataForOutput.clear();
// Now Start playing
// m_Output gets written to to send data to speakers
m_Output = m_AudioOutput->start();
世界で何が起こっているのですか?なぜ同じ構成が 5.4.1 ではなく 5.3.2 で機能するのでしょうか。デフォルトのオーディオ デバイスの割り当てが機能しません... ここで何ができ、どのように機能させることができますか? ありがとう!