Einzelnen Beitrag anzeigen

Julian M.

Registriert seit: 28. Dez 2010
41 Beiträge
 
#1

Bass.dll Internet Radio - wie die letzten 5 Minuten bekommen, ohne Aufnahme stoppen ?

  Alt 12. Jan 2016, 14:10
Hallo ihr lieben,

Folgende Annahme:Ich zeichne mit der Bass.dll und unten angefügtem Code einen Internetradio-MP3 Stream dauerhaft auf.
Den code habe ich von hier: http://www.delphipraxis.net/57338-ba...aufnehmen.html
Nun möchte ich mir bestimmte Lieder inkl. Anfang raus schneiden, d.h. ich will zu einem bestimmten Zeitpunkt die vergangenen 5 Minuten bis 5 Minuten in die Zukunft als MP3 abspeichern. Die Aufzeichnung des Streams soll aber nicht gestoppt werden. Wie stelle ich das an ? Die MP3-Datei in welche die laufende Aufnahme geschrieben wird, ist gesperrt. Ich möchte auch nicht stückeln und z.B. die Aufnahme alle 30 Minuten neu starten nur damit ich an die Daten ran komme. Meine Idee wäre, den Buffer so groß zu machen, dass er 5 Minuten beinhaltet. Dann könnte ich zum Zeitpunkt x sagen: speichere mir den Buffer in Datei x. Geht das ? Wie ? Freue mich über Hilfe! Gruß Julian
P.S: Ich benutze FreePascal/Lazarus v1.4.4

Delphi-Quellcode:

function OpenURL(url: PChar): Integer;
begin
  FileName:= 'd:\record.mp3';
  Result := 0;
  BASS_StreamFree(Form1.chan); // close old stream
  Form1.chan := BASS_StreamCreateURL(url, 0, BASS_STREAM_META or BASS_STREAM_STATUS, @StatusProc, 0);
  if (Form1.chan = 0) then
    Error('Can''t play the stream')
  else
    BASS_ChannelPlay(Form1.chan,FALSE);
  Form1.cthread := 0;
end;


procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
  if (FileName = '') then
    exit;
  if (FileStream = nil) then
      FileStream:= TFileStream.Create(FileName, fmCreate); // create the file
  if (buffer = nil) then
      FileStream.Free // finished downloading
   else
      FileStream.Write(buffer^, len);
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  ThreadId: Cardinal;
begin
    cthread := BeginThread(nil, 0, @OpenURL, PChar('http://webstream.mp3'), 0, ThreadId);
end;

Geändert von Julian M. (12. Jan 2016 um 14:54 Uhr)
  Mit Zitat antworten Zitat