Qt5.3 看到默认的 Raspberry Pi also_output.0.analog-mono 设备(3.5 毫米耳机插孔)和 5.3 的 QAudioOutput 成功地将音频写入该设备,我可以用耳机听到音频。这一切都适用于默认的 Raspbian,来自 apt-get 的 PulseAudio 2.0,无需额外配置。PulseAudio 作为会话进程运行,而不是在系统守护程序模式下运行。Qt 5.4 看不到具有完全相同源代码和 Raspbian 的设备(除了与 Qt 5.4.0 而不是 Qt 5.3.2 交叉编译),也无法向其写入数据。
它给了我这个错误(请注意,我手动分配了 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.3.2 而不是 5.4.1。分配默认音频设备不起作用...我可以在此处做什么以及如何使其工作?谢谢!