Können Sie rohe Sounddaten in XNA aufnehmen?

9

XNA 4 enthält das Microsoft.Xna.Framework.Audio. Mikrofonklasse , die scheinbar die Rohtondaten über ihre API vom Mikrofon lesen kann, wie dokumentiert:

GetData - Ruft die zuletzt aufgezeichneten Daten vom Mikrofon ab.

GetSampleDuration - Gibt die Dauer der Audiowiedergabe basierend auf der Größe des Puffers zurück.

GetSampleSizeInBytes - Gibt die Größe des Byte-Arrays zurück, das erforderlich ist, um die angegebene Audiodauer für dieses Mikrofonobjekt zu speichern.

Kann ich mit dieser Klasse Audiodaten lesen, in einem Array aufzeichnen und dann wiedergeben? Auf der Xbox 360?

Robinicks
quelle

Antworten:

7

Sie können versuchen, die Daten vom Mikrofon an einen dynamischen Soundeffekt zu senden .

Ich habe gerade Code geschrieben, um dies zu testen, es funktioniert.

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
quelle