急,谢。

解决方案 »

  1.   

    winamp就可以呀!!!!你可以打开WINAMP然后点击参数,在面里的"输出"选项中选中WMA然后再选个音乐文件点击播放就可以转换了(转时没有声音),转完后记着改回来哦!那个方法不仅适用wma,wav,mp3,vqf等音乐格式音的相互转换!
      

  2.   

    算了,看来也没有人能给出源代码,版主还是用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组件到网上去下载吧!
      

  3.   

    上一贴有点问题:
     Decoder.InputOpen('d:\aaa.wav');
    应为
    Decoder.InputOpen('原文件.mp3');
      

  4.   

    偏移地址 字节数 数据类型 内   容 
      
    文件头
     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,似乎从数据快调整数开始错了。谁知道准确的文件头结构是怎样的???
      

  5.   

    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;
      

  6.   

    你真的试过正确吗?我在网上已经找了4,5个不同版本了,国内外的都有,msdn也上过,没一个对得上!!!
      

  7.   

    还是用控件方便,如果完全自己写mp3到wav的代码,那是需要相当高的基础的,富利叶级数、富利叶变换、离散余弦变换、反离散余弦变换,基本上都是数学功底,学去吧。
      

  8.   

    绝对是使用第三方组件最好了
    自己写难度很大,而且就算会都要很多时间的http://lysoft.7u7.net
      

  9.   

    to sboom() 
    我试过了可以使用但注意各参数之间的约束条件。