音频是用ffmpeg转的,然后用c++把文件从磁盘读到内存
按帧存储,每一帧有24字节(192比特)
文件头和码流部分是分开的
我并不确定每个文件头都一样

文件头和帧定义

struct WaveFileHead
{char   riff_id[4];     //"RIFF"int    size0;          //波形块的大小char   wave_fmt[8];    //"wave" and "fmt "// 二合一int    size1;          //格式块的大小short  fmttag;         //波形编码格式short  channel;        //波形文件数据中的通道数int    sampl;          //波形文件的采样率int    bytepersecblockalign;  //平均每秒波形音频所需要的记录的字节数short  blockalign;      //一个采样所需要的字节数short  bitpersamples;   //声音文件数据的每个采样的位数char notKnow[24];    // 不知道是什么char   list[4];        // LISTint      nothinSize;char otherThing[26]; // 对应着上个参数的大小 放一些没啥用的东西char   data[4];         //"data"short int    datasize;      //数据块大小
};struct Frame {bitset<192> content;
};

文件头最后本应该有一个数据块大小,也就是data是4字节,datasize也是4字节,但是不知道为什么拆开读数据会有错误,我想有可能是上面的26字节数据块的对齐有问题,暂时未知,没有去研究,因为我并不需要修改文件头。
所以上面这个bug后来让我花了半个下午的时间去check,本来我需要的长度是102,但是sizeof出来时104…所以直接限定长度即可。
Frame 是一帧的定义,下面会开一个数组用来存body。

读入723文件

 ifstream f;WaveFileHead wavehead;int FrameCnt = 0;Frame *a = new Frame[99999];int size_wav = 102;G723(string s) {f.open(s, ios::binary);f.read((char *)&wavehead, size_wav);while (f) {f.read((char *)&a[FrameCnt++], sizeof( Frame)); // 每次读一帧}}// 读入一个723文件 获取头信息和帧信息

两段代码合在一起,加上头文件和命名空间即可。
需要注意bitset的用法,是从低位存储到高位,
也就是说 x = 12 的二进制是 1100,那么
x[0] = 0,
x[1] = 0,
x[2] = 1,
x[3] = 1

这个也是个坑爹的地方,这就意味着和码元表对应的数据不一样。
不过物理存储倒是没什么问题,读写需要加一个映射关系。

723文件写出

 void WriteFile(string path) {ofstream out(path, ios::binary);out.write((char *)&wavehead, size_wav);// 写出头信息out.write((char *)a, sizeof( Frame) * FrameCnt);// 写出帧信息}

直接把头信息和帧信息一起写出即可。

G723音频格式读入内存相关推荐

  1. 利用FFmpeg将H.264文件读入内存,再输出封装格式文件

    /***先将H.264文件读入内存,*再输出封装格式文件.*/ #include "stdafx.h"#define __STDC_CONSTANT_MACROSextern &q ...

  2. 将音频格式wav格式转为g711u,g711a及g723

    前几天接到一个任务,将wav格式的音频文件,转成几个小众的音频格式.首先我便想到使用ffmpeg,但是查阅文档后发现,ffmpeg仅支持g723格式转码,命令如下: ./ffmpeg -i D:\音频 ...

  3. Matlab音频格式转换

    所需前置知识 读音频 audioread 语法:   [y,Fs] = audioread(filename);   从名为 filename 的文件中读取数据,并返回样本数据 y 以及该数据的采样率 ...

  4. Matlab 音频格式转换(wav,ogg,flac,au,aiff,aif,aifc,mp3,m4a,mp4 互转)

    欢迎转载,但请一定要给出原文链接,标注出处,支持原创! 谢谢~ https://blog.csdn.net/qq_29225913/article/details/105445028 目录 1.目标及 ...

  5. 创建ogg文件 c语言,Ogg音频格式文件的样本构造(CVE-2018-5146)

    原标题:Ogg音频格式文件的样本构造(CVE-2018-5146) *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 下面的所有分析都是在Firefox 59.0 32位上进行的.由于笔者是刚入 ...

  6. 音乐格式如何进行转换,音频格式转换器哪个好

    经常会听到一些比较好听的歌曲,有的时候回将它们下载下来.但是并不是每首歌曲的格式都是一样的,为了方便我们对歌曲的管理,许多人都会选择将音乐的格式统一转换成某一个格式,那么怎么进行转换呢?下面小编就来教 ...

  7. Java转化音频格式 m4a-wav

    Java转化音频格式m4a->wav 安装ffmpeg 案例代码: public static String conversionormat(String fileName) {String w ...

  8. Java使用ffmpeg进行音频格式转换

    ffmpeg相关文章网址(用于记录一些好的文章地址~) ffmpeg命令详解 https://blog.csdn.net/zzcchunter/article/details/68060989 jav ...

  9. 让我来推荐几个WAV音频格式转换软件

    大家是否跟我一样对音频文件格式接触的比较多的是MP3和FLAC,然而某一天我在传输歌曲时发现了一首歌是WAV格式.了解后才发现原来WAV是微软开放的一种标准数字音频文件,这个格式能记录单声道或者立体声 ...

最新文章

  1. 两小时搞定负载均衡51CTO技术沙龙现场视频2
  2. Linux下查看文件或文件夹大小的命令df 、du、ls
  3. java方法定义 与调用_Java方法的定义及调用
  4. 【商务智能】数据预处理
  5. 电力系统潮流计算matlab程序,大神们,求个电力系统潮流计算的matlab程序。
  6. Git之第三方托管oschina
  7. 华为手机浏览器不支持PUT提交方式的解决方案
  8. Python爬取网易云热歌榜所有音乐及其热评
  9. 3月7日 当前动力电池竞争格局
  10. Android源码学习(一)系统源码初识
  11. 系统蓝屏日志DMP文件分析工具WinDbg及教程
  12. Pr入门系列之三:新建序列
  13. 特斯拉舍命狂奔:史上最强自动驾驶芯片发布背后,一场蓄意已久的进攻
  14. 【航线运输驾驶员理论考试】飞行性能、计划和装载
  15. android蓝牙传输文件到mysql_使用Android将图像发送到MySQL数据库
  16. 天翼云linux上传工具,(一)天翼云主机安装seafile7.0.3
  17. 2015年7月深圳社保缴费基数费率表
  18. apt-get安装包失败提示The following packages have unmet dependencies
  19. GG-Editor介绍-在线绘图软件
  20. sku这样设置不仅降低退款投诉还可以提升转化

热门文章

  1. arcgis for js实现三维地图架构
  2. html显示宇宙星星,如何利用JS/CSS实现根据数值显示星星?
  3. 企业微信通讯录回调密文解析及微信支付回调密文解析异常处理
  4. 动手学机器学习(第二版)-第四章训练模型
  5. USACO 1.2.4_beads
  6. STM32——检测输入方波的频率
  7. 【元器件学习笔记—电阻】(4)——电阻器基本工作原理和主要特性
  8. python之turtle学习笔记
  9. nexus5x刷最新android M
  10. 中国移动敲定A股发行价,预计上市时市值将达到1.18万亿元