3

C#/Windows Presentation Foundation を使用してアプリケーションを作成しています。ダンスのステップを足の形で視覚化しています。現在、音楽を WAV ファイルとして再生し、タイマーでステップのタイミングを計っています。

タイマーの不規則性のため、音楽はステップと同期していません。ある種の同期が必要です。これが、 MIDI ファイルを使用したかった理由です。

ステップを同期するには、音楽のたびにイベントが必要であり、次のステップを表示します。この場合、タイマーはもう使用しません。

私はすでにNAudioを見ました。役に立たない MP3 ファイルを再生するためのチュートリアルを見つけました。MidiFile オブジェクトを作成しましたが、再生方法がわかりません。MIDI ファイルに (シンセサイザー用の) 音楽の再生方法に関する情報が含まれていることは知っていますが、独自のプレーヤーを実装したくありません。

  1. NAudioでMIDIファイルを再生する簡単な方法は何ですか?

  2. 音楽の各時間でイベントを受信するにはどうすればよいですか?

  3. おそらく私をより良くすることができるNAudioの代替手段はありますか?

  4. ビジュアライゼーションに同期できる MIDI の代替手段はありますか?

あらゆる種類の助けに感謝しています。私はしばらく探していましたが、おそらく間違った方向を見ていると思います。

4

2 に答える 2

1

midi の内部構造をさらに詳しく知りたい場合、これは非常にクールなライブラリとソース コードのように見えます。

http://code.google.com/p/midi-dot-net/

于 2012-06-24T15:44:39.283 に答える
1

DryWetMIDI (私は作成者です) を使用すると、再生されたイベントを発生させながら MIDI ファイルを再生するのは非常に簡単です

namespace SimplePlaybackApp
{
    class Program
    {
        private static Playback _playback;

        static void Main(string[] args)
        {
            var midiFile = MidiFile.Read("The Greatest Song Ever.mid");

            var outputDevice = OutputDevice.GetByName("Microsoft GS Wavetable Synth");

            _playback = midiFile.GetPlayback(outputDevice);
            _playback.EventPlayed += OnEventPlayed;
            _playback.Start();

            SpinWait.SpinUntil(() => !_playback.IsRunning);

            Console.WriteLine("Playback stopped or finished.");

            outputDevice.Dispose();
            _playback.Dispose();
        }

        private static void OnEventPlayed(object sender, MidiEventPlayedEventArgs e)
        {
            // ... do something
        }
    }
}

詳細については、Playbackの記事とPlayback APIリファレンスをご覧ください。

于 2020-08-21T16:06:38.410 に答える