返回信息流有木有哪位大神给个c++程序,但求能读出wav格式文件,跪求跪求
这是一条镜像帖。来源:北邮人论坛 / cpp / #71570同步于 2013/6/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求一c++程序读出wav格式文件
a1019866208
2013/6/5镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
//
// 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格式文件,跪求跪求
你好,我想问下,这种你一般在哪里快速找到?谢谢。
【 在 tonyjansan 的大作中提到: 】
: [code=c]
: //
: // sizeof(WaveHeader) == 44
: ...................
我就是做这个的...~直接从工程代码里拉出来的~
像bmp、ico、wav这些格式的头结构和数据结构微软自己都公布出来了(否则做图像编辑软件、音乐播放器等的人如何读写这些格式呢,本身这就不像系统内核一样是什么秘密)~另外具体的wav文件头参数变化直接Hex分析就行了,参考原始的头结构黑箱都能推出来,44个字节的文件头分析神马的都弱爆了- -(和游戏封包资源结构相比)
【 在 AK47 的大作中提到: 】
: 你好,我想问下,这种你一般在哪里快速找到?谢谢。
https://github.com/search?l=C%2B%2B&q=wav&ref=cmdform&type=Repositories
【 在 AK47 的大作中提到: 】
: 你好,我想问下,这种你一般在哪里快速找到?谢谢。
需自备梯子~随时警惕G F W施工队砌墙~
【 在 doit 的大作中提到: 】
: https://github.com/search?l=C%2B%2B&q=wav&ref=cmdform&type=Repositories
:
【 在 tonyjansan 的大作中提到: 】
: [code=c]
: //
: // sizeof(WaveHeader) == 44
: ...................
大一学的比较基础,大神能否给个比较详细点的,谢谢大神[ema11]
好吧,好聪明。我都是在MSDN官方网站找,谢谢你。
【 在 doit 的大作中提到: 】
: https://github.com/search?l=C%2B%2B&q=wav&ref=cmdform&type=Repositories
:
我上边那个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 的大作中提到: 】
: 大一学的比较基础,大神能否给个比较详细点的,谢谢大神