音视频之音频处理(关于音频处理注意事项)

 最近在做音视频相关代码,发现网上关于音频处理的大同小异,相关处理的细节,不够详细,博主过坑在这里一一详述,希望对读者有一定的启发。

    // 设置采样格式
    QAudioFormat audioFormat;
    audioFormat.setSampleRate(8000);
    audioFormat.setChannelCount(1);
    audioFormat.setSampleSize(16);
    audioFormat.setCodec("audio/pcm");
    audioFormat.setByteOrder(QAudioFormat::LittleEndian);
    audioFormat.setSampleType(QAudioFormat::SignedInt); // 16-bit signed integer

    // 检查默认输入设备
    QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
    if (!info.isFormatSupported(audioFormat)) {    
        audioFormat = info.nearestFormat(audioFormat);
    }

    //检查默认的输出设备
    info = QAudioDeviceInfo::defaultOutputDevice();
    if (!info.isFormatSupported(audioFormat)) {
        audioFormat = info.nearestFormat(audioFormat);
    }

    // 创建音频输入输出对象
    audioInput = new QAudioInput(audioFormat, this);
    audioInput->setBufferSize(xxxxx);//audioInput不够大导致后面的数据会冲掉前面的数据导致音频数据错误,音频卡顿重复播放,根据编码需要设定

//    //将麦克风的音频数据传输到输入设备
//    streamIn = audioInput->start();
//    //当输入设备检测到数据时,调用槽函数slogReadDatabugo
//    connect(streamIn, SIGNAL(readyRead()), SLOT(slogReadData()));

    audioOutput = new QAudioOutput(audioFormat, this);
   
    //将音频数据传输到输出设备,再由输出设备写入到扬声器
    streamOut = audioOutput->start();

往往很多人对于音频的处理直接在初始化时候将音频的输入设备直接start,这会导致在程序启动直接开始读取数据,如果说设备对讲不是一启动设备就开启对讲会造成stream堆积大量的录音设备造成音频对讲卡顿或者对讲不同步。

2.第二个坑就是关于 audioInput->setBufferSize();输入音频数据的大小设置,audioInput不够大导致后面的数据会冲掉前面的数据导致音频数据错误,音频卡顿重复播放;举个例子,数数在1中间会卡顿然后重复1,产生拖音。具体的处理方法如下:

void MyTalkAudio::slogReadData()
{

    
        // 需要一个标志位触发
        streamIn = audioInput->start();   // 开始音频输入流
       
      


}

关于编解码部分采用G7xx 系列,以上仅供参考,如有疑问可私信交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值