none
Problem mit DirectSound RRS feed

  • 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
    Samstag, 7. Mai 2011 16:29

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
    Sonntag, 8. Mai 2011 07:42
  • Hallo,

    hast Du bei der Wave Ressource auch festgelegt, dass sie als eingebettete Ressource kompiliert werden soll?

    Screenshot

    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
    Sonntag, 8. Mai 2011 09:59
  • 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

    Dienstag, 24. Mai 2011 11:41

Alle Antworten

  • Hallo,

    konkreter Code oder ein Beispielprojekt wären extrem hilfreich.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Samstag, 7. Mai 2011 17:53
  • 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
    Sonntag, 8. Mai 2011 07:42
  • Hallo,

    hast Du bei der Wave Ressource auch festgelegt, dass sie als eingebettete Ressource kompiliert werden soll?

    Screenshot

    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
    Sonntag, 8. Mai 2011 09:59
  • Hi,

    jetzt kommt die eine Fehlermeldung nicht mehr, aber dafür die Meldung "BufferTooSmall".

    Warum?


    asd4444b

    Ein Spiel von mir programmiert mit vb.NET: auf Moddb und mein Blog

    Montag, 9. Mai 2011 16:51
  • 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

    Dienstag, 24. Mai 2011 11:41
  • Hallo asd4444b,

    Haben Dir die Antworten geholfen?

    Grüße,

    Robert

    Donnerstag, 26. Mai 2011 08:15
  • Hallo asd4444b,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.

    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,

    Robert

    Dienstag, 31. Mai 2011 08:15
  • Hab mich in letzter Zeit sehr viel mit PHP beschäftigt und deswegen nicht mehr nachgrguckt.

    Ich werde die Vorschläge jetzt ausprobieren.


    asd4444b

    Ein Spiel von mir programmiert mit vb.NET: auf Moddb und mein Blog

    Montag, 13. Juni 2011 13:19