Einzelnen Beitrag anzeigen

Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Darstellung wie in Audioeditor

  Alt 6. Sep 2005, 22:48
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
Christian Nöding
  Mit Zitat antworten Zitat