Benutzer mit den meisten Antworten
Problem mit DirectSound

Frage
-
Hallo,
ich versuche mit DirectX eine .wav-Datei abzuspielen. Wenn ich sie in die Resources einbette kommt die Meldung "Resource nicht gefunden", wohl ich den richtigen Namen angegeben hab. Was mach ich falsch?
Ich benutzte folgende Class:
Imports Microsoft.DirectX.DirectSound Public Class SoundPlayer Dim dev As Microsoft.DirectX.DirectSound.Device Public Sub New(ByVal owner As Form) dev = New Microsoft.DirectX.DirectSound.Device dev.SetCooperativeLevel(owner, CooperativeLevel.Priority) End Sub Public Sub PlaySoundFromFile(ByVal fileName As String) Dim buff As SecondaryBuffer buff = New SecondaryBuffer(fileName, dev) buff.Play(0, BufferPlayFlags.Default) End Sub Public Sub PlaySoundFromEmbeddedResource(ByVal fileName As String) Dim namesp As String Dim stream As System.IO.Stream namesp = System.Reflection.Assembly.GetExecutingAssembly.GetName.Name stream = System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(namesp & "." & fileName) If stream Is Nothing Then Throw New ArgumentException(String.Format("Embedded Resource '{0}' wurde nicht gefunden!", fileName)) PlaySoundFromStream(stream) End Sub Public Sub PlaySoundFromStream(ByVal stream As System.IO.Stream) Dim buff As SecondaryBuffer buff = New SecondaryBuffer(stream, dev) buff.Play(0, BufferPlayFlags.Default) End Sub End Class
asd4444b
Ein Spiel von mir programmiert mit vb.NET: auf Moddb und mein Blog
- Bearbeitet asd4444b Montag, 9. Mai 2011 16:54 Falsche Fehlermeldung angegeben
Antworten
-
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/3421d6dc-587a-4acf-81d2-0074284c720d
in diesem Beitrag wird gerade das gleiche Thema beackert. Vielleicht hilf Dir das.
Gruß Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort vorgeschlagen Robert Breitenhofer Dienstag, 24. Mai 2011 11:44
- Als Antwort markiert Robert Breitenhofer Dienstag, 31. Mai 2011 08:15
-
Hallo,
hast Du bei der Wave Ressource auch festgelegt, dass sie als eingebettete Ressource kompiliert werden soll?
Nach diesem Beispiel sollte der Aufruf funktionieren:
Dim sp As New SoundPlayer(Me) sp.PlaySoundFromEmbeddedResource("chord.wav")
Ferner muss Deine Anwendung für die Zielplattform "x86" kompiliert werden. Standard bei den Express Editionen ist "AnyCPU". Siehe http://social.msdn.microsoft.com/Forums/de-DE/visualbasicde/thread/9a963dc8-c5d2-4d24-b31e-92f2d95cdc2a.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Robert Breitenhofer Dienstag, 24. Mai 2011 11:44
- Als Antwort markiert Robert Breitenhofer Dienstag, 31. Mai 2011 08:15
-
Hallo asd4444b,
Man kann eine .wav Datei auch folgend abspielen:
1) Verweis auf Microsoft.DirectX.AudioVideoPlayback setzten
2) Folgenden Code verwenden
Imports Microsoft.DirectX Imports Microsoft.DirectX.DirectSound Imports Microsoft.DirectX.AudioVideoPlayback Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim midFile As Audio = New Audio("c:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\Media\Wavs\Electro_1.wav") midFile.Play() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click '//Sound Device erstellen Dim dev As Device = New Device() dev.SetCooperativeLevel(Me, CooperativeLevel.Normal) '//Buffer Description erstellen Dim buffer_desc As BufferDescription = New BufferDescription() buffer_desc.ControlEffects = True '//True wenn man effects verwendet buffer_desc.GlobalFocus = True '//Sound abspielen auch wenn die Anwendung den Focus verliert '//Secondary Buffer erstellen Dim buffer As SecondaryBuffer = New SecondaryBuffer("c:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\Media\Wavs\Electro_1.wav", buffer_desc, dev) '//Optional:Array of effects descriptions erstellen Dim effects As EffectDescription() = New EffectDescription(1) {} effects(0).GuidEffectClass = DSoundHelper.StandardEchoGuid effects(1).GuidEffectClass = DSoundHelper.StandardChorusGuid buffer.SetEffects(effects) '//Buffer abspielen buffer.Play(0, BufferPlayFlags.Default) End Sub End Class
Das Problem mit dem zweiten Buffer ist vielleicht folgendes:
Throttling SecondaryBuffer stream reading speed in DirectSound
…[SecondaryBuffer.SecondaryBuffer Constructor () hat mehrere Konstruktoren] …und BufferTooSmallException bedeutet „The buffer size is not large enough to enable effects processing.“
Grüße,
Robert
- Als Antwort vorgeschlagen Thorsten Dörfler Donnerstag, 26. Mai 2011 06:47
- Als Antwort markiert Robert Breitenhofer Dienstag, 31. Mai 2011 08:16
Alle Antworten
-
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/3421d6dc-587a-4acf-81d2-0074284c720d
in diesem Beitrag wird gerade das gleiche Thema beackert. Vielleicht hilf Dir das.
Gruß Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort vorgeschlagen Robert Breitenhofer Dienstag, 24. Mai 2011 11:44
- Als Antwort markiert Robert Breitenhofer Dienstag, 31. Mai 2011 08:15
-
Hallo,
hast Du bei der Wave Ressource auch festgelegt, dass sie als eingebettete Ressource kompiliert werden soll?
Nach diesem Beispiel sollte der Aufruf funktionieren:
Dim sp As New SoundPlayer(Me) sp.PlaySoundFromEmbeddedResource("chord.wav")
Ferner muss Deine Anwendung für die Zielplattform "x86" kompiliert werden. Standard bei den Express Editionen ist "AnyCPU". Siehe http://social.msdn.microsoft.com/Forums/de-DE/visualbasicde/thread/9a963dc8-c5d2-4d24-b31e-92f2d95cdc2a.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Robert Breitenhofer Dienstag, 24. Mai 2011 11:44
- Als Antwort markiert Robert Breitenhofer Dienstag, 31. Mai 2011 08:15
-
Hallo asd4444b,
Man kann eine .wav Datei auch folgend abspielen:
1) Verweis auf Microsoft.DirectX.AudioVideoPlayback setzten
2) Folgenden Code verwenden
Imports Microsoft.DirectX Imports Microsoft.DirectX.DirectSound Imports Microsoft.DirectX.AudioVideoPlayback Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim midFile As Audio = New Audio("c:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\Media\Wavs\Electro_1.wav") midFile.Play() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click '//Sound Device erstellen Dim dev As Device = New Device() dev.SetCooperativeLevel(Me, CooperativeLevel.Normal) '//Buffer Description erstellen Dim buffer_desc As BufferDescription = New BufferDescription() buffer_desc.ControlEffects = True '//True wenn man effects verwendet buffer_desc.GlobalFocus = True '//Sound abspielen auch wenn die Anwendung den Focus verliert '//Secondary Buffer erstellen Dim buffer As SecondaryBuffer = New SecondaryBuffer("c:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\Media\Wavs\Electro_1.wav", buffer_desc, dev) '//Optional:Array of effects descriptions erstellen Dim effects As EffectDescription() = New EffectDescription(1) {} effects(0).GuidEffectClass = DSoundHelper.StandardEchoGuid effects(1).GuidEffectClass = DSoundHelper.StandardChorusGuid buffer.SetEffects(effects) '//Buffer abspielen buffer.Play(0, BufferPlayFlags.Default) End Sub End Class
Das Problem mit dem zweiten Buffer ist vielleicht folgendes:
Throttling SecondaryBuffer stream reading speed in DirectSound
…[SecondaryBuffer.SecondaryBuffer Constructor () hat mehrere Konstruktoren] …und BufferTooSmallException bedeutet „The buffer size is not large enough to enable effects processing.“
Grüße,
Robert
- Als Antwort vorgeschlagen Thorsten Dörfler Donnerstag, 26. Mai 2011 06:47
- Als Antwort markiert Robert Breitenhofer Dienstag, 31. Mai 2011 08:16