1.如何在打开mp3和wav文件的同时显示整个文件的波形(特别是mp3文件)。
2.如何实现mp3和wav文件的变速播放,即“变速不变调”。国外倒是有个“mp3-wav-speed-slow”的软件源码,但是要花钱买。在下恭迎各位高手指点。邮件地址:[email protected]

解决方案 »

  1.   

    首先你可以要分析wave的格式,看他的采样比特,和通道;
    如:16比特,单声道,那么两个字节代表一个音频数据,也是我们要画的
    画法如下:(这是我的一个程序中显示wave的一段程序)
    procedure   TPcmEdit.PrintPcm(ACanvas:TCanvas;AWidth,Aheight:integer);
    var
      i,j,ZZ,iNow,iBegin:integer;
      iOldPos:Longint;
    begin
      with ACanvas do
      begin
        //画矩形框
        Brush.Color:=clBlack;
        FillRect(RECT(0,0,AWidth,Aheight));
        MoveTo(0,Aheight div 2);
        Pen.Color:=clLime ;
        LineTo(AWidth,Aheight div 2);
        //初始化读数据状态
        iOldPos:=FMemPcmFile.Position;
        GoToBegin;
        FBuffBegin:=0;
        FBuffSize:=0;
        MoveTo(0,Aheight div 2);
        ZZ:=GetFileSize div AWidth;
        iNow:=0;
        while FBuffBegin+FBuffSize<GetFileSize do
        begin
          iBegin:=iNow;
          ReadBuffer(Min(GetFileSize-FMemPcmFile.Position,MaxBuffSize));
          for i:=0 to AWidth-1 do
          begin
            if i*zz<=FBuffSize then inc(iNow)
            else Break;
            for j:=0 to ZZ-1 do
            begin
              if i*ZZ+j<=FBuffSize then
                LineTo(iBegin+i,GetPcmToWavByte(FPcmBuffer[i*ZZ+j+1]))
              else Break;
            end;
          end;
        end;
        GoToPos(iOldPos);//还原流的状态
      end;
    end;
      

  2.   

    谢谢 hongqi162(失踪的月亮)!那MP3又如何处理呢?和wav一样吗?
      

  3.   

    http://www.zjbbs.he.cninfo.net/softdown/sort.asp?typeid=50这里有第三方控件你下一个装上试一试
      

  4.   

    先用XAudio组件将MP3转成Wave,再用Wave一样的处理办法就行了。
      

  5.   

    哇 hongqi162(失踪的月亮) 好厉害,学习学习 ^_^