Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DirectX.AudioVideoPlayback und Playlist
turndevil
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

DirectX.AudioVideoPlayback und Playlist

beantworten | zitieren | melden

Hallo Leute.

Mit folgendem Code will ich eine Playlist realisieren (wohlgemerkt ist die noch lange nicht fertig). In meiner Hauptklasse wird ein Objekt PlayList erzeugt. Die Files werden dann über Add() als Strings in die Playlist geschrieben. Durch die PlayFrom() Methode erzeuge ich aus dem String am gewünschten Index ein AudioVideoPlayback.Audio Objekt. Das bekommt noch nen EvenHandler und den Playbefehl.

Wenn ich aber nun draussen in meinem Form einen anderen TreeNode (also ein anderes Lied) anwähle, stoppt er das alte nicht. OK, manche würden sagen: AudioStop()...du Idiot. Aber das funzt nicht. habs auf mehreren Wegen probiert.

using System;
using System.Collections;
using Microsoft.DirectX.AudioVideoPlayback;

namespace MediaCenter
{
	/// <summary>
	/// Summary description for PlayList.
	/// </summary>
	public class PlayList: ArrayList
	{
		private int selIndex = 0;
		
		public PlayList()
		{
		}

		public void PlayFrom(int index)
		{	
			this.selIndex = index; 
			
			Audio currentSong = new Audio(this[index].ToString(), false);
			currentSong.Ending += new System.EventHandler(this.CurrentSong_Ending);
			
			currentSong.Play();
		}

		private void CurrentSong_Ending(object sender, EventArgs e)
		{
			try
			{
				PlayFrom(this.selIndex + 1);
			}
			catch(Exception exc)
			{
				String message = exc.Message;
				PlayFrom(0);
			}
		}
	}
}

Hier nochmal der Code, mit dem die Playlist bearbeitet wird.

private void AudioAct_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			if(e.KeyCode == Keys.Escape)
			{
				this.audioAct.Visible = false;
				this.treeView1.Focus();
			}
			else if(e.KeyCode == Keys.Space)
			{
				if(this.audioAct.SelectedItem.ToString() == "Play File")
				{
					pl.Clear();
					pl.Add(new FileInfo(Functions.GetGenrePath("AudioRoot", appRun) + @"\" + this.treeView1.SelectedNode.FullPath));
					
					pl.PlayFrom(0);
				}
				else if(this.audioAct.SelectedItem.ToString() == "Play Album")
				{
					pl.Clear();
					DirectoryInfo album = new DirectoryInfo(Functions.GetGenrePath("AudioRoot", appRun) + @"\" + this.treeView1.SelectedNode.Parent.FullPath);

					pl.AddRange(album.GetFiles());

					pl.PlayFrom(0);					
				}
			}
		}

Also irgendwas stimmt da nicht. Ich probier aber schon ewig rum und komm nicht drauf. Naja ihr werdet das Schiff schon schaukeln und ich bin ja auch noch nicht am Ende *gg*.
Vielen Dank schonmal im Voraus. Sollten noch Fragen bestehen, einfach posten.

mfg
tom
private Nachricht | Beiträge des Benutzers
X-I2ated
myCSharp.de - Member



Dabei seit:
Beiträge: 36

beantworten | zitieren | melden

hmm ich hab atm genau dasselbe problem...das video haelt an aber der ton geht weiter.

habs auch mit



Video videoobj = new ...

videoobj.Audio.Stop();


versucht aber hat nicht funktioniert.

irgendwie is da der wurm drin
private Nachricht | Beiträge des Benutzers
X-I2ated
myCSharp.de - Member



Dabei seit:
Beiträge: 36

beantworten | zitieren | melden

ok ich habs!

versuch mal deine audio instanz so zu initialisieren...



Audio aobj;

if(aobj == null)
         aobj = new Audio(bla bla, bla);

...

private Nachricht | Beiträge des Benutzers
turndevil
myCSharp.de - Member



Dabei seit:
Beiträge: 41

Themenstarter:

beantworten | zitieren | melden

aha
ok ich versuchs

dnake für den tipp

mfg
tom
private Nachricht | Beiträge des Benutzers
Gromminger
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Hi.

Habe ein ähnliches Problem.
Das Abspielen der wave-Datei nach der Auswahl in einer Listbox funktioniert zwar,
wenn ich aber mehrere Elemente auswähle, so spielt er immer nur den die zum ersten ausgewählten Element zugehörige Wave-Datei ab.

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (int i in listBox2.SelectedIndices)
{

AudioLogEntry ale = (AudioLogEntry)(listBox2.Items);
ourAudio = new Audio(ale.Path);
if (ourAudio != null)
{
ourAudio.Play();
}
}
}

was muss ich hier noch verändern?
private Nachricht | Beiträge des Benutzers
EvilTK
myCSharp.de - Member



Dabei seit:
Beiträge: 265

beantworten | zitieren | melden

@turndevil
Im PlayFrom instanzierst du das Audio objekt und rufst Play auf.
Wenn du das Lied stoppen willst musst du auf der gleichen Instanz Stop() aufrufen, da die instanz nach dem aufruf von PlayFrom( .. ) verloren geht ist das nicht möglich.
Lösung: Du musst dir die Audio Instanz merken.

@Gromminger
Die foreach Schleife sieht richtig aus. Ich glaub du bist im falschen Event (SelectedIndexChanged).
Versuch mal zu test zwecken das ganze über einen ButtonClick zu starten.
private Nachricht | Beiträge des Benutzers
Gromminger
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Danke für den Tip.

Habs nun gelöst:


 foreach (int i in listBox2.SelectedIndices)
            {

                if (ourAudio != null)
                {
                    while ((ourAudio.State == StateFlags.Running) && (ourAudio.CurrentPosition < ourAudio.Duration) )
                    {
                        System.Threading.Thread.Sleep(15);
                        System.Windows.Forms.Application.DoEvents();
                    }
                }
                AudioLogEntry ale = (AudioLogEntry)(listBox2.Items[i]); 
                ourAudio = new Audio(ale.Path);
                if (ourAudio != null)
                {
                    ourAudio.Play();
                }
            }
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Gromminger,

bitte bei längerem und eingerücktem Code [CSHARP][/csharp] verwenden.

herbivore
private Nachricht | Beiträge des Benutzers