Qt6.8 使用QAudioSink 播放网络PCM语音

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();
}
相关推荐
Android系统攻城狮3 小时前
Android tinyalsa深度解析之pcm_plugin_open调用流程与实战(一百七十四)
android·pcm·tinyalsa·音频进阶手册
Android系统攻城狮4 小时前
Android tinyalsa深度解析之pcm_params_set_max调用流程与实战(一百七十)
android·pcm·tinyalsa·android音频进阶
Android系统攻城狮6 小时前
Android tinyalsa深度解析之pcm_params_get_period_size_max调用流程与实战(一百七十二)
android·pcm·tinyalsa·音频进阶
Android系统攻城狮9 小时前
Android tinyalsa深度解析之pcm_params_set_min调用流程与实战(一百六十九)
android·pcm·tinyalsa·音频进阶
枳实-叶5 天前
嵌入式 Linux 下 ALSA 音频采集与 PCM 播放流程详解
linux·音视频·pcm
Android系统攻城狮17 天前
Android tinyalsa深度解析之pcm_params_get调用流程与实战(一百六十二)
android·pcm·tinyalsa·android hal·audio hal
haiyaoyouyou21 天前
Qt6.8 使用QAudioBufferInput 录制网络PCM语音流成文件
pcm·bufferinput·qaudiobuffer
mftang21 天前
MCU上应用的主流NVM技术: 嵌入式相变存储器(PCM) 和嵌入式磁阻随机存取存储器(MRAM)
单片机·嵌入式硬件·pcm
proware1 个月前
3588 ES8388 PCM之需求分析
pcm·3588·es8388