急寻mp3转 wav算法。 急,谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 winamp就可以呀!!!!你可以打开WINAMP然后点击参数,在面里的"输出"选项中选中WMA然后再选个音乐文件点击播放就可以转换了(转时没有声音),转完后记着改回来哦!那个方法不仅适用wma,wav,mp3,vqf等音乐格式音的相互转换! 算了,看来也没有人能给出源代码,版主还是用XAudio组件吧,我就是这样用的代码如下: Decoder.OutputModuleRegister('xa_dsound_output.dll'); Decoder.SetPlayerEnvironmentInteger('OUTPUT.DIRECTSOUND.WINDOW', Handle); Decoder.SetOutputChannels(1); //for mono, 2 for stereo Decoder.SetPlayerMode(XA_PLAYER_MODE_OUTPUT_AUTO_CLOSE_ON_EOF); Decoder.SetOutputName(WorkPath+'Temp.dat'); Decoder.InputOpen('d:\aaa.wav'); Decoder.Play;但是请注意生成的Wave没有文件头,你得先写一个相应的Wave文件头才行。 Decoder定义为XAudio组件。XAudio组件到网上去下载吧! 上一贴有点问题: Decoder.InputOpen('d:\aaa.wav');应为Decoder.InputOpen('原文件.mp3'); 偏移地址 字节数 数据类型 内 容 文件头 00H 4 char "RIFF"标志 04H 4 long int 文件长度 08H 4 char "WAVE"标志 0CH 4 char "fmt"标志 10H 4 过渡字节(不定) 14H 2 int 格式类别(10H为PCM形式的声音数据) 16H 2 int 通道数,单声道为1,双声道为2 18H 2 int 采样率(每秒样本数),表示每个通道的播放速度, 1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。 20H 2 int 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。 22H 2 每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。 24H 4 char 数据标记符"data" 28H 4 long int 语音数据的长度 /////////////////////但找了好多资料说文件头都这个样子,但我找了个能播放的WAV文件分解文件头结果又对不上,过度字节那里开始错,如果去掉过度字节的4bytes,似乎从数据快调整数开始错了。谁知道准确的文件头结构是怎样的??? TWaveHeader = record rId : longint; //固定标记 值为"RIFF" rLen : longint; //随后的字节数 值为(wSampleLength +36) wId : longint; //固定标记 值为"WAVE" fId : longint; //ckID 值为"fmt " fLen : longint; //nChunkSize Wave文件块的大小 16 wFormatTag : word; //音频数据的编码方式 此值常为1 表示PCM方式 nChannels : word; //声道数 nSamplesPerSec : longint; //每秒采样频率 nAvgBytesPerSec : longint; //每秒字节数 nBlockAlign : word; //一次输出的字节数 值为采样位数*声道数/8 wBitsPerSample : word; //采样位数 一般16位和8位 dId : longint; //固定标记 值为"data" wSampleLength : longint; //采样数据长度 值为文件大小-文件头大小(44) end; 你真的试过正确吗?我在网上已经找了4,5个不同版本了,国内外的都有,msdn也上过,没一个对得上!!! 还是用控件方便,如果完全自己写mp3到wav的代码,那是需要相当高的基础的,富利叶级数、富利叶变换、离散余弦变换、反离散余弦变换,基本上都是数学功底,学去吧。 绝对是使用第三方组件最好了自己写难度很大,而且就算会都要很多时间的http://lysoft.7u7.net to sboom() 我试过了可以使用但注意各参数之间的约束条件。 我想学习delphi2006,有问题需要请教? WebBrowser进入QQ空间农场怎么处理? StringGrid的内容和数据集比较结果在DBGridEh中显示出来. 网络映射的问题,急,请大家帮忙 ActiveForm在IE中调用,关闭IE时出现读地址错,怎么办啊 DdeClient 问题,为什么只有 DdeClientItem00 有值,其他没有呢? 我就是这样连的? 改个金额转换函数,在线等,100分马上给 在fastport中要进行添加、保存,按钮要放到哪里 为什么D6启动不了? l_jia()近来领分4 关于用XML来存储位图,『跟者有分』 如何保存dbgrid中列的排列位置?
Decoder.OutputModuleRegister('xa_dsound_output.dll');
Decoder.SetPlayerEnvironmentInteger('OUTPUT.DIRECTSOUND.WINDOW', Handle);
Decoder.SetOutputChannels(1); //for mono, 2 for stereo
Decoder.SetPlayerMode(XA_PLAYER_MODE_OUTPUT_AUTO_CLOSE_ON_EOF);
Decoder.SetOutputName(WorkPath+'Temp.dat');
Decoder.InputOpen('d:\aaa.wav');
Decoder.Play;
但是请注意生成的Wave没有文件头,你得先写一个相应的Wave文件头才行。
Decoder定义为XAudio组件。
XAudio组件到网上去下载吧!
Decoder.InputOpen('d:\aaa.wav');
应为
Decoder.InputOpen('原文件.mp3');
文件头
00H 4 char "RIFF"标志
04H 4 long int 文件长度
08H 4 char "WAVE"标志
0CH 4 char "fmt"标志
10H 4 过渡字节(不定)
14H 2 int 格式类别(10H为PCM形式的声音数据)
16H 2 int 通道数,单声道为1,双声道为2
18H 2 int 采样率(每秒样本数),表示每个通道的播放速度,
1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。
20H 2 int 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
22H 2 每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。
24H 4 char 数据标记符"data"
28H 4 long int 语音数据的长度
/////////////////////
但找了好多资料说文件头都这个样子,但我找了个能播放的WAV文件分解文件头结果又对不上,
过度字节那里开始错,如果去掉过度字节的4bytes,似乎从数据快调整数开始错了。谁知道准确的文件头结构是怎样的???
rId : longint; //固定标记 值为"RIFF"
rLen : longint; //随后的字节数 值为(wSampleLength +36)
wId : longint; //固定标记 值为"WAVE"
fId : longint; //ckID 值为"fmt "
fLen : longint; //nChunkSize Wave文件块的大小 16
wFormatTag : word; //音频数据的编码方式 此值常为1 表示PCM方式
nChannels : word; //声道数
nSamplesPerSec : longint; //每秒采样频率
nAvgBytesPerSec : longint; //每秒字节数
nBlockAlign : word; //一次输出的字节数 值为采样位数*声道数/8
wBitsPerSample : word; //采样位数 一般16位和8位
dId : longint; //固定标记 值为"data"
wSampleLength : longint; //采样数据长度 值为文件大小-文件头大小(44)
end;
自己写难度很大,而且就算会都要很多时间的http://lysoft.7u7.net
我试过了可以使用但注意各参数之间的约束条件。