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