1 用到的Qt类
音频输出接口类:QAudioSink
音频设备类:QAudioDevice
相关资料:https://doc.qt.io/qt-6/zh/qaudiosink.html
2 初始化扬声器
cpp
QIODevice *m_output;//扬声器播放对象
QAudioFormat outputAudioFormat;
QScopedPointer<QAudioSink> audioOutputsource;
cpp
//初始化扬声器
void Module_Sound::AudioInOut::initializeOutPutAudio(const QAudioDevice &deviceInfo)
{
qDebug() << "outputAudioDevice音频输出设备:" << deviceInfo.description();
outputAudioFormat = deviceInfo.preferredFormat();
outputAudioFormat.setSampleRate(8000); //设置采样率以对赫兹采样。 以秒为单位,每秒采集多少声音数据的频率.
outputAudioFormat.setChannelCount(1); //将通道数设置为通道。
// outputAudioFormat.setSampleSize(16); /*将样本大小设置为指定的sampleSize(以位为单位)通常为8或16,但是某些系统可能支持更大的样本量。*/
outputAudioFormat.setSampleFormat(QAudioFormat::Int16);
// if(!deviceInfo.isFormatSupported(outputAudioFormat))
// {
// qWarning() << "not Support fromat";
// }
qDebug("sampleRate: %d, channelCount: %d, sampleFormat: %d",
outputAudioFormat.sampleRate(), outputAudioFormat.channelCount(), outputAudioFormat.sampleFormat()
);
audioOutputsource.reset(new QAudioSink(deviceInfo, outputAudioFormat));
audioOutputsource->setBufferSize(300 * outputAudioFormat.bytesPerFrame() * outputAudioFormat.sampleRate() / 1000);
audioOutputsource->setVolume(1);//最大音量
}
3 开始播放
cpp
//开始播放
void Module_Sound::AudioInOut::startAudioOutput()
{
qDebug() << "onstartListening";
m_output = audioOutputsource->start();
}
4 写入网络PCM数据
cpp
//语音数据写入播放缓存
void Module_Sound::AudioInOut::SoundPlay(int PalyIndex, QByteArray VoiceDataX)
{
m_output->write(VoiceDataX );
}
5 停止播放
cpp
//停止播放
void Module_Sound::AudioInOut::stopAudioOutput()
{
qDebug() << "onstopListening";
audioOutputsource->stop();
}