![]() |
Internet Stream aufzeichnen mit bass.dll
Hallo zusammen
Ich wollte in meinem Programm eine Funktion einbauen, damit man einen Internet Stream aufnehmen kann mit der bass.dll... ![]() Es hat soweit bei mir alles funktioniert. Das einzige Problem ist aber, dass mein Programm einfach immer nur 5 sec aufnimmt:cry:! Wahrscheinlich war ich einfach wieder einmal dumm und habe etwas übersehen... Weiß jemand woran das liegen könnte? Hier sonst nochmal die Codes:
Code:
und zum abspielen
procedure DownloadProc(buffer: Pointer; length: DWORD; user: DWORD); stdcall;
begin if (URL_ToFileNeme = '') then exit; if (URL_FileStream = nil) then URL_FileStream:= TFileStream.Create(URL_ToFileNeme, fmCreate); // create the file if (buffer = nil) then URL_FileStream.Free // finished downloading else URL_FileStream.Write(buffer^, length); end;
Code:
Vielen Dank schon im Voraus
URL_ToFileNeme := ExtractFilePath(ParamStr(0)) + 'recordings/Record.mp3';
URL_FileStream:= nil; Chan := THandle(BASS_StreamCreateURL(PChar(URL), 0, 0, @DOWNLOADPROC, 0)); win5 |
AW: Internet Stream aufzeichnen mit bass.dll
Hier meine Version aus einem Programm:
Delphi-Quellcode:
Die oben genutzte Callbackfunktion:
type
WAVHDR = packed record riff: array[0..3] of AnsiChar; len: DWord; cWavFmt: array[0..7] of AnsiChar; dwHdrLen: DWord; wFormat: Word; wNumChannels: Word; dwSampleRate: DWord; dwBytesPerSec: DWord; wBlockAlign: Word; wBitsPerSample: Word; cData: array[0..3] of AnsiChar; dwDataLen: DWord; end; ... type TfmNetRadio = class(TForm) ... WaveStream : TFileStream; ... end; ... var WaveHdr : WAVHDR; // WAV-Header chan : HSTREAM = 0; // Wiedergabekanal rchan : HRECORD; // Aufnahmekanal ... procedure TfmNetRadio.acRecordExecute(Sender: TObject); var sFile : String; dName : PAnsiChar; level : Single; i : Integer; begin acRecord.Checked := Not acRecord.Checked; tmRecord.Enabled := acRecord.Checked; if acRecord.Checked then begin // Dateinamen aus Tagesdatum und Uhrzeit erstellen lassen. sFile := '.\Record\' + GetNowAsFileName; WaveStream := TFileStream.Create(sFile + '.wav', fmCreate); dName := BASS_RecordGetInputName(0); // generate header for WAV file with WaveHdr do begin riff := 'RIFF'; len := 36; cWavFmt := 'WAVEfmt '; dwHdrLen := 16; wFormat := 1; wNumChannels := 2; dwSampleRate := 44100; wBlockAlign := 4; dwBytesPerSec := 176400; wBitsPerSample := 16; cData := 'data'; dwDataLen := 0; end; WaveStream.Write(WaveHdr, SizeOf(WAVHDR)); // start recording @ 44100hz 16-bit stereo rchan := BASS_RecordStart(44100, 2, 0, @RecordingCallback, nil); if rchan = 0 then begin MessageDlg('Die Aufnahme konnte nicht begonnen werden.', mtError, [mbOk], 0); WaveStream.Free; acRecord.Checked := False; end; end else begin BASS_ChannelStop(rchan); // complete the WAV header WaveStream.Position := 4; i := WaveStream.Size - 8; WaveStream.Write(i, 4); i := i - $24; WaveStream.Position := 40; WaveStream.Write(i, 4); WaveStream.Position := 0; WaveStream.Free; end; tmRecord.Enabled := acRecord.Checked; end;
Delphi-Quellcode:
Es werden WAV-Dateien erstellt, die ich nachher mit "Get it on CD" schneiden kann, um sie dann auf Audio-CD zu brennen.
(* This is called while recording audio *)
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length : DWord; user: Pointer): boolean; stdcall; begin // Copy new buffer contents to the memory buffer fmNetRadio.WaveStream.Write(buffer^, length); // Allow recording to continue Result := True; end; |
AW: Internet Stream aufzeichnen mit bass.dll
Hmmm....
Vielen Dank erstmal für deine Antwort. Ich habe es nun mehrere male probiert. Aber irgendwie bleibt der rchan immer = 0, was heißt das er sofort die MsgBox mit der Fehlermeldung anzeigt :? ..... An was könnte das liegen?:oops: |
AW: Internet Stream aufzeichnen mit bass.dll
Zitat:
Das ist jetzt nur mal geraten da ich nicht weiss was da in deinem Code überhaupt abgeht.
Delphi-Quellcode:
gruss
if (not BASS_RecordInit(-1)) or (not BASS_Init(-1, 44100, 0, Handle, nil))
then begin BASS_RecordFree; BASS_Free(); MessageDlg('Cannot start default recording device!', mtError, [mbOk], 0); Halt; end; |
AW: Internet Stream aufzeichnen mit bass.dll
OK, Danke!:)
Leider geht es aber irgendwie immer noch nicht. Jetzt kommt einfach die Fehlermeldung. Komisch.... Vielen Dank für eure Hilfe! |
AW: Internet Stream aufzeichnen mit bass.dll
hi
@wincompi5 ich habe mir meine alte ![]() kannst du mehr Code zeige, vielleicht übersiehst du ja was. damit ich dich recht verstehe das abspielen funzt? willst du den Sound direkt aufzeichnen oder durch deine Soundkarte(BASS_RecordStart) schleifen lasen? warum nimmst du nicht einfach die Bassenc.dll? Zitat:
|
AW: Internet Stream aufzeichnen mit bass.dll
Tatsächlich....
Ich habe es geschafft. Habe nochmal mit deiner Demo alles überarbeitet und jetzt funktioniert es perfekt!:thumb::thumb: Vielen Dank euch allen!:-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz