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;