2010-01-25 9 views
1

Mon wave ne sera pas joué en mode debug. Si j'appuie sur CTRL + F5, j'obtiens un bon WAV et la console écrit la position du curseur de fichier (buf.PlayPosition) et la méthode se ferme quand le son est terminé. Sous debug (quand je viens de frapper F5) il n'y a pas de sortie audio, cependant la position du curseur de fichier est encore augmentée dans la fenêtre de la console et la méthode se termine sans exception.Pourquoi la mémoire tampon DirectSound ne fonctionne-t-elle pas dans les conditions de débogage?

using Microsoft.DirectX.DirectSound; 

public void Play() 
    { 
     var fileName = "bass.wav"; 
     using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) 
     {  
      using (var dev = new Device()) 
      { 
       dev.SetCooperativeLevel(this, CooperativeLevel.Priority); 
       using (Buffer buf = new Buffer(stream, dev)) 
       { 
        buf.Volume = 0; 
        buf.Play(0, BufferPlayFlags.Default); 
        while (buf.Status.Playing) 
        { 
         System.Console.WriteLine("playing " + buf.PlayPosition); 
        } 
       } 
      } 
     } 
    } 

Des idées?

Répondre

0

J'ai désactivé le processus d'hébergement Visual Studio et cela semble avoir résolu le problème.

2

Peut-être que vous devez donner le tampon "Global Focus" en utilisant le BufferDescription. Depuis le C++ Docs:

« Le drapeau de DSBCAPS_GLOBALFOCUS dans l'exemple assure que le tampon va continuer à jouer même lorsque la fenêtre d'application est pas au premier plan Sans ce drapeau, le tampon sera mis en sourdine. quand une autre application ou même une boîte de dialogue a le focus d'entrée. "

Essayez d'utiliser la forme public SecondaryBuffer(Stream, BufferDescription, Device); du constructeur.

+0

Quel est l'avantage d'utiliser un SecondaryBuffer plutôt qu'un Buffer? – gingerbreadboy

Questions connexes