davidluzgouveia / midi-parser Goto Github PK
View Code? Open in Web Editor NEWSimple single-file C# MIDI parser
License: MIT License
Simple single-file C# MIDI parser
License: MIT License
The type used to store the meta event tempo is too small, even when converted as BPM. Since data1
is a byte and cast does not check for overflows, any value greater than 256 will result in an silent overflow.
private static bool ParseMetaEvent(
byte[] data,
ref int position,
byte metaEventType,
ref byte data1,
ref byte data2)
{
switch (metaEventType)
{
case (byte)MetaEventType.Tempo:
var mspqn = (data[position + 1] << 16) | (data[position + 2] << 8) | data[position + 3];
data1 = (byte)(60000000.0 / mspqn);
position += 4;
return true;
I would advise changing data1 and data2 types to int as I did.
On another note converting the tempo into BPM is confusing for a library that aims to offer a minimalist representation of MIDI events. I would suggest keeping the original MIDI value and maybe use a static function to convert it. Also the loss in precision might be unwanted for some specific use cases.
Thank you for this library, it helped me a lot.
I can get time from midi file, but How it works?
Here are the times of each note:
51
56
44
51
56
46
53
What are their meaning?
ex:
foreach(var midiEvent in track.MidiEvents)
{
if(midiEvent.MidiEventType == MidiEventType.NoteOn)
{
var channel = midiEvent.Channel;
var note = midiEvent.Note;
var velocity = midiEvent.Velocity;
var noteLength = midiEvent.Length //--I want a feature like this, indicate the length of the note (noteOff time - noteOn time)
}
}
https://stackoverflow.com/questions/23070510/how-to-get-exact-time-of-a-midi-event
I don't know much to MIDI files but I can confirm that Time in MidiEvent.Time is not the correct time.
Is there a way to get PPQ (Pulses per quarter note)?
PPQ is reuired to transfer MIDI tick to seconds.
or is the time already transferred into seconds?
EDIT: I found the Tick per quarter note. :)
PPQ = midiFile.TicksPerQuarterNote;
Maybe you should consider write that in README.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.