Hi! Ich habe mal etwas weitergeproggt, da es für mich ebenfalls sehr interessant ist (ich habs nämlich selber nicht hinbekommen :-/)
Ich gehe wie folgt vor:
1) Laden einer Audiodatei mit Bass.dll:
Channel := BASS_StreamCreateFile(FALSE, PChar('c:\musik.mp3'), 0, 0, 0);
2) Abspielen der MP3:
BASS_ChannelPlay(Channel, False);
3) In zwei Paintboxes für rechten und linken Kanal die Audiowave-Form anzeigen (noch nicht zu früh freuen):
Delphi-Quellcode:
procedure TMainForm.Button17Click(Sender: TObject);
var
i,j, pos,length,r,l,ypos_right,ypos_left,xpos:integer;
WaveData : TWaveData;
begin
wave_right.Refresh;
wave_left.Refresh;
length:=trunc(BASS_ChannelBytes2Seconds(channel, BASS_StreamGetLength(channel)));
BASS_ChannelGetData(Channel, @WaveData, 2048);
pos:=0;
for j:=1 to length do
for i:=1 to 512 do
begin
BASS_ChannelSetPosition(channel,BASS_ChannelSeconds2Bytes(channel, j));
BASS_ChannelGetData(Channel, @WaveData, 2048);
R := SmallInt(Loword(WaveData[i]));
L := SmallInt(HIword(WaveData[i]));
YPos_right := Trunc((R/65535)*300)+75 ;
YPos_left := Trunc((L/65535)*30)+75 ;
XPos:=round(((i+pos)/(length*512)));
pos:=pos+512;
wave_right.Canvas.LineTo(XPos,YPos_right);
wave_left.Canvas.LineTo(XPos,YPos_left);
end;
end;
Das Problem ist: die Waveform wird nur korrekt (allerdings auch seeeehr langsam) Aufgebaut, wenn die Audiodatei gerade abgespielt wird. Dann ruckelt der Ton wie sau, aber die Waveform wird korrekt aufgebaut.
Wenn du mir jetzt sagst, wie man das ohne gleichzeitiges Abspielen hinbekommt, dann haben wir unsere Anzeige *g*
tschö,
Christian