furnace
furnace copied to clipboard
Support for importing MIDI files
Since I like using the piano roll in my DAW to transcribe music, I added a menu which allows the importing of MIDI files into patterns. Currently, a single measure (defined as 4 quarters) from a MIDI track can be imported into a pattern at a time. The measure to import as well as the channel to listen to are configurable. There is also a speed multiplier which determines the length of a measure. Note on/off messages, velocity and CC messages can be imported (where CC messages are treated as effects).
It does depend on a new library, Midifile, which can be found here: https://github.com/craigsapp/midifile It is licensed under BSD 2-clause.
This is a work in progress which can be updated as the idea becomes more polished.
Original sequence
Imported into Furnace
Progress report?
Oh man... please don't add this type of features tu furnace... I understand that you work on your DAW, but isn't it better to make furnace more confortable to work with midi inputs instead? This feature will be used by lazy people that make youtube sega genesis remixes using others people work and a vst... the good thing about furnace and deflemask is that people cannot use it to steal others people work on midi format and make remixes... you have to sit and write your music from scratch and that takes effort and knowledge. Please, avoid adding this kind of features to Furnace. I beg you... sorry about my broken english.
@Soulchip , personally I think it is a great feature, this is @tildearrow's decision to include it or not. I you won't use it, maybe other people will find it useful, even if they are just lazy. This feature will maybe not improve their 'talent' as composers, but maybe they will have fun anyway !
Fun is learning and writing, not stealing and replacing, something very common on most "remixes" found on youtube. It's the effort that makes it fun.
@Soulchip,
I think this is concern a bit unwarranted, at least for this pull request. This feature does not allow the importing of any MIDI automatically; it requires manual work to either import each section or to modify the MIDI to include various import flags. Polyphony is not considered per track and thus you will be missing several notes if you try to import a random MIDI from online. There is still a good amount of effort that is required to bring a MIDI into Furnace.
Also, support for MIDI inputs alone do not work for me. I do not use a piano keyboard to sequence music, I am accustomed to the piano roll and this is a feature that Furnace lacks. I want to be able to make music more easily in Furnace using the workflow that I know well.
In any case, I think that making a tool more convenient and easier for music producers to use is more important than the side effect of encouraging laziness, but I understand your opinion on the matter. I think that the benefits of making tracker music more accessible outweigh the disadvantages of making it "too easy."
Fun is learning and writing, not stealing and replacing, something very common on most "remixes" found on youtube. It's the effort that makes it fun.
I highly doubt this will lead to another wave of midislapping like we saw in the days of GXSCC. If it did, there'd be hundreds of midi slaps using Famistudio on youtube right now.
Progress report? (again)
Technically, you can do this in a limited way using OpenMPT. OpenMPT has a feature which allows you to convert MIDI files into tracker format, but I'm pretty sure Furnace's MOD support only goes up to 4 channels, so complex MIDI files can't work.
Technically, you can do this in a limited way using OpenMPT. OpenMPT has a feature which allows you to convert MIDI files into tracker format, but I'm pretty sure Furnace's MOD support only goes up to 4 channels, so complex MIDI files can't work.
99 channels.
I'm sorry. but is this still open to discussions?
Of course it is.
Of course it is.
Thanks for reply. I mean, at this point, I don't even care if this is going to happen. I'm only check in for bryc and more who care about it. And I really really sorry for anything that happen for my misuse of words. I'm not in discord, so I really don't know. But I assume it's bad enough to summon you when you're busy.
pls. no ban.
Of course it is.
Thanks for reply. I mean, at this point, I don't even care if this is going to happen. I'm only check in for bryc and more who care about it. And I really really sorry for anything that happen for my misuse of words. I'm not in discord, so I really don't know. But I assume it's bad enough to summon you when you're busy.
pls. no ban.
Sorry, I have gotten carried away by lots of other things. I set a reminder for myself to take a look at this in a few weeks, because it's still something that I want to see implemented.
Looks dead. Is it still considered or developed?
Looks dead. Is it still considered or developed?
Hopefully
Looks dead. Is it still considered or developed?
Hopefully
The PR creator has been AWOL for well over nine months, so I'd say no
Looks dead. Is it still considered or developed?
Hopefully
The PR creator has been AWOL for well over nine months, so I'd say no
I have not been focusing on this at all, but I really don’t want to say this is never happening. I would at least like to post the specification that I had planned, if anyone is interested helping. I will try to do that by end of day today. Also, if you would like to pressure me to work on this, I really do not mind if you ping me on Discord (username bedrock).
Looks dead. Is it still considered or developed?
Hopefully
The PR creator has been AWOL for well over nine months, so I'd say no
I have not been focusing on this at all, but I really don’t want to say this is never happening. I would at least like to post the specification that I had planned, if anyone is interested helping. I will try to do that by end of day today. Also, if you would like to pressure me to work on this, I really do not mind if you ping me on Discord (username bedrock)
No pressure, MIDI would be kind of difficult to implement since all instrument data is not FM or PSG? it might need extra work to add default instruments for each MIDI instrument. let alone conversion/detection of FM or PSG. that might be impossible. Who knows? maybe it might be possible!
Here's a general rundown of the specification:
Importing MIDI files should be implemented with the idea that it should be more practical for DAW users who prefer another form of notation (such as the piano roll), and potentially also allow for recorded performances to be imported as well.
In order to make this process convenient for as many use cases as possible, we suggest three types of MIDI importing: one which allows for users to import sections of a MIDI sequence as individual patterns, one which accepts any MIDI file and tries to automatically create patterns for all the sections (removing duplicate patterns), and one that uses keyswitches or some other form of control to explicitly specify how patterns should behave.
The first option (individually importing patterns):
- Enables manual control of how the MIDI is imported
- Velocity, note off, and CC messages can be optionally imported
- MIDI channel and track can be selected along with measure
- Speed multiplier can be used to adjust the tempo at which MIDI files should be imported (in case your MIDI is half or double the speed it needs to be in Furnace)
- Overlapping notes are automatically truncated, since channels are monophonic
- Requires the most time to import
- Only makes sense to import a starting melody or a small section of a MIDI file
The second option (automatically detecting):
- Allows for MIDIs to easily be imported and used in Furnace
- Same configuration parameters as the first option
- Each MIDI track is assigned to a different channel
- Alternatively, each MIDI track's channel prefix determines which channel it is assigned in Furnace
- By default, the instrument used in Furnace is determined by the current instrument in the track
- However, we can also use the channel of each MIDI note to dynamically change the instrument (in FL Studio, for example, the colors of the notes in the piano roll determine the channel of each note, which is more intuitive)
- This allows for up to 16 instruments to be assigned per Furnace channel
- However, we can also use the channel of each MIDI note to dynamically change the instrument (in FL Studio, for example, the colors of the notes in the piano roll determine the channel of each note, which is more intuitive)
- Option for MIDI drums on channel 10 to convert MIDI pitch into Furnace note pitch or instrument number
- This way, channel 10 can be used for PCM channels if desired.
- Multiple tracks on channel 10 can be used to split drums across different PCM channels.
- No dynamic control of parameters such as preserving note offs
- Requires calculation to check if patterns are identical, and then to remove them afterwards
The third option (keyswitches):
- Ideal(?) for making new tracker music in a DAW
- Works like the second option, but enables more control
- Channel prefix of track determines MIDI channel, not automatically assigned (except for channel 10 when drums enabled)
- Uses keyswitches
- I suggest the following initial keyswitches (the note numbers are suggested):
- Note 127 - repeat last pattern
- It will repeat the last pattern once, but it can be interrupted by adding any non-keyswitch note
- If you want to repeat the first half of the last pattern, then you only need to write the new second half
- If you need to repeat the second half, this won't work, you'll need to manually input the first half again
- Can be layered with note 120
- Note 126 - repeat MIDI measure #
- For the next pattern, repeats starting at any measure in the channel from 0-127, otherwise works like note 127
- Measure # is determined by velocity
- This is not ideal because many DAWs do not make it easy to precisely adjust the velocity of each note
- Also, there may be more than 127 measures. The last 127 measures or patterns could work but would be hard to count.
- Note 125 - enable note offs for channel
- Note 124 - disable note offs for channel
- Note 127 - repeat last pattern
- I suggest the following initial keyswitches (the note numbers are suggested):
- Doesn't sound the way it is played in the DAW, but allows for less MIDI to be written
- The highest notes are inaccessible because they are assigned as keyswitches
I have not considered how to store instrument data in MIDI, but I would not expect it to be intuitive, and I think it would make more sense to do that directly in Furnace.
Feel free to provide any feedback on this specification. I do have some projects that I made with the second and third options in mind, if having a reference would be helpful.
Here's a general rundown of the specification:
Importing MIDI files should be implemented with the idea that it should be more practical for DAW users who prefer another form of notation (such as the piano roll), and potentially also allow for recorded performances to be imported as well.
In order to make this process convenient for as many use cases as possible, we suggest three types of MIDI importing: one which allows for users to import sections of a MIDI sequence as individual patterns, one which accepts any MIDI file and tries to automatically create patterns for all the sections (removing duplicate patterns), and one that uses keyswitches or some other form of control to explicitly specify how patterns should behave.
The first option (individually importing patterns):
- Enables manual control of how the MIDI is imported
- Velocity, note off, and CC messages can be optionally imported
- MIDI channel and track can be selected along with measure
- Speed multiplier can be used to adjust the tempo at which MIDI files should be imported (in case your MIDI is half or double the speed it needs to be in Furnace)
- Overlapping notes are automatically truncated, since channels are monophonic
- Requires the most time to import
- Only makes sense to import a starting melody or a small section of a MIDI file
The second option (automatically detecting):
Allows for MIDIs to easily be imported and used in Furnace
Same configuration parameters as the first option
Each MIDI track is assigned to a different channel
- Alternatively, each MIDI track's channel prefix determines which channel it is assigned in Furnace
By default, the instrument used in Furnace is determined by the current instrument in the track
However, we can also use the channel of each MIDI note to dynamically change the instrument (in FL Studio, for example, the colors of the notes in the piano roll determine the channel of each note, which is more intuitive)
- This allows for up to 16 instruments to be assigned per Furnace channel
Option for MIDI drums on channel 10 to convert MIDI pitch into Furnace note pitch or instrument number
- This way, channel 10 can be used for PCM channels if desired.
- Multiple tracks on channel 10 can be used to split drums across different PCM channels.
No dynamic control of parameters such as preserving note offs
Requires calculation to check if patterns are identical, and then to remove them afterwards
The third option (keyswitches):
Ideal(?) for making new tracker music in a DAW
Works like the second option, but enables more control
Channel prefix of track determines MIDI channel, not automatically assigned (except for channel 10 when drums enabled)
Uses keyswitches
I suggest the following initial keyswitches (the note numbers are suggested):
Note 127 - repeat last pattern
- It will repeat the last pattern once, but it can be interrupted by adding any non-keyswitch note
- If you want to repeat the first half of the last pattern, then you only need to write the new second half
- If you need to repeat the second half, this won't work, you'll need to manually input the first half again
- Can be layered with note 120
Note 126 - repeat MIDI measure #
For the next pattern, repeats starting at any measure in the channel from 0-127, otherwise works like note 127
Measure # is determined by velocity
- This is not ideal because many DAWs do not make it easy to precisely adjust the velocity of each note
- Also, there may be more than 127 measures. The last 127 measures or patterns could work but would be hard to count.
Note 125 - enable note offs for channel
Note 124 - disable note offs for channel
Doesn't sound the way it is played in the DAW, but allows for less MIDI to be written
The highest notes are inaccessible because they are assigned as keyswitches
I have not considered how to store instrument data in MIDI, but I would not expect it to be intuitive, and I think it would make more sense to do that directly in Furnace.
Feel free to provide any feedback on this specification. I do have some projects that I made with the second and third options in mind, if having a reference would be helpful.
Very good ideas!
As I said on Discord, OpenMPT's SMF support is iffy and often unreliable especially when exporting, and importing MIDIs would take adjusting the quantization settings until the "note delay" effects are gone and no extra channels are added. What exists right now is pasting note data from OpenMPT, or by exporting it as a MOD and then importing it to furnace.
As I said on Discord, OpenMPT's SMF support is iffy and often unreliable especially when exporting, and importing MIDIs would take adjusting the quantization settings until the "note delay" effects are gone and no extra channels are added. What exists right now is pasting note data from OpenMPT, or by exporting it as a MOD and then importing it to furnace.
Iffy as it is, it still works. It's not perfect, it never was meant to be. You should know why there's note delay/cut there, right, that's not a side-effect rather a designed/indented compromise for the MIDI event almost analogue nature to more "digital" tracker events. In simple word, that is what it's doing the best to not aliasing. That said, it's not really a good example to say it's support is iffy.
As I said on Discord, OpenMPT's SMF support is iffy and often unreliable especially when exporting, and importing MIDIs would take adjusting the quantization settings until the "note delay" effects are gone and no extra channels are added. What exists right now is pasting note data from OpenMPT, or by exporting it as a MOD and then importing it to furnace.
Iffy as it is, it still works. It's not perfect, it never was meant to be. You should know why there's note delay/cut there, right, that's not a side-effect rather a designed/indented compromise for the MIDI event almost analogue nature to more "digital" tracker events. In simple word, that is what it's doing the best to not aliasing. That said, it's not really a good example to say it's support is iffy.
The note delay thing is intentional, but what I mean being a problem is how precisely the user needs to adjust the quantization levels to avoid that workaround happening, which takes guessing unless running the "file" command on it shows an accurate quantization level