![]() |
BASS: Song als Stream abspielen
Hallo Community,
ich arbeite gerade mit der BASS-Engine und möchte gern eine Datei bzw. URL als (File-)Stream abspielen. So möchte ich nämlich eine Aufnahme mit BASS_RecordStart() umgehen und andere Geräusche wie z.B. ICQ- oder Game-Sounds aus dem Stream extrahieren. Plz help me^^ |
Re: BASS: Song als Stream abspielen
mmh, liegt es vllt daran, dass ich so wenige Antworten zu diesem Thema erhalte, weil es illegal ist? Fällt mir gerade so auf, da es dann ja keine analoge Kopie, sondern eine digitale Kopie wäre...
|
Re: BASS: Song als Stream abspielen
Zitat:
Das es so weinig Antworten gibt liegt eher daran das sich damit nicht viele auskennen. Ich hab das schon mal programmiert den code dafür aber leider verloren. Kuck dir mal das aktuelle netradio Beispiel an. In der Callback Funktion gibts einen Buffer den kannst du dann einfach in einen Filestream speichern. Ansosnten in dem Forum auf der bass.dll Homepage suchen. |
Re: BASS: Song als Stream abspielen
Delphi-Quellcode:
var
URL_SaveFile : String; URL_FileStream : TFileStream; procedure DownloadProc(buffer: Pointer; length: DWORD; user: DWORD); stdcall; begin with AudioPlayer do begin if (URL_SaveFile = '') then exit; if (URL_FileStream = nil) then URL_FileStream:= TFileStream.Create(URL_SaveFile, fmCreate); // create the file if (buffer = nil) then URL_FileStream.Free // finished downloading else URL_FileStream.Write(buffer^, length); end; end; function TAudioEngine.PlayURL(URL : String) : boolean; var SngLen : Integer; Flags : DWORD; begin Cur_FileName:= URL; BASS_MusicFree(Channel); BASS_StreamFree(Channel); URL_FileStream:= nil; Flags:= 0; if StrBlock then Flags:= BASS_STREAM_BLOCK; { (BASS_STREAM_BLOCK) Download and play the file in smaller chunks. Uses a lot less memory than otherwise, but it's not possible to seek or loop the stream - once it's ended, the file must be opened again to play it again. This flag will automatically be applied when the file length is unknown, for example with Shout/Icecast streams. This flag also has the effect of resticting the download rate.} Flags:= Flags or BASS_STREAM_META or BASS_STREAM_STATUS; Channel := THandle(BASS_StreamCreateURL(PChar(Cur_FileName), 0, Flags, @DOWNLOADPROC, 0)); SngLen := 0; if (Channel = 0) then Result := False else Result := True; if not BASS_ChannelPlay(Channel, false) then Result := False; if (SngLen = 0) then SongLength := BASS_StreamGetLength(Channel); PlayerState := ENGINE_PLAY; end; |
Re: BASS: Song als Stream abspielen
jo, danke euch beiden. Habe die Lösung auch gerade im Forum der BASS-Engine gefunden:
Delphi-Quellcode:
Kann mir jetzt noch jemand verraten, welcher Dateityp der gespeicherte Stream ist? Für ne Wav-Datei ist die Größe viel zu klein...
procedure DOWNLOADPROC(buffer: Pointer; length, user: DWORD); stdcall;
begin if (DigitalStream = nil) then DigitalStream:=TFileStream.Create('DigitalStream.wav',fmCreate); if (buffer <> nil) then DigitalStream.Write(buffer^,length) else FreeandNil(DigitalStream); if (buffer <> nil) and (length = 0) then Form_InetStream.Label_Type.Caption:=PChar(buffer); // display connection status end; |
Re: BASS: Song als Stream abspielen
Hallo,
ich habe hier im Forum schon eine Menge über die BASS.dll gelesen und befasse mich momentan gerade mit der Einbindung in mein Programm. Leider hab ich noch gar keine Erfahrung mit der BASS.dll und hänge deshalb meine Frage an diesen Thread an, weil hier ein paar Ansatzpunkte genannt wurden, die mir weiterhelfen könnten, aber mir noch nicht ganz klar sind. Meine Frage: Ich öffne einen Radio Stream aus dem Internet und gebe ihn im Windows Mediaplayer wieder. Nun möchte ich in mein Prg einen Spectrum Analyser einbauen, wie er im Bass Demo 'sample_vis' gezeigt wird. Dazu brauche ich aber einen Stream und wie es in der Bass Doku heißt muss(?) dieser mit 'BASS_StreamCreate' erzeugt werden. Und damit komme ich nicht klar. Einen File Stream wiedergeben ist kein Problem, aber wie geht das mit dem Internet Stream? Oder gibt es in BASS.dll eine andere Möglichkeit einen Internet Radio Stream zu öffenen und wiederzugeben (vielleicht ohne MediaPlayer)? Ich meine aber nicht Netradio. Vielen Dank & schöne Grüße Andy |
Re: BASS: Song als Stream abspielen
Abgesehen davon, dass du für die Fragen nen neuen Thread hättest öffnen sollen, gibt es die Lösungen für deine Fragen in dem Bass-Ordner. Dort sind alle wichtigen Functions in mehreren Beispielen aufgeführt.
|
Re: BASS: Song als Stream abspielen
Hallo Nogge,
danke für die schnelle Antwort. Wo steht das mit dem neuen Thread bzw. wo ist genau definiert wann ein neuer gestartet werden muß? Ich bin der Ansicht, dass meine Fragen sehr wohl zu Deiner ursprünglichen Frage und den dazugehörigen Antworten passen. Ich garantiere Dir, hätte ich einen neuen Thread gestartet wäre irgendein anderer gekommen und hätte mich ermahnt, weil es doch bereits so viele Themen zur Bass.dll gibt an die man leicht anknüpfen hätte können. Wie man's macht ist es falsch, aber es schadet doch niemandem wenn man an Deine Fragen anzuknüpfen, oder? Deine Antwort zu meiner eigentlichen Frage hilft einem Anfänger wie es bin gar nicht weiter. Ich will keine fertigen Lösungen, sondern einen konkreten Tip wie ich sowas anpacken kann. Ich sehe dieses Forum als Kommunikationsplattform für Profis und Anfänger, ein lapidarer Hinweis in den Handbüchern nachzulesen ist für mich aber keine brauchbare Basis. Trotzdem nochmal Danke für Deine Zeilen. ------------------------------- Ich wende mich noch mal an die anderen Foren Leser mit der Bitte um Mithilfe zu meiner Frage bezüglich Bass.dll und 'BASS_StreamCreate'. Schöne Grüße Andy |
Re: BASS: Song als Stream abspielen
Die Beispiele werden doch sehr gut erklärt. In fast jeder Zeile sind Kommentare über den Prozess, der gerade abläuft. Aber mir ist gerade aufgefallen, was du mit deiner Frage wirklich meintest. Ich bin auch noch dabei, den Buffer-Inhalt in einen MemoryStream oder Ähnlichen zu speichern anstelle eines FileStreams. Habe mal im Bass-Forum n Thread gepostet. Sage dir bescheid, wenn ich ne Antwort gefunden habe.
Zum Thread:
Delphi-Quellcode:
Das ist jetzt nur ein Beispiel für nen String. Geht natürlich auch mit mehreren Parametern unterschiedlicher Typen. Dafür musste einfach den Record erweitern und im "Thread" z.B. Integer(PParameter(Ptr)^.Value) schreiben.
type
TParameter = packed record Text: String[63]; // muss ein definierter String sein end; PParameter = ^TParameter; function Thread(Ptr:Pointer): Integer; var URL:String; begin URL:=String(PParameter(Ptr)^.Text); // hier Code für den Thread einfügen end; procedure StartThread; var ThreadId:Cardinal; Parameter:PParameter; begin GetMem(Parameter,SizeOf(TParameter)); Parameter.Text:=Edit1.Text; // Edit1.Text = (hier:) eine URL BeginThread(nil,0,@Thread,Parameter,0,ThreadId); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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