J'ai travaillé sur un projet C# avec NAudio où j'ai besoin d'envoyer des signaux audio spécifiques à des haut-parleurs spécifiques sur un système à 4 canaux. Fondamentalement, j'ai besoin d'envoyer des «sons environnementaux» à l'enceinte arrière gauche, des «sons d'affichage du panneau avant» à l'enceinte avant droite et des «instructions préenregistrées» à l'enceinte avant gauche. Ma conception actuelle fonctionne avec la configuration à 2 canaux prise en charge par mon ordinateur de bureau, mais lorsque j'essaie de l'étendre à 4 canaux sur mon matériel de test, l'erreur suivante persiste: «La valeur ne correspond pas à la plage attendue. quand j'appelle WasapiOut.init(). Je pense que le problème est causé d'une manière ou d'une autre par le MultiplexingSampleProvider, mais je ne suis pas capable de comprendre pourquoi/comment résoudre le problème. Je vérifie que l'AudioDevice que j'utilise supporte suffisamment de canaux avant que j'essaie de le charger, donc ce n'est pas un manque de canaux qui cause le problème.NAudio avec MultiplexingSampleProvider et WasapiOut
Voici le code qui provoque le problème:
// Create mixer provider for each channel.
for(int Count = 0; Count < Channels; Count++)
{
_Mixers.Add(new MixingSampleProvider(_Format.AsStandardWaveFormat()));
_Mixers[Count].MixerInputEnded += SoundEndedEvent;
}
// Create and configure multiplexer provider.
_Multi = new MultiplexingSampleProvider(_Mixers, Channels);
for(int count = 0; count < Channels; count++)
{
_Multi.ConnectInputToOutput(count, 0);
}
// Add master volume control provider.
_Volume = new VolumeSampleProvider(_Multi);
_Volume.Volume = 1.0f;
// Initialize output device.
_OutputDev.Init(p_Volume);
_format est une classe WAVEFORMATEXTENSIBLE avec les paramètres 44.1kHz, 32 bits, 1 canal. Tout fonctionne jusqu'à ce que j'appelle _OutputDev.Init (p_Volume), qui est l'endroit où je reçois la «valeur ne tombe pas dans la fourchette attendue». Tout fonctionne jusqu'à ce que j'appelle _OutputDev.Init (p_Volume). exception.
Des idées pour lesquelles je reçois cette exception et comment puis-je résoudre le problème?
Merci.
Modifier
C'est la trace de la pile que je reçois.
System.ArgumentException: Value does not fall within the expected range. at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at NAudio.Wave.WasapiOut.Init(IWaveProvider waveProvider) at NAudio.Wave.WaveExtensionMethods.Init(IWavePlayer wavePlayer, ISampleProvider sampleProvider, Boolean convertTo16Bit) at GSound.Audio.Player..ctor(Int32 Channels, Int32 Device) in E:\Dev\GSound_Wasapi\Projects\GSound\Audio\Player.cs:line 220 at GSound.Audio.Handler..ctor(Config TheConfig) in E:\Dev\GSound_Wasapi\Projects\GSound\Audio\Handler.cs:line 78 at GSound.UIData..ctor() in E:\Dev\GSound_Wasapi\Projects\GSound\UIData.cs:line 63
Je pense que le problème se produit à l'appel AudioClient.Initialize, qui génère une erreur E_INVALIDARG. Ce qui indique soit un problème avec la valeur de format générée par WasapiOut, soit un problème avec les propriétés du client. Je vais examiner les deux problèmes, mais tout pointeur serait utile.
Merci encore.
Les périphériques WASAPI ne permettent pas nécessairement d'ouvrir avec un son multicanal (c'est-à-dire> 2 canaux). Je n'ai certainement pas réussi à le faire moi-même. Vous aurez probablement plus de succès avec ASIO –
Intéressant, même si le périphérique sélectionné indique par le biais de MMDevice.Properties que PKEY_AudioEndPoint_PhysicalSpeakers masque qu'il dispose de 4 haut-parleurs, leur accès n'est pas réellement garanti.J'ai à voir si je peux obtenir des pilotes ASIO pour la carte son que nous utilisons. Ainsi que d'essayer de comprendre plus en ce qui concerne Wasapi, parce que cela semble juste étrange. – JonDemers