最近线上 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

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

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

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

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

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

std::ofstream 写本地音频的更多相关文章

  1. std::ofstream由二进制流写文件的问题

    从MPQ包中读取二进制流出来然后文件写到硬盘. DWORD size = SFileGetSize(hFile); char* buffer = new char[size]; std::ofstre ...

  2. FFmpeg4.0笔记:封装ffmpeg的音频重采样功能类CSwr

    Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff CSwr.h /************************* ...

  3. C++ ifstream,ofstream读写二进制文件

    为什要吧数据存为二进制 这个嘛,是我个人习惯,一般,我们会把日志文件存为文本文件.数据文件存成二进制文件. 其实,我们接触的文件,比如图像.视频都是以二进制的形式存储的,要想查看这类数据,必须知道数据 ...

  4. 使用ofstream输出unicode

    void saveWideFileHead(std::ofstream& out)// 写入文件内容前,先写入BOM { char const* const utf16head = " ...

  5. C++ STL std::wstring_convert处理UTF8

    #include <iostream> #include <string> #include <locale> #include <codecvt> # ...

  6. std::unique_ptr的用法

    std::ofstream("demo.txt") << 'x'; // 准备要读的文件 { std::unique_ptr<std::FILE, decltyp ...

  7. C++11智能指针之std::unique_ptr

    C++11智能指针之std::unique_ptr   uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...

  8. C++中写文件ofstream 的<< 操作符 与C风格的fwrite 的笔记

    在某次工作中,调用了某SDK接口,该接口通过一个回调函数返回需要的内容.我们需要的内容是H.264码流,该码流通过一个unsigned char* 变量带回,另外还有一个长度 int length.为 ...

  9. std::wstring_convert处理UTF8

    扔掉MultiByteToWideChar 吧,使用std::wstring_convert和 std::codecvt_utf8 来处理UTF8与WChar之间的互转. VC和Clang都支持哦~ ...

  10. C++的那些事:流与IO类

    1.流的概念 "流"就是"流动",是物质从一处向另一处流动的过程,比如我们能感知到的水流.C++的流是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存) ...

随机推荐

  1. 可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

    可视化大屏适配/自适应现状 可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件.工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东 ...

  2. 通过Handsontable实现像Excel一样编辑数据

    ​一.Handsontable是指什么? 官网: http://handsontable.com Handsontable是一个JavaScript库,可以帮助您轻松实现类似Excel电子表格一样的编 ...

  3. OpenAI CLIP 关键点 - 连接图像和文字

    标签: #CLIP #Image2Text #Text2Image #OpenAI 创建时间:2023-04-21 00:17:52 基本原理 CLIP是一个图像分类模型. 准备训练数据:准备大量的文 ...

  4. JavaScript 如何判断一个对象中是否有某个属性?

    今天讲讲,JavaScript 如何判断一个对象中是否有某个属性? 我总结了5个方法: 方法1: if(Obj[a]) {} 缺点:对于参数值为 undefined 和 0 的无效. 方法2: if( ...

  5. vue中让嵌入的iframe完美自适应宽度、高度

    涉及到系统集成的时候,前端我们经常会用到iframe嵌入,但是嵌入的时候经常有不适应的情况,太长或太宽.滚动条... 下面的方法可以做到使嵌入的iframe自适应宽度.高度, 1.嵌入iframe,加 ...

  6. 2022-04-25:给定一个整数数组,返回所有数对之间的第 k 个最小距离。一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值。 输入: nums = [1,3,1] k = 1 输出:

    2022-04-25:给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 输入: nums = [1,3,1] k = 1 输出: ...

  7. 2021-06-18:已知数组arr,生成一个数组out,out的每个元素必须大于等于1,当arr[cur]>arr[cur-1]时,out[cur]>out[cur-1];当arr[cur]>arr

    2021-06-18:已知数组arr,生成一个数组out,out的每个元素必须大于等于1,当arr[cur]>arr[cur-1]时,out[cur]>out[cur-1]:当arr[cu ...

  8. 【从0开始编写webserver·基础篇#02】服务器的核心---I/O处理单元和任务类

    I/O处理单元和任务类 前面写了线程池,那么现在要考虑如何去使用该线程池了 注意,到目前为止,我们还是在解决web服务器的I/O处理单元 即负责处理客户连接,读写网络数据的部分 线程池属于 Web 服 ...

  9. [xctf] 江苏工匠杯easyphp

    [xctf] 江苏工匠杯easyphp 考点 PHP弱类型 一.题目 <?php highlight_file(__FILE__); $key1 = 0; $key2 = 0; $a = $_G ...

  10. 音容笑貌,两臻佳妙,人工智能AI换脸(deepfake)技术复刻《卡萨布兰卡》名场面(Python3.10)

    影史经典<卡萨布兰卡>是大家耳熟能详的传世名作,那一首壮怀激烈,激奋昂扬的马赛曲,应当是通片最为激动人心的经典桥段了,本次我们基于faceswap和so-vits库让AI川普复刻美国演员保 ...