MidiEventCollection direkt abspielenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 MidiEventCollection direkt abspielen

Post by Anonymous »

Mit dem NAudio-Framework habe ich Code wie diesen geschrieben, um einige Midi-Noten abzuspielen:

Code: Select all

// Guts of a play note method which takes a cancellation token, a note
// a channel and a duration - CurrentVolume is a property of the class
// that plays the notes
midiOut.Send(MidiMessage.StartNote(note, CurrentVolume, channel).RawData);
try
{
await Task.Delay(duration, cancellationToken);
}
finally
{
midiOut.Send(MidiMessage.StopNote(note, CurrentVolume, channel).RawData);
}
Und das funktioniert in Ordnung, aber hin und wieder gibt es einen kleinen Sprung/eine kleine Verzögerung beim Rendern, was meiner Meinung nach darauf zurückzuführen ist, dass Task.Delay nicht immer genau ist. Ich würde gerne einfach eine Midi-Sammlung erstellen und die gesamte Sammlung an das Midi-Out-Gerät senden, aber ich finde anscheinend keine Möglichkeit, das zu tun. Ich bin so weit gekommen, eine Sammlung zu erstellen, und ich weiß, wie man diese in einer Datei speichert. Wenn die Lösung also darin besteht, eine Datei zu erstellen und die Datei dann irgendwie zu senden, ist dies auch akzeptabel.

Code: Select all

var collection = new MidiEventCollection(0, 120);
collection.AddEvent(new NoteOnEvent(0, 1, 64, 127, 15), 1);
collection.AddEvent(new NoteOnEvent(15, 1, 65, 127, 15), 1);
collection.AddEvent(new NoteOnEvent(30, 1, 66, 127, 15), 1);
collection.AddEvent(new NoteOnEvent(45, 1, 67, 127, 15), 1);
collection.AddEvent(new NoteOnEvent(60, 1, 68, 127, 15), 1);

collection.PrepareForExport();

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post