std::ofstream 写本地音频

发布时间 2023-07-21 16:42:24作者: strive-sun

最近线上 PK 偶然出现双方主播互相听不见声音的情况,在日志不能明确体现问题时,就需要抓下主播本地的音频和远端的音频来确定数据是在哪消失的

所以我们用到一个比较简单的流写出的标准库类:std::ofstream

通过 std::ofstream 类,可以创建一个用于写入文件的输出流对象,可以将数据写入到文件中

下面是一个简单的例子:

#include <fstream>

// 音频回调,也可以在发送音频数据时写入
void OnAudioData(void* data, int size, int channels, int bit_per_sample){
  send_audio_date.write((char*)data, size);
}

void Stop(){
  send_audio_data_.close();
}

main(){
  ...

  std::ofstream send_audio_data_ =
      std::ofstream("send_audio", std::ios::out | std::ios::binary);

  // 音频数据采集的过程,此处省略
// 48000hz, 16bit, 2channels ... // 停止发送数据 Stop(); }

  

本地会生成一个无格式的 send_audio 文件,如何查看音频是否符合预期呢

我们要借助一个音频软件:GoldWave

加载本地文件后,界面如下:

 

要注意的是,要输入正确的音频速率和位数等参数

这是我例子中音频的参数,供大家参考

点击左上角的播放按钮即可播放音频数据,一般情况,有数据的话,是有波形的

而波形也分两种,初中物理也学过,噪音是杂乱无章的,而人声或者音乐是有规律的,简单分辨后,即可找出问题