Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Mi 03.02.10 16:14 
Huhu,

wiedermal stehe ich seit ein par Tagen vor einem Problem und ich komm
nicht wirklich dahinter.
Ich schreibe es ausfuehrlich, da es vielleicht bessere Moeglichkeiten
geben koennte, die mir gerade nicht einfallen.

Ich habe 2 Methoden:

Nr 1) -- ist ein load event des UserControls in dem ich Daten aus einem
Ordner einlese und sie ueber eine foreachschleife in einer listBox
aufliste.Ausserdem noch eine List<string> Liste, welche diese
Namen aufnimmt und ueber einen index speichert.

bsp:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
DirectoryInfo dir = new DirectoryInfo(@"c:\\Music\cd1");
FileInfo[] files = dir.GetFiles("*.mid");

List<string> pList = new List<string>();

foreach (FileInfo file in files)
            {
                listBox1.Items.Add(file.Name);
                pList.Add(file.Name);
            }



Nr 2 ist ein playstate_changed event des Windowsmediaplayers,
durch diesen moechte ich folgendes erreichen:

Ueber einen Button wird der erste eintrag in der listbox selektiert,
das lied wird abgespielt und der index der listbox +1 hochgesetzt,
sofern das lied zuende ist oder vom User auf stop gestellt wurde.
Das klappt wunderbar.
Nun moechte ich aber das naechste lied automatisch abspielen lassen,
nachdem der index der listbox +1 hochgzaehlt und das item selektiert wurde.

Buttonevent:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  private void button1_Click(object sender, EventArgs e)
        {
            selector = true;   // Variable zum Erkennen, ob selektiert wurde

            listBox1.SetSelected(0true);
            axWindowsMediaPlayer1.URL = @"c:\\Music\cd1\Anxious_Heart.mid";
            axWindowsMediaPlayer1.Ctlcontrols.play();
        }


