G723音频格式读入内存
音频是用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音频格式读入内存相关推荐
- 利用FFmpeg将H.264文件读入内存,再输出封装格式文件
/***先将H.264文件读入内存,*再输出封装格式文件.*/ #include "stdafx.h"#define __STDC_CONSTANT_MACROSextern &q ...
- 将音频格式wav格式转为g711u,g711a及g723
前几天接到一个任务,将wav格式的音频文件,转成几个小众的音频格式.首先我便想到使用ffmpeg,但是查阅文档后发现,ffmpeg仅支持g723格式转码,命令如下: ./ffmpeg -i D:\音频 ...
- Matlab音频格式转换
所需前置知识 读音频 audioread 语法: [y,Fs] = audioread(filename); 从名为 filename 的文件中读取数据,并返回样本数据 y 以及该数据的采样率 ...
- Matlab 音频格式转换(wav,ogg,flac,au,aiff,aif,aifc,mp3,m4a,mp4 互转)
欢迎转载,但请一定要给出原文链接,标注出处,支持原创! 谢谢~ https://blog.csdn.net/qq_29225913/article/details/105445028 目录 1.目标及 ...
- 创建ogg文件 c语言,Ogg音频格式文件的样本构造(CVE-2018-5146)
原标题:Ogg音频格式文件的样本构造(CVE-2018-5146) *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 下面的所有分析都是在Firefox 59.0 32位上进行的.由于笔者是刚入 ...
- 音乐格式如何进行转换,音频格式转换器哪个好
经常会听到一些比较好听的歌曲,有的时候回将它们下载下来.但是并不是每首歌曲的格式都是一样的,为了方便我们对歌曲的管理,许多人都会选择将音乐的格式统一转换成某一个格式,那么怎么进行转换呢?下面小编就来教 ...
- Java转化音频格式 m4a-wav
Java转化音频格式m4a->wav 安装ffmpeg 案例代码: public static String conversionormat(String fileName) {String w ...
- Java使用ffmpeg进行音频格式转换
ffmpeg相关文章网址(用于记录一些好的文章地址~) ffmpeg命令详解 https://blog.csdn.net/zzcchunter/article/details/68060989 jav ...
- 让我来推荐几个WAV音频格式转换软件
大家是否跟我一样对音频文件格式接触的比较多的是MP3和FLAC,然而某一天我在传输歌曲时发现了一首歌是WAV格式.了解后才发现原来WAV是微软开放的一种标准数字音频文件,这个格式能记录单声道或者立体声 ...
最新文章
- 两小时搞定负载均衡51CTO技术沙龙现场视频2
- Linux下查看文件或文件夹大小的命令df 、du、ls
- java方法定义 与调用_Java方法的定义及调用
- 【商务智能】数据预处理
- 电力系统潮流计算matlab程序,大神们,求个电力系统潮流计算的matlab程序。
- Git之第三方托管oschina
- 华为手机浏览器不支持PUT提交方式的解决方案
- Python爬取网易云热歌榜所有音乐及其热评
- 3月7日 当前动力电池竞争格局
- Android源码学习(一)系统源码初识
- 系统蓝屏日志DMP文件分析工具WinDbg及教程
- Pr入门系列之三:新建序列
- 特斯拉舍命狂奔:史上最强自动驾驶芯片发布背后,一场蓄意已久的进攻
- 【航线运输驾驶员理论考试】飞行性能、计划和装载
- android蓝牙传输文件到mysql_使用Android将图像发送到MySQL数据库
- 天翼云linux上传工具,(一)天翼云主机安装seafile7.0.3
- 2015年7月深圳社保缴费基数费率表
- apt-get安装包失败提示The following packages have unmet dependencies
- GG-Editor介绍-在线绘图软件
- sku这样设置不仅降低退款投诉还可以提升转化