คุณสามารถบันทึกข้อมูลเสียงดิบใน XNA ได้หรือไม่?


9

XNA 4 รวมถึง Microsoft.Xna.Framework.Audio คลาสของไมโครโฟนซึ่งสามารถอ่านข้อมูลเสียงดิบออกจากไมโครโฟนผ่าน API ที่บันทึกไว้:

GetData - รับข้อมูลที่บันทึกล่าสุดจากไมโครโฟน

GetSampleDuration - ส่งคืนระยะเวลาของการเล่นเสียงตามขนาดของบัฟเฟอร์

GetSampleSizeInBytes - ส่งคืนขนาดของอาร์เรย์ไบต์ที่ต้องใช้เพื่อเก็บระยะเวลาเสียงที่ระบุสำหรับวัตถุไมโครโฟนนี้

ฉันสามารถอ่านข้อมูลเสียงโดยใช้คลาสนี้บันทึกในอาเรย์แล้วเล่นได้หรือไม่ บน Xbox 360?

คำตอบ:


7

คุณอาจจะลองส่งข้อมูลจากไมโครโฟนไปยังแบบไดนามิก Sound Effect

ฉันเพิ่งเขียนรหัสเพื่อทดสอบนี้ใช้งานได้

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);
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.