Entwickler-Ecke
WinForms - Direct Sound
Scarecraft - Do 17.04.08 20:48
Titel: Direct Sound
Huhu ich habe ein Problem , es geht um DirectX.AudioVideoPlayback;
Ich versuche mal schnell meinen code aufzulisten (so kurz wie möglich ) :
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:
| private void button2_Click(object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); open.InitialDirectory = @"C:\\"; open.Filter = "Audio files (*.wav; *.mpa; *.mp2; *.mp3; *.au; *.aif; *.aiff; *.snd; *.wma)|*.wav; *.mpa; *.mp2; *.mp3; *.au; *.aif; *.aiff; *.snd; *.wma|" + "MIDI Files (*.mid, *.midi, *.rmi)|*.mid; *.midi; *.rmi|" + "All Files (*.*)|*.*"; if (open.ShowDialog() == DialogResult.OK) {
listBox1.Items.Clear(); listBox1.Items.Add(System.IO.Path.GetFileName(open.FileName)); listBox1.SetSelected(0, true); Properties.Settings.Default.filename = open.FileName; listBox1_DoubleClick(null,null);
} } void PlayerStarten(object sender, EventArgs e) {
Audio audioPlayback = new Audio(listBox1.Text); audioPlayback.Play(); audioPlayback.Ending += new EventHandler(SongzuEnde);
notifyIcon1.BalloonTipTitle = "Aktueller Song:"; notifyIcon1.BalloonTipText = listBox1.Text; notifyIcon1.ShowBalloonTip(10);
} |
So und nun zu meinem Problem kind:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void PlayerStoppen(object sender, EventArgs e) {
audioPlayback.Stop(); } |
So also : ich starte den player in "PlayerStarten" und ich möchte ihn beenden bei "Playerstoppen" ich habe schon sehr viel probiert , aber es klappt einfach nicht .Da der player nur zwischen den { und } in Playerstarten bekannt ist ,arg.
ich denke ich muss den player schon früher einbinden , was aber sehr schwer ist da die datei die er spielen soll eine Variable ist (open.Filname) . ich brauch eure hilfe !!!!
Moderiert von
Christian S.: Color- durch C#-Tags eresetzt
Kha - Do 17.04.08 22:33
Erst einmal: Roter Code ist zwar hübsch anzuschauen, aber benutze in Zukunft doch lieber die [cs]-Tags ;) .
Dein Problem scheint nichts mit DirectX zu tun haben, sondern eher mit den Grundlagen von C#. Du musst "audioPlayback" einfach als Feld der Klasse und nicht als lokale Variable deklarieren, dann ist das Objekt auch in der anderen Methode sichtbar.
Sollte das dir überhaupt nichts sagen, dann ist es dringende Zeit für ein Anfänger-Tutorial.
Scarecraft - Do 17.04.08 23:06
Ja sagen tut mir das schon was , so is das ja nicht .
naja erstma danke für deine antwort khabarakh(schwerer name) :P
ich bin neu in C# (dürfte ja schon aufgefallen sein) und deswegen versuche ich learning by doing mit dem Galileo open book.
Naja ich komme nun leider net ganz so an der stelle weiter . Alles andere ergibt sich ja draus . ich hab auchnochmal nachgeschaut aber wirklich weiter kommen (bin ma ehrlich ) tuh ich nun auch nicht wirklich . Also ich weis das ich den Player net einfach so in der methode deklarieren kann da sie ja nur dann in den Klammern verfügbar ist. Soweit bin ich auch schon .naja zu meiner frage : ich muss doch Audioplayback im Programm.cs in static class Program bekannt machen ? oder lieg ich da völlig falsch ?
MFG Scarecraft
Kha - Fr 18.04.08 13:11
Du willst ja aus zwei Methoden deiner Form auf ein Objekt zugreifen, also ist es das einfachste, dieses Objekt in der gesamten Form-Klasse bekannt zu machen; Program.cs brauchst du dafür nicht. Und dazu musst du eben in der Klasse ein neues Feld deklarieren und dafür die bisherige lokale Variable weglassen. Ich werde keinen Code posten, da du so etwas Grundlegendes einfach selbst können musst, aber wenn es immer noch nicht klar ist, kannst du auch einmal in der Doku nach "Felder, C#" suchen ;) .
Scarecraft hat folgendes geschrieben: |
danke für deine antwort khabarakh(schwerer name) :P |
Dient zur Abschreckung *g* .
Scarecraft - Fr 18.04.08 14:50
Ah danke hab es nun dank deiner und des openbooks hilfe geschafft , war viel eonfacher als ich es mir vorgestellt habe ..
Naja wenn ich schonmal hier bin kann ich gleich noch eine frage loswerden ?
hab ein Event , das startet wenn ich was in eine Listbox ziehe .
Nunja das klappt alles toll , aber ich möchte nicht den ganze link "C:\\bla\\blaaaa\bla.mp3"
sondern nur :"bla.mp3" stehen haben ,,...
hatte das selbe prob bei openfile hab das so gelöst :
C#-Quelltext
1:
| listBox1.Items.Add(System.IO.Path.GetFileName(open.FileName)); |
Naja hier der Eventcode:
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:
| private void Form1_Load(object sender, EventArgs e) {
listBox1.AllowDrop = true; listBox1.DragOver += new DragEventHandler(listboxOnDragOver); listBox1.DragDrop += new DragEventHandler(listboxOnDragDrop);
} void listboxOnDragOver(object obj, DragEventArgs dea) { if (dea.Data.GetDataPresent(DataFormats.FileDrop)) dea.Effect = DragDropEffects.Move; } void listboxOnDragDrop(object obj, DragEventArgs dea) { if (dea.Data.GetDataPresent(DataFormats.FileDrop)) { string[] dateien = (string[])dea.Data.GetData(DataFormats.FileDrop); listBox1.Items.AddRange(dateien);
} } |
Danke schonmal
schönen tag noch scarecraft !
Christian S. - Fr 18.04.08 18:02
Hallo!
Bitte erstelle für eine neue Frage auch einen neuen Thread. Dann kannst Du dem auch einen passenden Titel geben und ihn in der richtigen Sparte platzieren. Danke! :-)
Grüße
Christian
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!