BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #71570同步于 2013/6/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求一c++程序读出wav格式文件

a1019866208
2013/6/5镜像同步17 回复
有木有哪位大神给个c++程序,但求能读出wav格式文件,跪求跪求
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
tonyjansan机器人#1 · 2013/6/5
// // sizeof(WaveHeader) == 44 typedef struct _WaveHeader { char FileTag[4]; // 'R' 'I' 'F' 'F' int FileSize; // DataHdrLength + sizeof(WaveHeader) - 8 char WaveTag[4]; // 'W' 'A' 'V' 'E' char FmtHdrTag[4]; // 'f' 'm' 't' ' '(' ' == (char)0x20) int FmtHdrLength; // 0x10 short FormatTag; // 0x0001 short Channels; // 1 | 2 | 4 | ... int SampleRate; // pcm sample-rate int AvgBytesPerSec; // BlockAlign * SampleRate short BlockAlign; // (short)((Channels * BitsPerSample) >> 3); short BitsPerSample; // 8 | 16 | 32 | ... (pcm data bit/sample) char DataHdrTag[4]; // 'd' 'a' 't' 'a' int DataHdrLength; // pcm data size (bytes count) } WaveHeader, *PWaveHeader; 【 在 a1019866208 的大作中提到: 】 : 有木有哪位大神给个c++程序,但求能读出wav格式文件,跪求跪求
ak47机器人#2 · 2013/6/5
你好,我想问下,这种你一般在哪里快速找到?谢谢。 【 在 tonyjansan 的大作中提到: 】 : [code=c] : // : // sizeof(WaveHeader) == 44 : ...................
tonyjansan机器人#3 · 2013/6/5
我就是做这个的...~直接从工程代码里拉出来的~ 像bmp、ico、wav这些格式的头结构和数据结构微软自己都公布出来了(否则做图像编辑软件、音乐播放器等的人如何读写这些格式呢,本身这就不像系统内核一样是什么秘密)~另外具体的wav文件头参数变化直接Hex分析就行了,参考原始的头结构黑箱都能推出来,44个字节的文件头分析神马的都弱爆了- -(和游戏封包资源结构相比) 【 在 AK47 的大作中提到: 】 : 你好,我想问下,这种你一般在哪里快速找到?谢谢。
doit机器人#4 · 2013/6/5
https://github.com/search?l=C%2B%2B&q=wav&ref=cmdform&type=Repositories 【 在 AK47 的大作中提到: 】 : 你好,我想问下,这种你一般在哪里快速找到?谢谢。
tonyjansan机器人#5 · 2013/6/5
需自备梯子~随时警惕G F W施工队砌墙~ 【 在 doit 的大作中提到: 】 : https://github.com/search?l=C%2B%2B&q=wav&ref=cmdform&type=Repositories :
a1019866208机器人#6 · 2013/6/5
【 在 tonyjansan 的大作中提到: 】 : [code=c] : // : // sizeof(WaveHeader) == 44 : ................... 大一学的比较基础,大神能否给个比较详细点的,谢谢大神[ema11]
ak47机器人#7 · 2013/6/5
好吧,好聪明。我都是在MSDN官方网站找,谢谢你。 【 在 doit 的大作中提到: 】 : https://github.com/search?l=C%2B%2B&q=wav&ref=cmdform&type=Repositories :
tonyjansan机器人#8 · 2013/6/5
我上边那个struct里定义的是wav格式文件的文件头数据结构~ wav格式的整个存储结构是:文件头 + 采样数据 采样数据的读取方法是要依据文件头的一些参数而定的, 下边给你解释下我那个struct里定义的成员的意思: FileTag这个参数就是文件类型标识,没有具体作用; FileSize指的是文件长度,注意这个文件长度是不包括FileTag和FileSize的,所以是DataHdrLength + sizeof(WaveHeader) - 8(DataHdrLength指的是pcm信号采样数据的总字节数) WaveTag类似FileTag,是音频类型标识,没有具体作用; FmtHdrTag也类似,是帧类型标识,没有具体作用; FmtHdrLength是帧头信息的长度,一般默认值为0x10(十进制16) FormatTag是头格式标识,一般默认值为0x0001((short)1) 下边的参数都是与采样数据格式有关: Channels指的是声道数,可以为1、2、4... SampleRate指的是pcm信号采样率 AvgBytesPerSec指的是采样数据中每秒的数据有多少个字节 BlockAlign指的是数据块的粒度~用来计算读取数据的指针偏移量 BitsPerSample指的是采样点的表达类型(8bit、16bit...) DataHdrTag是数据头标识,没有具体作用 DataHdrLength是pcm信号采样数据的总字节数(不包括WaveHeader) 一般来说读写wav格式数据时,都是先解析出WaveHeader,拿到采样数据的格式,然后按照格式对采样数据进行读写~ 【 在 a1019866208 的大作中提到: 】 : 大一学的比较基础,大神能否给个比较详细点的,谢谢大神
colorest机器人#9 · 2013/6/5
还是OpenCV比较幸福,直接封装好的各种接口。。 不过我记得音频应该也有库吧? OSS和那个mm什么的是不是也能干这个?