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();
}
相关推荐
程序员老陆7 天前
FFmpeg6 在 Windows 打开麦克风并录成 PCM:不走 Qt Multimedia,也不碰 WASAPI
windows·ffmpeg·音视频·pcm
PGCCC8 天前
PostgreSQL 数据库认证体系技术解析:PCA / PCP / PCM 三级能力模型与考纲拆解
数据库·postgresql·pcm
砚凝霜19 天前
软考网络工程师|第 2 章 信道延迟、传输介质、数据编码、数字调制、PCM 完整备考笔记
网络·笔记·pcm
Curvatureflight2 个月前
浏览器音频采集实践:麦克风权限、降噪、回声消除与 PCM 转换
前端·javascript·音视频·信息与通信·web·pcm
REDcker2 个月前
PCM与音量详解
pcm
林夕073 个月前
Qt 6.x 新特性概览:从 Qt 5 到 Qt 6 的升级之路
c++·qt6·跨平台开发
碧海银沙音频科技研究院3 个月前
音箱录音的pcm出现削波问题原因以及解决方法
pcm
Android系统攻城狮3 个月前
Android tinyalsa深度解析之pcm_plugin_write调用流程与实战(一百七十九)
android·pcm·tinyalsa·android16·音频进阶·android音频进阶
zc.z3 个月前
JAVA实现:纯PCM格式音频转换成BASE64
java·音视频·pcm
悠哉清闲3 个月前
生成pcm文件并播放查看波形
java·pcm