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();
}
相关推荐
女神下凡8 天前
带NPU的电脑 和不带NPU的电脑 在使用上有什么不样
arm开发·单片机·pcm
蓝悦无人机12 天前
《地面站软件开发》-第2章ArcGIS Maps SDK for Qt 改变视角
arcgis·上位机·地面站·qml·qt6·qt quick·天地图
沧海一笑-dj20 天前
【Qt】Qt6.11安装教程详解
qt·qt creator·qt6·qt安装·qt安装教程
STQY燊桐启元(深圳)电子科技21 天前
太阳能追踪设备散热优化,相变陶瓷片解决全日照高温积温故障
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技25 天前
耐高温工况专项适配:相变陶瓷片如何突破高温工业设备散热瓶颈
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技25 天前
工业物联网网关散热升级,相变陶瓷片解决微型设备积温过热难题
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技1 个月前
大功率储能PCS散热升级,ST-PCM180氮化铝相变陶瓷适配高密度热管理
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技1 个月前
免涂硅脂新时代,ST‑PCMTC96 与 ST‑PCM180 相变陶瓷片重构功率器件热管理
经验分享·笔记·重构·pcm
折枝吖1 个月前
音视频开发-PCM 原理与 AI 模块实战
音视频·pcm
程序员老陆2 个月前
FFmpeg6 在 Windows 打开麦克风并录成 PCM:不走 Qt Multimedia,也不碰 WASAPI
windows·ffmpeg·音视频·pcm