AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi MP3-Player selbst schreiben, Grundvoraussetzungen?

MP3-Player selbst schreiben, Grundvoraussetzungen?

Ein Thema von Aike · begonnen am 9. Okt 2009 · letzter Beitrag vom 13. Nov 2009
Antwort Antwort
Seite 3 von 3     123
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#21

Re: MP3-Player selbst schreiben, Grundvoraussetzungen?

  Alt 13. Okt 2009, 09:15
Ich habe Punkt 1 und 3 meines Edits fixen können, indem ich meine Version mit dem (original) Source Code verglichen und kopiert hab. Leider weiß ich überhaupt nicht, was schiefgegangen sein könnte *g* OnEndFile etc. geht auch.

Allerdings gibt es immer noch das 27-Zeichen-Problem.

Ich hab ein bisschen weiterprogrammiert und bin jetzt zu einem weiteren Problem gekommen: Ich möchte gerne die Soundkarte für die Ausgabe zur Laufzeit ändern. Um die Soundkarten rauszubekommen, benutze ich diesen Code, der auch funktioniert:

Delphi-Quellcode:
const
  DRVM_MAPPER_PREFERRED_SET = $2000+22;

implementation

{$R *.dfm}

function ChangePrimarySndOutDevice(dev: cardinal): integer;
{dev Bereich: 0 bis waveOutGetNumDevs - 1} 
begin
  result := waveOutMessage(HWAVEOUT(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0);
end;

//Listet alle verfügbaren Ausgabekarten
procedure TfrmSoundkarte.GetOutDevices;
var
  dev: Integer;
  caps: TWaveOutCaps;
begin
  ComboBox1.Clear;
  for dev := 0 to waveOutGetNumDevs - 1 do
  begin
    waveOutGetDevCaps(dev, @caps, sizeof(TWaveOutCaps));
    ComboBox1.Items.Add(caps.szPname);
  end;
  ComboBox1.ItemIndex := 0; //Die jetzige primäre Soundkarte auswählen
end;

//Alle Comboboxen füllen
procedure TfrmSoundkarte.FormCreate(Sender: TObject);
begin
  GetOutDevices;
end;

procedure TfrmSoundkarte.Button1Click(Sender: TObject);
begin
  if ChangePrimarySndOutDevice(Combobox1.ItemIndex) = MMSYSERR_NOERROR then
  begin
    GetOutDevices; //Windows setzt immer die primäre Karte als 0, daher müssen wir die Liste neu holen
    MessageDlg('Primäres Ausgabegerät wurde erfolgreich geändert', mtInformation, [mbOK], 0);
    close
  end
  else
    MessageDlg('Fehler beim Setzen des primären Ausgabegerätes', mtError, [mbOK], 0);
end;
Den Code hab ich hier gefunden, weiß leider den Thread nicht mehr, sonst würd ich ihn verlinken. Jedenfalls, schön und gut, das funktioniert, aber natürlich nicht zur Laufzeit des Programmes. Da es bei Winamp geht, muss es aber irgendwie gehen ;-p Ich habe mir überlegt, dass die Soundkarte vielleicht beim Create von MeMPPlaylist zugewiesen wird und habe versucht, nach dem ändern der Soundkarte MeMPPlaylist freizugeben und neu zu erzeugen, aber dann geht der Player nicht mehr (stürzt nicht ab, spielt aber auch nicht).

Hat jemand Vorschläge? *g*
Achim
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
851 Beiträge
 
Delphi 11 Alexandria
 
#22

Re: MP3-Player selbst schreiben, Grundvoraussetzungen?

  Alt 13. Okt 2009, 09:51
Vergiss den Code da oben erstmal.

Schau dir mal die Hilfe-Datei zur Bass.dll an. Auf welcher Karte die Wiedergabe läuft, kann man darüber steuern. Da muss man nicht die Systemeinstellungen für ändern. Auswendig weiß ich die nötigen Befehle jetzt nicht, aber die Hilfe zur Bass ist recht übersichtlich.
The angels have the phone box.
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#23

Re: MP3-Player selbst schreiben, Grundvoraussetzungen?

  Alt 13. Okt 2009, 10:55
Ok, ich werd mir das gleich ansehen.

Zwischenfrage: Internet-Radio? *g* Ich dachte an sowas wie "http://62.26.214.248:80/swr1bwlive/livestream.mp3", "http://stream-1.ssatr.ch:80/rsp/mp3" oder "http://cdn-two.977music.com/classic64?.wma". Das sind die drei, die ich grade gespeichert habe, und sie haben alle 'n anderes Format. Wie könnte ich denn sowas mit einbinden? *g*

[edit]gibt ja genug hier im Forum dazu, also weiterlesen ... *g*[/edit]
Achim
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#24

Re: MP3-Player selbst schreiben, Grundvoraussetzungen?

  Alt 13. Okt 2009, 11:20
Hm, also ... Mir scheint, als wäre BASS_GetDevice bzw BASS_SetDevice das richtige, aber ...
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  showmessage(inttostr(BASS_GetDevice()));
  BASS.BASS_SetDevice(0);
  showmessage(inttostr(BASS_GetDevice()));
end;
... macht gar nichts, bzw. es kommt immer "1", wobei "0" eigentlich sogar gemutet sein sollte :-/

[edit]Mein Radiostream funktioniert ganz gut, leider gibt es ein Problem: Der Stream wird mit einem Thread eröffnet:
cthread := BeginThread(nil, 0, @OpenURL, PChar(URL), 0, ThreadId); Da geht mein Lautstärken-Regler nicht mehr für den Stream
Und wie kann ich den Stream wieder schließen? EndThread(ThreadID) und ExitThread(ThreadID) schließen mir mein Programm und nicht den Stream *gg*
Achim
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#25

Re: MP3-Player selbst schreiben, Grundvoraussetzungen?

  Alt 19. Okt 2009, 14:09
Ok, ich konnte die Lautstärke anpassen, indem ich im OnScroll-Event das hier eingefügt habe:
Delphi-Quellcode:
Lautstaerke:=(100 - Scrollpos) / 100;
MeMPPlaylist.Volume := Lautstaerke;
BASS_ChannelSetAttribute(chan, BASS_ATTRIB_VOL,Lautstaerke);
Den Stream zum Halt bringen konnte ich mit
BASS_ChannelPause(chan); beim Stopp-Button.

Allerdings habe ich immer noch das Problem, dass ich die Ausgabe-Soundkarte nicht ändern kann, s.o.
Außerdem ist mir grade aufgefallen, dass ich keine Titel aus der MeMPPlaylist löschen kann. Ich kann sie zwar aus der Listview entfernen, aber intern wird es nicht gelöscht. Gibt es da schon Code, ein Beispiel oder so? Ich stell mir das ziemlich schwierig vor und ich will ungern einfach in der MeMPPlaylist rumpfuschen. Am Ende geht gar nichts mehr, oder meine Lösung ist 4x so lang
Achim
  Mit Zitat antworten Zitat
Oliver1983

Registriert seit: 8. Mär 2006
Ort: Hamburg
43 Beiträge
 
Delphi XE Starter
 
#26

Re: MP3-Player selbst schreiben, Grundvoraussetzungen?

  Alt 13. Nov 2009, 09:59
@Gausi,

also beim besten willen bekomme ich dein Projekt nicht zum laufen, Compilieren kann ich es ohne Fehler meldungen, aber sobald ich eine mp3 datei ausgewählt habe und auf play drücke passiert nichts!!! Ich bekomme nicht mal eine Fehler meldung oder dergleichen, kannst du mal den source inkl der anderen klassen units bereit stellen nicht das es versions unterschiede gibt? und auch bitte nicht die bass.dll vergessen, das wäre prima

gruss olli
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
851 Beiträge
 
Delphi 11 Alexandria
 
#27

Re: MP3-Player selbst schreiben, Grundvoraussetzungen?

  Alt 13. Nov 2009, 10:39
Laut Profil hast du Delphi 2009.

Das Tutorial ist noch nicht auf D2009 portiert, werde ich mal in Angriff nehmen. Man bekommt es zum Laufen, wenn man in der Methode TMeMPPlayer.MeMP_CreateStream die Flags um BASS_UNICODE erweitert. Also

Delphi-Quellcode:
function TMeMPPlayer.MeMP_CreateStream(aFilename: String): DWord;
var flags: DWORD;
begin
  if (AnsiLowerCase(ExtractFileExt(aFilename)) = '.mp3') then
    flags := BASS_STREAM_PRESCAN or BASS_UNICODE
  else
    flags := BASS_UNICODE;
  result := BASS_StreamCreateFile(False, PChar(aFilename), 0, 0, flags);
end;
Dadruch wird der Parameter Filename von der bass.dll als WideChar interpretiert, was ja ein Char unter D2009 ist. Das müsste ich mal über Compiler-Schalter sauber einbauen. Auch das Laden der Plugins könnte noch Schwierigkeiten machen - stört aber nicht für die Basisfunktion.
The angels have the phone box.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:40 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