From: TAMUKI S. <ta...@li...> - 2015-05-16 11:17:29
Attachments:
96-EDO_full_scale_demo.mid
|
Hello, Dave From: dav...@us... To: ta...@us... Cc: dav...@us... Subject: Extending the MIDI format in Timidity Date: Wed, 13 May 2015 15:48:05 +0000 > Hello, > > Forgive me for contacting you out of the blue like this but it's > getting tough to find people who know Timidity internals. > > Here's my problem. I'm creating a program that generates music > (www.platonicmusicengine.com) and it allows for pretty much any > musical idea one could ever have including alternate tunings. > > Currently the software generates a tuning table for each piece of > music and uses Timidity to convert that music with the tuning table > into an audio file. Works perfectly. > > The problem is when I have tunings that use more than 12 divisions of > the octave: it shrinks the available range of notes. For example if > you use a 256-EDO then you'd only have 128/256 = .5 octaves available > instead of the normal 128/12 = 10.666 octaves using standard tunings. > > There are several ways to overcome this (without using pitch bend > which has its own problems) using dynamic tables but my ideal solution > is this: > > Extend the MIDI format within Timidity to allow for a lot more notes. > And then for Timidity to load a much larger tuning table to handle all > those notes. > > I know I won't be able to convince the MIDI Group (whoever they are) > to do this but I was wondering if it's possible to make these changes > to Timidity? Obviously people would have to use this new version of > Timidity in order to take full advantage of my software but that would > be perfectly fine (my software is GPL). > > I am a composer and not a programmer and only know enough Lua to work > on my one project. If it is possible to modify Timidity like I > described I would certainly try to figure it out on my own but would > appreciate a lot of pointers. > > Thanks, > Dave Bellows Yes, TiMidity++ can handle many notes and also have larger internal tuning tables. For example, to get the full range of the 96-EDO tuning, one would need 1024 notes and corresponding tuning tables using MIDI Tuning Standard (MTS) specification. Attached MIDI file is just a quick hack that plays 96-EDO full scale. Good luck. Regards, TAMUKI Shoichi |
From: David B. <dav...@gm...> - 2015-05-16 22:00:20
|
Hello TAMUKI, Thanks for taking the time to answer my question. But just to make sure I understand what you're saying and what's going on in the MIDI file you sent I have some questions: 1. It looks like you loaded several tuning tables at once and then switched between them. Is that accurate? What's the maximum number of tuning tables that can be sent like this? The resolution limit of MIDI is a 196608-EDO (according to: http://www.tonalsoft.com/enc/number/14mu.aspx) which would require, I think, 16385 tuning tables. Is it actually possible to load that many tables? 2. Perhaps a different approach would work better for me. In the MTS there is a method called "Single Note Tuning Change" (as opposed to the Bulk Tuning Dump which is what I'm assuming that Timidity uses?) that, as far as I can tell, allows one to send a sysex command with each note event changing the frequency of that note (sysex #82?). This would allow me to just deal with the frequencies I need in a particular piece instead of loading thousands of notes that I don't necessarily need. Does Timidity support this method? Thank you again, David Bellows On Sat, May 16, 2015 at 4:16 AM, TAMUKI Shoichi <ta...@li...> wrote: > Hello, Dave > > From: dav...@us... > To: ta...@us... > Cc: dav...@us... > Subject: Extending the MIDI format in Timidity > Date: Wed, 13 May 2015 15:48:05 +0000 > >> Hello, >> >> Forgive me for contacting you out of the blue like this but it's >> getting tough to find people who know Timidity internals. >> >> Here's my problem. I'm creating a program that generates music >> (www.platonicmusicengine.com) and it allows for pretty much any >> musical idea one could ever have including alternate tunings. >> >> Currently the software generates a tuning table for each piece of >> music and uses Timidity to convert that music with the tuning table >> into an audio file. Works perfectly. >> >> The problem is when I have tunings that use more than 12 divisions of >> the octave: it shrinks the available range of notes. For example if >> you use a 256-EDO then you'd only have 128/256 = .5 octaves available >> instead of the normal 128/12 = 10.666 octaves using standard tunings. >> >> There are several ways to overcome this (without using pitch bend >> which has its own problems) using dynamic tables but my ideal solution >> is this: >> >> Extend the MIDI format within Timidity to allow for a lot more notes. >> And then for Timidity to load a much larger tuning table to handle all >> those notes. >> >> I know I won't be able to convince the MIDI Group (whoever they are) >> to do this but I was wondering if it's possible to make these changes >> to Timidity? Obviously people would have to use this new version of >> Timidity in order to take full advantage of my software but that would >> be perfectly fine (my software is GPL). >> >> I am a composer and not a programmer and only know enough Lua to work >> on my one project. If it is possible to modify Timidity like I >> described I would certainly try to figure it out on my own but would >> appreciate a lot of pointers. >> >> Thanks, >> Dave Bellows > > Yes, TiMidity++ can handle many notes and also have larger internal > tuning tables. For example, to get the full range of the 96-EDO > tuning, one would need 1024 notes and corresponding tuning tables > using MIDI Tuning Standard (MTS) specification. > > Attached MIDI file is just a quick hack that plays 96-EDO full scale. > > Good luck. > > Regards, > TAMUKI Shoichi > > ------------------------------------------------------------------------------ > One dashboard for servers and applications across Physical-Virtual-Cloud > Widest out-of-the-box monitoring support with 50+ applications > Performance metrics, stats and reports that give you Actionable Insights > Deep dive visibility with transaction tracing using APM Insight. > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > _______________________________________________ > Timidity-talk mailing list > Tim...@li... > https://lists.sourceforge.net/lists/listinfo/timidity-talk > |
From: A. Z. <and...@co...> - 2015-05-18 16:41:35
|
On Sat, 16 May 2015 15:00:13 -0700 David Bellows <dav...@gm...> wrote: > In the MTS > there is a method called "Single Note Tuning Change" (as opposed to > the Bulk Tuning Dump) ... > > Does Timidity support this method? > Unfortunately, no one has answered your question. I am also interested in using the "Single-Note Tuning Change" method and the only suggestion I can make is to simply try it. Construct a MIDI file containing such sysex messages and see if it will work. This kind of experimentation is perhaps best done using a frequency counter and a sine wave sound font. A measurement of the exact output frequency for a known sysex message would confirm or deny the ability of TiMidity++ to handle such messages. AZ |
From: David B. <dav...@gm...> - 2015-05-18 21:27:21
|
> Construct a MIDI file containing such sysex messages and see if it will work. Unfortunately I don't know how to do this. I'm using this library: www.pjb.com.au/comp/lua/MIDI.html and it does provide for sending sysex commands but I'm unable to tell if I'm doing it correctly so I can't tell if it's not working or if I'm just not constructing the file correctly. My knowledge of MIDI is pretty limited here. If I happened to know it was going to work then I'd just keep playing around till I was able to make it work. On Mon, May 18, 2015 at 9:41 AM, A. Zimmer <and...@co...> wrote: > On Sat, 16 May 2015 15:00:13 -0700 > David Bellows <dav...@gm...> wrote: > >> In the MTS >> there is a method called "Single Note Tuning Change" (as opposed to >> the Bulk Tuning Dump) ... >> >> Does Timidity support this method? >> > > Unfortunately, no one has answered your question. > > I am also interested in using the "Single-Note Tuning Change" > method and the only suggestion I can make is to simply try it. > Construct a MIDI file containing such sysex messages and see if > it will work. > > This kind of experimentation is perhaps best done using a > frequency counter and a sine wave sound font. A measurement > of the exact output frequency for a known sysex message would > confirm or deny the ability of TiMidity++ to handle such > messages. > > AZ > > > ------------------------------------------------------------------------------ > One dashboard for servers and applications across Physical-Virtual-Cloud > Widest out-of-the-box monitoring support with 50+ applications > Performance metrics, stats and reports that give you Actionable Insights > Deep dive visibility with transaction tracing using APM Insight. > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > _______________________________________________ > Timidity-talk mailing list > Tim...@li... > https://lists.sourceforge.net/lists/listinfo/timidity-talk |
From: A. Z. <and...@co...> - 2015-05-18 21:42:12
|
On Mon, 18 May 2015 14:27:12 -0700 David Bellows <dav...@gm...> wrote: > > Construct a MIDI file containing such sysex messages and see if > it will work. > > Unfortunately I don't know how to do this. I'm using this library: > www.pjb.com.au/comp/lua/MIDI.html and it does provide for sending > sysex commands but I'm unable to tell if I'm doing it correctly so I > can't tell if it's not working or if I'm just not constructing the > file correctly. > You can check out midicsv: http://www.fourmilab.ch/webtools/midicsv/ This utility will parse a midi file and produce a text file containing all the midi events. Also included is "csvmidi" which converts a text file (as above) and converts it back into midi. Converting a simple midi file to text, manually adding some sysex messages before/after note events, and then converting back to midi should be straightforward. AZ |
From: David B. <dav...@gm...> - 2015-05-19 00:32:17
Attachments:
Piano_Standard.midi
|
> Converting a simple midi file to text, manually adding some sysex messages before/after note events, and then converting back to midi should be straightforward. Thanks for pointing out the midicsv tools. I'm sure they will come in very handy. And now the good news. Timidity does indeed support the single note change. In fact it's even in the docs (README.mts) (oops!). I've attached a MIDI file that plays an A4 followed by a C4 but the A4 is tuned to a C4 so you should hear two middle-C's. (Note, in my MIDI file there is a spurious sysex command that is an artefact of my program but does not affect the playing of the file.) Running cvsmidi shows how to construct the proper sysex command. This is really great news and means that basically we can just send specific frequencies to MIDI and not mess with tuning tables or anything else. The next step is trying to understand how MIDI encodes its frequencies (it looks confusing to me but I'm sure I'll figure it out eventually). Dave On Mon, May 18, 2015 at 2:41 PM, A. Zimmer <and...@co...> wrote: > On Mon, 18 May 2015 14:27:12 -0700 > David Bellows <dav...@gm...> wrote: > >> > Construct a MIDI file containing such sysex messages and see if >> it will work. >> >> Unfortunately I don't know how to do this. I'm using this library: >> www.pjb.com.au/comp/lua/MIDI.html and it does provide for sending >> sysex commands but I'm unable to tell if I'm doing it correctly so I >> can't tell if it's not working or if I'm just not constructing the >> file correctly. >> > > You can check out midicsv: > > http://www.fourmilab.ch/webtools/midicsv/ > > This utility will parse a midi file and produce a text file > containing all the midi events. > > Also included is "csvmidi" which converts a text file (as above) > and converts it back into midi. > > Converting a simple midi file to text, manually adding some sysex > messages before/after note events, and then converting back to midi > should be straightforward. > > AZ > > > ------------------------------------------------------------------------------ > One dashboard for servers and applications across Physical-Virtual-Cloud > Widest out-of-the-box monitoring support with 50+ applications > Performance metrics, stats and reports that give you Actionable Insights > Deep dive visibility with transaction tracing using APM Insight. > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > _______________________________________________ > Timidity-talk mailing list > Tim...@li... > https://lists.sourceforge.net/lists/listinfo/timidity-talk |