Pouvez-vous enregistrer des données sonores brutes dans XNA?

9

XNA 4 inclut Microsoft.Xna.Framework.Audio. Classe de microphone qui peut apparemment lire les données sonores brutes du microphone via son API comme indiqué:

GetData - Obtient les dernières données enregistrées du microphone.

GetSampleDuration - Renvoie la durée de la lecture audio en fonction de la taille du tampon.

GetSampleSizeInBytes - Renvoie la taille du tableau d'octets requis pour contenir la durée audio spécifiée pour cet objet microphone.

Puis-je lire des données audio à l'aide de cette classe, les enregistrer dans un tableau puis les lire? Sur la Xbox 360?

Le flash
la source

Réponses:

7

Vous pouvez essayer de soumettre les données du microphone à un effet sonore dynamique .

Je viens d'écrire du code pour tester cela, cela fonctionne.

DynamicSoundEffectInstance sound;

protected override void Initialize()
{
    sound = new DynamicSoundEffectInstance(Microphone.Default.SampleRate, AudioChannels.Mono);

    Microphone.Default.BufferReady += (a, b) =>
    {
        byte[] data = new byte[Microphone.Default.GetSampleSizeInBytes(Microphone.Default.BufferDuration)];
        Microphone.Default.GetData(data);

        sound.SubmitBuffer(data);
    };
    Microphone.Default.Start();

    base.Initialize();
}

protected override void Update(GameTime gameTime)
{
    if (gameTime.TotalGameTime.TotalSeconds > 5)
    {
        Microphone.Default.Stop();
        sound.Play();
    }

    base.Update(gameTime);
}
Martin
la source