Entwickler-Ecke

Multimedia / Grafik - brauche Hilfe für Musik abspielen


Swagger Jackin - So 28.02.10 17:55
Titel: brauche Hilfe für Musik abspielen
Wenn ich bei einer Combobox Musik auswähle, soll das Programm jede ausgewählte Musik abspielen. Irgendwie spielt er nur die erste Musik ab, die ich definiert habe. Kann mir jemand sagen, warum ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
{=====================================================================}
procedure TForm15.Button1Click(Sender: TObject);
begin
  case ComboBox1.ItemIndex of
       0:
         begin
           Form1.mediaPlayer1.FileName := 'Collapse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       1:
         begin
           Form1.mediaplayer1.FileName := 'horse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       2:
         begin
           Form1.mediaplayer1.FileName := 'electro.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       3:
         begin
           Form1.mediaplayer1.FileName := 'Memories.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       4:
         begin
           Form1.mediaplayer1.FileName := 'Jackin.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
  end;



Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 28.02.2010 um 22:19


COMMANDER86 - So 28.02.10 18:27

Moin,

wird der Titel fortlaufend abgespielt? Also... wenn er zu Ende ist, fängt er von vorne wieder an? Wenn ja, kann es vl. sein, dass der MediaPlayer, während er läuft, keine neue Datei einladen kann. Füge mal die Zeile:

Delphi-Quelltext
1:
Form1.MediaPlayer1.Stop;                    

ein, bevor Du den FileName änderst.

PS:
Das hier:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;

...kannnst Du auch einmal unter den Case-Bereich schreiben. Da das bei jeden Eintrag augenscheinlich das Selbe ist, macht das da drin nicht viel Sinn.

//EDIT: Änder' bitte den Titel ab. Der ist nicht sonderlich aussagekräftig. Danke!

LG
Fabian


F34r0fTh3D4rk - So 28.02.10 18:31

Es wäre klasse, wenn du diesem Thread einen aussagekräftigeren Titel geben würdest.

Dein Code weist sehr viele Redundanzen auf, das ist schlecht für die Wartbarkeit, so gehts kürzer:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm15.Button1Click(Sender: TObject); // TForm15 lässt Böses erahnen
const
  filenames: array[0..4of String = ('Collapse.wav''horse.wav''...''...''...');
begin
  if ((Combobox1.itemindex < low(filenames)) or (combobox1.itemindex > high(filenames))) then
    exit;
  Form1.mediaPlayer1.FileName := filenames[combobox1.itemindex];
  Form1.mediaplayer1.Open;
  if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length then
    Form1.mediaPlayer1.Rewind;
  Form1.mediaplayer1.Play;
end;

Der sollte genau das selbe tun wie dein Code, also sollte der Fehler auch erhalten geblieben sein.


Christian S. - So 28.02.10 18:38

Hallo,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien [http://www.entwickler-ecke.de/richtlinien.html]:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Christian


Swagger Jackin - So 28.02.10 19:27

ey danke, ich werde gleich mal den Quelltext von euch ausprobieren!!


Swagger Jackin - So 28.02.10 20:04

user profile iconSwagger Jackin hat folgendes geschrieben Zum zitierten Posting springen:
ey danke, ich werde gleich mal den Quelltext von euch ausprobieren!!


Leider spielt er immer noch nur die Collapse.wav datei, eagl ob ich die anderen wähle. Wenn ich die horse.wav wähle soll sie abgespielt werden, will aber nicht.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm15.Button1Click(Sender: TObject); // TForm15 lässt Böses erahnen
const
  filenames: array[0..4of String = ('Collapse.wav''horse.wav''...''...''...');
begin
  if ((Combobox1.itemindex < low(filenames)) or (combobox1.itemindex > high(filenames))) then
    exit;
  Form1.mediaPlayer1.FileName := filenames[combobox1.itemindex];
  Form1.mediaplayer1.Open;
  if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length then
    Form1.mediaPlayer1.Rewind;
  Form1.mediaplayer1.Play;
end;

--> fruchtet noch nicht.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


F34r0fTh3D4rk - So 28.02.10 20:07

Zitat:
Der sollte genau das selbe tun wie dein Code, also sollte der Fehler auch erhalten geblieben sein.

Oder was meinst du mit "fruchten"? Hast du mal stop() an den Anfang hinzugefügt?


Swagger Jackin - So 28.02.10 20:13

user profile iconF34r0fTh3D4rk hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Der sollte genau das selbe tun wie dein Code, also sollte der Fehler auch erhalten geblieben sein.

Oder was meinst du mit "fruchten"? Hast du mal stop() an den Anfang hinzugefügt?


fruchten = es geht oder nicht

mit stop hab ich noch nicht ausprobiert, weil ich es nicht weiß was amn dahin schreibt. :autsch:


F34r0fTh3D4rk - So 28.02.10 20:28

user profile iconCOMMANDER86 hat folgendes geschrieben Zum zitierten Posting springen:
Moin,

wird der Titel fortlaufend abgespielt? Also... wenn er zu Ende ist, fängt er von vorne wieder an? Wenn ja, kann es vl. sein, dass der MediaPlayer, während er läuft, keine neue Datei einladen kann. Füge mal die Zeile:

Delphi-Quelltext
1:
Form1.MediaPlayer1.Stop;                    

ein, bevor Du den FileName änderst.

Sind Lesen und Abschreiben wirklich so schwierig?


Swagger Jackin - So 28.02.10 22:18

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

teilweise ja. 8)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Mit dem Stop stürzt das Programm ab. zeigt Fehler beim Spielfeld an.

:( :(


Blackheart666 - So 28.02.10 22:38

Vieleicht solltest Du es mit MP.Close versuchen da du ja beim wechseln den MP ja wieder öffnest.


Swagger Jackin - So 28.02.10 22:52

user profile iconBlackheart666 hat folgendes geschrieben Zum zitierten Posting springen:
Vieleicht solltest Du es mit MP.Close versuchen da du ja beim wechseln den MP ja wieder öffnest.


Jetzt stürtzt das Spiel nicht mehr ab, aber spielt immer nur das erste Lied, nicht die anderen, egal ob man sie auswählt.
Ein neues Problem ist aufgetreten, das wenn ich die Musik bei den Einstellungen auswähle, sie abgespielt wird, kann ich im Menü die Musik nicht mehr stoppen, Spiel stürzt ab, sobald ich auf stop drücke.