Bisakah Anda merekam data suara mentah dalam XNA?

9

XNA 4 termasuk Microsoft.Xna.Framework.Audio. Kelas mikrofon yang tampaknya dapat membaca data suara mentah dari mikrofon melalui APInya seperti yang didokumentasikan:

GetData - Mendapat data terbaru yang direkam dari mikrofon.

GetSampleDuration - Mengembalikan durasi pemutaran audio berdasarkan ukuran buffer.

GetSampleSizeInBytes - Mengembalikan ukuran array byte yang diperlukan untuk menahan durasi audio yang ditentukan untuk objek mikrofon ini.

Bisakah saya membaca data suara menggunakan kelas ini, merekamnya dalam sebuah array dan kemudian memutarnya kembali? Di Xbox 360?

Robinicks
sumber

Jawaban:

7

Anda dapat mencoba mengirimkan data dari mikrofon ke Efek Suara Dinamis .

Saya baru saja menulis beberapa kode untuk menguji ini, itu berhasil.

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
sumber