AxMediaPlayer_State_changed event:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {      
            if (selector == true)
            {
                if (e.newState == 8)
                {
                    // ????->Wie auf Event nr 1 zugreifen?
                    listBox1.SelectedIndex += 1;
                }       
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }



Wie kann ich von diesem Event auf Event nr1 zugreifen`?

Alles, was ich bisher rausfand:
- ueber get/set?
- ueber Eventhandler

Ich versuche, auf eine windowsmediaplayer playliste zu verzichten
oder anders gesagt: Ich hab es bisher nicht hinbekommen, eine zu erstellen.

Also die Frage nochmal: Wie kann ich es ermoeglichen, auf die pListe zuzugreifen?
Oder gibt es einfachere Wege, als den ..den ich hier gezeigt habe?

Vielen dank.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 03.02.10 16:42 
Hat der axWindowsMediaPlayer ein Ereignis Completed o.ä.? Das wäre die passende Stelle für den Aufruf des nächsten Stücks.

Jürgen
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Do 04.02.10 01:16 
Mhm nein...

Was ich sehen kann, waere

- EndOfStream
- Statuschanged
- newStream
- MediaChange
- CurrentItemChange

Das waeren so die Events, die es sein koennten(gibt noch etliche mehr)

EDIT:

Naja nur noch validating und validated..meinst du das?
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 04.02.10 07:45 
Registriere dich doch einfach bei den Events und mach einen Breakpoint hin - so viele sind es ja nicht.

Dann weißt du es.
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Do 04.02.10 13:19 
Hehe ich bin noch relativer Anfaenger und versuch mir
die Event sache reinzupruegeln.

Aber das muss man erstmal verstehen(eigene Events und schon erstellte).
Tingel
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 18.02.10 20:44 
Also ich bin zurzeit auch ein einem Player beschäftigt, und hab das Problem das du hast mit dem Event "PlayStateChange" gelöst.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
    if (player.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
    {
       this.ID++;
       player.URL = datenbank1.link[ID];
       player.Ctlcontrols.play();                
    }
}



Allerdings hab ich jetzt das Problem, dass der Player das Lied nicht abspielt. Er wählt es zwar aus, aber man muss trotzdem noch auf "Play" drücken. Normalerweise spielt er den Song ja schon alleine durch den "player.URL" Befehl ab, aber sobald der Befehel durch das Event aufgerufen wird, geht es nicht mehr. Was muss ich machen das der Song automatisch abgespielt wird??
Tingel
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 02.03.10 21:07 
Weiß den keiner ne Antwort auf mein Problem? Wie schaff ich es, das er nachdem das Lied fertig gespielt hat, er das nächste aus der Tabelle abspiel?? Ich bekommst einfach ent hin :(
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Mi 03.03.10 00:20 
Setze mal deine Bedingung mit dem State auf 1
also:

ausblenden C#-Quelltext
1:
e.newState == 1					


Wenn der Player mit spielen fertig ist, durchläuft er mehrere States. Der letzte ist die 1, dann ist er auch wieder bereit zu spielen und es funzt. Wenn du auf Stop drückst, geht er auch auf die "1", dass musst du dann auch noch handeln, sonst spielt er da auch gleich das nächste...
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Fr 12.03.10 16:48 
Neue Frage , altes Thema..: "der MEdiaplayer"...

Nun, ich moechte verhindern, dass ich ueber 300 strings (bzw URLs) schreiben
oder notieren muss.

Darum wollte ich diese einlesen und ausgeben.

Verdeutlichung:

Ich moechte per klick auf ein eingelesenes Item in einer List box/view
das lied abspielen lassen.
Darauf koennte ich per Index zugreifen:

Hiermit muss ich aber noch weiter testen.
Meine Frage waere, was fuer Moeglichkeiten gibt es noch?
Denn diese Variante klappt nicht ganz wie erwuenscht.
Viell. noch ueber eine schleife und den index....
ausblenden C#-Quelltext
1:
2:
ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
                AxWindowsMediaPlayer1.URL = ListBox1.Items(ListBox1.SelectedIndex).ToString


->Mein bisheriger Code, wahrscheinlich etwas unuebersichtlich.
Ich habe schon die anderen 3 listboxen entfernt:p

- Auslesen funkioniert wunderbar und wenn ich alle URLs einzeln
deklariere, geht es auch..(aber das ist ja nicht sinn und Zweck)
ausblenden volle Höhe C#-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:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
public partial class UC_Mainall_Music : UserControl
    {
        //FF7 ausgewaehlt?
        public bool FF7;
        //playlist 
        public WMPLib.IWMPPlaylist playlist_ff7;

        public UC_Mainall_Music()
        {
            InitializeComponent();

            this.button1.Click += new EventHandler(this.Button_handler);
            this.radioButton1.CheckedChanged += new EventHandler(this.Rbutton_handler);
        }

        // Button klick um den Ordnerinhalt wiederzugeben 
        private void Button_handler(object sender, EventArgs e)
        {
            if(FF7 == true)
            {
                if (sender == button1) { FF7_Musicplay_cd1(); }
            }
        }

        // Listbox mit Ordnerinhalt fuellen
        private void Rbutton_handler(object sender, EventArgs e)
        {
            if (radioButton1.Checked) 
            { 
                FF7_musicload();
                FF7 = true;
            }
        } 

        // Ordnerinhalt Cd 1 wiedergeben und abspielen
        // Hier will ich nicht 200000 strings definieren
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (FF7 == true
            {
                FF7_listbox1_2_3_4_selectedindex();
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }
        
        // Dateinamen in listbox fuellen
        private void FF7_musicload()
        {
            listBox1.Items.Clear();
            try
            {
                DirectoryInfo dir = new DirectoryInfo(Path.Combine(Application.StartupPath, (@"Bilder\FF7\Music\cd1")));

                FileInfo[] files = dir.GetFiles("*.mid");

                foreach (FileInfo file in files) {
                    listBox1.Items.Add(file.Name);
                }
            }
            catch (Exception ex1) {
                MessageBox.Show(ex1.Message);
            }     
        }
 
        // Spielt den inhalt von CD1 ab
        private void FF7_Musicplay_cd1()
        {
            axWindowsMediaPlayer1.currentPlaylist.clear();
            axWindowsMediaPlayer1.Ctlcontrols.stop();
            foreach (string fileName in Directory.GetFiles(@"Bilder\FF7\Music\cd1"))
            {
                WMPLib.IWMPMedia media = axWindowsMediaPlayer1.newMedia(fileName);
                axWindowsMediaPlayer1.currentPlaylist.appendItem(media);
            }
            axWindowsMediaPlayer1.Ctlcontrols.play();
        }

    }
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Sa 13.03.10 02:33 
Hab raus:)


Items i-wo auslesen lassen(z.b. im load event),...
und listview fuellen.
In der foreach schleife nur noch den Pfad + text festlegen
und schon funktioniert es einwandfrei:)...
Somit hab ich alle Probleme geloest.
ausblenden volle Höhe C#-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:
        private void main_Load(object sender, EventArgs e)
        {
            DirectoryInfo dir = new DirectoryInfo(Path.Combine(Application.StartupPath, (@"")));
            FileInfo[] files = dir.GetFiles("*.mid");

            foreach (FileInfo file in files)
            {
                listView1.Items.Add(file.Name);
                
            }
        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //axWindowsMediaPlayer1.currentPlaylist.clear();

                foreach (ListViewItem item in listView1.SelectedItems)
                {
                    string path = Application.StartupPath;
                    path = path + "\\" + item.Text;
                    //WMPLib.IWMPMedia media = axWindowsMediaPlayer1.newMedia(fileName);
                    //axWindowsMediaPlayer1.currentPlaylist.appendItem(media);

                    if (listView1.SelectedItems.Count > 0)
                        axWindowsMediaPlayer1.URL = path;

                }
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }
    }