Você pode gravar dados de som brutos no XNA?

9

XNA 4 inclui o Microsoft.Xna.Framework.Audio. Classe de microfone que aparentemente pode ler os dados de som brutos do microfone por meio de sua API, conforme documentado:

GetData - Obtém os dados mais recentes gravados do microfone.

GetSampleDuration - Retorna a duração da reprodução de áudio com base no tamanho do buffer.

GetSampleSizeInBytes - Retorna o tamanho da matriz de bytes necessária para manter a duração especificada do áudio para este objeto de microfone.

Posso ler dados de som usando esta classe, gravá-los em uma matriz e depois reproduzi-los? No Xbox 360?

Robinicks
fonte

Respostas:

7

Você pode tentar enviar os dados do microfone para um efeito sonoro dinâmico .

Acabei de escrever um código para testar isso, funciona.

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
fonte