AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi BASS: Song als Stream abspielen
Thema durchsuchen
Ansicht
Themen-Optionen

BASS: Song als Stream abspielen

Ein Thema von Nogge · begonnen am 29. Mär 2005 · letzter Beitrag vom 1. Mai 2005
Antwort Antwort
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#1

BASS: Song als Stream abspielen

  Alt 29. Mär 2005, 14:43
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^^
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#2

Re: BASS: Song als Stream abspielen

  Alt 11. Apr 2005, 17:00
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...
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#3

Re: BASS: Song als Stream abspielen

  Alt 11. Apr 2005, 19:10
Zitat von Nogge:
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...
illegal ist das bestimmt nicht.
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.
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#4

Re: BASS: Song als Stream abspielen

  Alt 11. Apr 2005, 21:14
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;
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#5

Re: BASS: Song als Stream abspielen

  Alt 11. Apr 2005, 21:24
jo, danke euch beiden. Habe die Lösung auch gerade im Forum der BASS-Engine gefunden:
Delphi-Quellcode:
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;
Kann mir jetzt noch jemand verraten, welcher Dateityp der gespeicherte Stream ist? Für ne Wav-Datei ist die Größe viel zu klein...
  Mit Zitat antworten Zitat
Andy

Registriert seit: 30. Jan 2004
17 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: BASS: Song als Stream abspielen

  Alt 1. Mai 2005, 11:01
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
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#7

Re: BASS: Song als Stream abspielen

  Alt 1. Mai 2005, 11:25
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.
  Mit Zitat antworten Zitat
Andy

Registriert seit: 30. Jan 2004
17 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: BASS: Song als Stream abspielen

  Alt 1. Mai 2005, 11:54
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
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#9

Re: BASS: Song als Stream abspielen

  Alt 1. Mai 2005, 13:21
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:
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;
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz