Help for Tune Smithy
From Tune Smithy
This is the wish list for Tune Smithy
For more about this see What is the wish list for
Already planned for the future
Update on this section
Work on these options has ceased while I continue with the Bounce Metronome program. Bounce Metronome has many improvements that will eventually help Tune Smithy when I get the chance to update to version 4.x of Tune Smithy.
The reason is that I have had such an enthusiastic response to the release of Bounce Metronome that it is taking up all my time at present. In future after I finish Bounce Metronome 4.3, and some other projects, I hope to return to Tune Smithy.
Tools for retuning a soundfont or compensate for tuning discrepancies
Update - this may be harder to do than it seemed at first - the main issue is that the automatic pitch detection only works really well for some types of instrument.
See discussion here: Pitch Resolution and Retuning the Yamaha SW1000XG by hand and here Ability to retune soundfont files in FTS
Motivation here is that some soundfonts that are fine for ordinary twelve equal work don't have quite the tuning resolution you need for some microtonal work.
For instance, many are only tuned accurately to within a cent or two (i.e. within a few hundredths of a semitone). For some microtonal work you want better than a tenth of a cent accuracy at a minimum.
This is something FTS is ideally suited for since I have done a lot of work to make it much more precise at determining the pitch of a note than normal frequency analysis tools (which usually don't need to be any more accurate than to within a cent or two). I developed several techniques to improve on the accuracy of frequency analysis in the particular case of musical instruments with well defined pitches, to the point where with a relatively short sample you can get easily accuracies of a hundredth of a cent or better.
There are two things you can do here. If the soundfont is an integral part of a hardware device e.g. soundcard or synth, and you can't access it directly to change it, then can program FTS to compensate for any tuning discrepancies.
If the soundfont is one you can access and modify, you could retune the font itself.
- program FTS to automatically record all the notes for a midi instrument. Probably saved as a lot of recordings in the same folder with note number as part of the file name. You can skip this step if you have access to the soundfont. This tool looks useful as a way to export all the audio files from a sound fontSF2 splitter
- get FTS to auto analyse each note (perhaps as it records it). Probably save those as text files with same name as the audio recording.
- get it to calculate pitch offsets for each note from the analysed frequencies. It could just add this information to the text files it saves. Also have some simple way to re-analyse any sample you feel needs more attention and resave a new version of its spectrum analysis. Make it readable for the software for the next stage 4.
- Get it to read in those pitch offsets again and collate them together in a big table. Then use that to adjust the pitches of notes just before they are sent, to compensate for the fine tuning inaccuracies of the original samples.
- In the case where the samples come from a sound font - could get it to auto retune the samples either by interpolation or by sample rate adjustment.
- Add an option to dig into a soundfont and auto retune all the samples without even exporting them.
How it would work
The automatic pitch detection may need some supervision so that you look at a few of the samples for each instrument by hand to make sure it is finding the correct pitches. However, it is a much easier task than extracting pitches from a recording because you know what the target pitch is to the nearest midi note (you can rely on the soundfont samples to be only a few cents out, certainly not as much as a quarter tone and the midi note it is intended to approximate is given in the soundfont - so the midi note is unambiguous).
It is much easier to find the pitch offset once you know the intended pitch of the fundamental to this accuracy as there is usually only one partial that is anywhere near the desired pitch and you can also find which partials are close to multiples of the desired pitch as well.
This might work even for tricky sounds like bells and even if missing the fundamental. Only thing that might throw it are doublets and you might need to add in doublet detection for bell sounds and have some way to deal with them (use lowest pitch, highest pitch or average for the doublet say, or guide the choice by closeness of fit to the other partials).
So the automatic pitch offset detection is certainly feasible.
Then the way the auto retuning would be done is to adjust the sample rate for the audio file for each sample. This has the advantage that it changes the pitch without changing the positions for the loop points. It's a known method of retuning a soundfont sample, and can get you to the desired pitch with an accuracy of better than 0.02 cents for an audio file originaly at 44100 samples per second. This accuracy of about a fiftieth of a cent is good enough for most microtonal work.
Status - each step 1 to 5 is straightforward, though may take some time. Step 1 can be implemented very quickly and I will do it when I get a bit of free time (two days would be plenty and it may only take a few hours). Step 6. may be easy depending on how easy it is to implement using the Creative SDK.
Multi-touch playing for the virtual keyboards
Update: This is now a feature of the beta of Tune Smithy 4.5, and also a feature of the mouse theremin too.
Update: This is already programmed in Bounce Metronome 4.3, though it needs further refinement and testing. It will surely be a feature of the next major update of Tune Smithy to version 4.x whenever I manage to do it.
I.e. the screen of your computer or laptop would be touch sensitive, and you'd be able to play the on-screen virtual keyboard using two or more fingers at once to play polyphonic music.
I should be able to make this available soon after the release of Windows 7 some time in 2009. It should be easy to program and unlikely to introduce new bugs. See: Multi-touch polyphony and Windows 7
Support for the Sagittal microtonal notation system
The programming for this is nearly finished, but the remaining work to do is still tricky and requires a lot of thought and concentration to get it right, and it isn't quite right yet. So it has been left out of the release, it works in the beta but it's not yet bug free and reliable and there were some questions about the details of how it should be implemented that needed thought as well. This is something I can return to with the next update of Tune Smithy to version 4.x when it is ready.
This is a very versatile microtonal notation, suitable for just intonation, and scales with many notes to an octave etc. Support for it in FTS is already mostly coded for. But it needs to be tested and debugged and updated.
Because of the complexity of the coding, and the risk of adding new bugs to the program if I enable it, then I've postponed the release of it until the next beta / release cycle. I hoped to release it earlier, but have had too many things to do after the release of FTS 3.0, which still needs work adding extra help and fixing things and improving the user interface, and it no longer seems a good idea to introduce such a major new feature before the next beta / release.
If the wishes are easy to do I'll do them right away for Bounce Metronome Pro. But Tune Smithy 3.2 is in BETA at present, so can only add them to the beta until the 3.2 release some time in perhaps spring or summer 2010. Most features in Bounce Metronome Pro will automatically get included in the 3.2 release for Tune Smithy.
So, see also: Bounce Metronome Pro Wish List
See also the Wish list forum
Add Midi Time Code and SMPTE to help with midi sync
Background to this - at present Tune Smithy uses midi clocks. This is a rudimentary form of time sync in midi - the master just sends a series of "ticks" and the slave listens to those and works out the tempo from the spacing of the ticks - so if the ticks speed up, it speeds up to match.
This works, after a fashion, but it has limitations.
Most midi apps nowadays rely on Midi Time Code for sync. So it would be good to add that to Tune Smithy.
This needs more research on my part to find out how MTC and SMPTE work and how easy to add to FTS.
Status - don't know how easy or hard it is to do - needs more research on my part
Explorer style tree to browse the windows
You can explore the windows with a right click on the O icon organized by category. You can also see them all as a list in the Organize F2 window.
However would be great to have them all as a File tree, as for an Explorer file dialog, so you can expand nodes and see what's in them, maybe also click and drag them around and rename categories to organize them as you like.
It would also be good to add a search button, search for windows by name - or indeed, if it is possible, search for controls within the windows by name, and have a list of them all, again a bit like a files list explorer or start menu search button.
This is all technically possible. The programming is a little tricky as I haven't done much programming of explorer style trees so far - there's a standard control you can add but with the low level programming I do, it's a little tricky populating it and using it. But I've done that coding before and could do it again. Some day will be nice to give this a go.
Status - technically possible, not sure how long it would take to do
Add export in midi format 1 with track names
UPDATE: I have just added an option to Bounce Metronome to export a separate midi file for each part in the rhythm. Will add this to Tune Smithy in the near future. See discussion here:
At present the default is to export in midi format 0.
The idea behind this wish is to add track names such as the part number, instrument etc. to each of the parts in the export to midi. This requires midi format 1.
As it is right now the midi format 1 feature in Tune Smithy doesn't work at all. I am going to do an update removing it temporarily until the issue is fixed.
It is possible to code this though, it would take a few days work.
One issue though is that unless you play in twelve equal, each part is likely to send its notes to several channels, also the same channel may be shared by several parts.
I could split up the midi file so that each track contains only the notes from one of the parts in Tune Smithy. But each track would then have notes played in several different midi channels.
This could actually be a benefit if the program importing the midi is able to play each track on logically separate "midi devices" each with its own pitch bends. If that is possible it opens up the possibility of exporting the midi even as a full orchestral score with all the instruments each with their own stereo pan and other controllers, and pitch bends with as much "pitch polyphony" away from twelve equal as you like.
Another option is to do it so each track contains only the notes for one of the midi channels - so split by channels rather than by parts.
Add a Lissajous Mode option to the oscilloscope
The idea here is - the present oscilloscope shows the waveform in the left and right channels of a stereo recording as separate waves one below the other.
For a Lissajous mode, would do so the left channel moves a dot up / down and right channel moves it left / right and the oscilloscope shows the resulting curve traced.
So then when the sound is a pure sine wave you'll get the classical Lissajous curve. When it is another wave though including e.g. triangle wave, you'll get another shape.
So would show the actual Lissajous patterns for the sound waves played on the speakers rather than the theoretical Lissajous pattern using the fundamental frequencies of the notes played only.
So - could be an interesting option to add. Should be fairly easy to do I think. You could also do it so that the pattern gets shown in the Lissajous window instead of the oscilloscope.
Hard to say how well it will work until I try it out, but worth a try some time.
Status - easy to do, a few days work at most probably, will have to try it out to see what it is like
Add support for translation into other languages including Chinese
First, I've already done it for this wiki in form of auto translate with the drop list at the top of each page. That includes the tool tips since they are listed here under "All Windows". So the challenge is, can you do that in the user interface as well - e.g. label all the buttons with Chinese characters (say).
Also is there any way to let users provide their own translations of the wiki, or user interface elements into their own languages?
Here will focus on the user interface.
This involves a fair amount of work because the software needs to:
- Display and read text in unicode, which is needed for Chinese characters.
- Extract the text from the program so that it can be translated.
- The whole thing needs to be made user friendly so that a translator can do the translations easily.
It is feasible however, I have already done it with Activity Timer. It took me quite a few months to do however, and that's a much smaller program. Tune Smithy has many other software features and so it is a matter of whether any of them is hard to combine with unicode in their current form.
On the plus side, I can probably re-use a lot of the code I developed for Activity Timer.
I will need to code separately for:
- The buttons, menus and user interface
- Messages to the user.
- Tool tips and help.
- Text in the visual graphics e.g. tempo dial for tempo names
- Add capability to use unicode characters in file names e.g. for saved projects
At a very rough guess maybe 2 months of work - possibly less if it goes quickly. The file name support is technically harder to achieve so if I do that as well that would double the estimate. And can't really tell until I set down to it, may go faster or more slowly than that.
The thing is the program is written in low level C using single byte characters throughout. To get it still to work in unicode, if I tried to convert all the code to unicode throughout it would require radical re-writing and many new bugs.
So what I would do, as in Activity Timer, is to add an extra "translation layer" on top of the existing code. This converts the unicode entered by the user into a mixture of ordinary text and "escaped characters" for the unicode, similar to the way spaces and other characters are often handled in urls in a web browser. The program then works with that just as it does with other ordinary text, as ordinary ascii text. Then when it needs to display to the user, the translation layer converts this back into unicode again.
This is a very good way to do it as far as bugs are concerned because the "translation layer" works independently from the rest of the program so you don't need to do massive changes in the architecture. So shouldn't introduce new bugs. And I can continue to debug the program as an ascii program as well, and everything is saved as ascii and so on.
But the translation layer itself requires a fair bit of work to set up. Once finished, it is done, and I can continue to program as before in ascii, and leave the translation layer to "auto magically" make it also work in unicode.
Extracting the text from the program is automated by a tool I wrote that does that and replaces all strings in the program by a numbered list of resource strings in a transparent way easy to use by both translators and programmer, and updates easily if I add new text to the program. So again that is easy to use once done but will take a bit of work to integrate it into the program and get it working properly.
Status - Almost certainly Feasible but involves a lot of work
File | Save As | Audio (WAV, MP3 etc.)
- easy to do after update to 3.2, using the Audacity plug in to convert midi to wav - which you can already do in Bounce Metronome Pro (with any sound font bank)
Status - EASY AND FEASIBLE
Show Lissajous pattern for a chord played via microphone in real time, to help with tuning
You could do this but the problem is that the analysis will require at least a fraction of a second of the recording to have enough data to do an accurate analysis. I think this delay between the tuning adjustments and the change in the Lissajous pattern would make it hard to use in practice.
Tune Smithy is able to find the frequency for some instruments accurately using remarkably short time slices for monophonic lines but the techniques it uses won't work so well for chords.
May give it a go some time as an experiment, just to see how it goes, can't say for sure until then, but preliminary assessment is I think it is unlikely to work, with the techniques used in FTS at present, sorry.
Status - PROBABLY HARD TO DO THIS IN REAL TIME
Add option to start and stop play when screen saver starts and stop or when Windows starts up
Easy to do when I release the next version.
Enter list of notes to play as numerical position from start of rhythm
Bounce Metronome and the FTS 4.5 beta already have the option to set the beats to skip as 1s, to play as 0s.
But what if you want to play a sequence of notes, treating it as timings? E.g. this sequence: A258024 in the OEIS:
1, 4, 23, 26, 45, 48, 67, 70, 89, 92, 105, 111, 114, 121, 127, 133, 136, 143, 149, 155, 158, 171, 177, 180, 183, 193, 199, 202, 205, 215, 221, 224, 227, 243, 246, 249, 265, 268, 271, 290, 293, 300, 312, 315, 334, 337, 344, 356, 359, 378, 381, 400, 403, 422, 425, 444, 447, 460, 466, 469, 476, 482, 488, 491, 498, 504, 510, 513, 526, 532, 535, 538, 548, 554, 557, 560, 570, 576, 579, 582, 598, 601, 604, 620, 623, 626, 645, 648, 655, 667, 670
You want to play the 1st beat, 4th beat, 23rd beat, 26th beat, 45th beat etc. And leave all the others silent.
Well there is no easy way to do it yet. You'd need to make a long sequence of 0s and set the 1st, 4th, 23rd etc in the sequence to 1, and then put that into Bounce or Tune Smithy.
For a programmer, it would be easy enough to write a short program to convert the one format into the other to use in Tune Smithy.
But I could also add an option to show played and skipped notes in this format, and let you enter them in this format. I'll look into this.
This is a question I was asked in a comment to one of my Science20 articles by Veikko Pohjola.
Status - programming looks easy - should be possible
Get seeds for the fractal tunes from a midi file
What you can do already is to play the seed from your music keyboard. Also using a virtual cable you can play a midi file in another program e.g. a midi player or sequencer or composition software and route the notes to one of the New Seed (Ctrl + 3) windows in FTS. For more details see the tool tip help for the Edit radio button in New Seed (Ctrl + 3).
The idea here is to add an option to FTS to open a midi file to get the seed from it directly. May be most useful for midi files with short monophonic melodies.
I'm not sure how useful it would be for polyphony. If the idea of recording polyphonic seeds as you play was explored one could do that. Also another idea to explore here is to take the notes from separate midi channels in the midi file and put them into successive layers in Seeds for Layers (Ctrl + 31). Note that FTS wouldn't normally play the seeds synchronised as they were in the original. Generally not sure how useful it would turn out to be to get polyphonic seeds or multiple seeds from a midi file -but it could be explored at least.
Another related idea one could perhaps explore is to see if one can get the chord progressions automatically from a midi file to make a tune with the same chord progression - and perhaps get seed fragments from motivic phrases in the file. This is getting more like "hand waving" and I'm not sure how easy it is or how it would go. The idea would be to e.g. make something like e.g. the example La Folia and GreenSleeves fractal tunes more automatically by opening a midi file for the original tune, and then you get the chord progression from it and maybe some motivic material as well, and transform it into a fractal tune based on the same chord progression.
I'll probably look into all this for the next beta / release cycle. If there is a lot of demand or it is easy to do then I may investigate it before then.
Record polyphonic seeds for fractal tunes as you play
The motivation behind this is that you can already make seeds with chords in them. In fact in Options for Seed, Arpeggio & Scale Play buttons (Ctrl + 28) there's an option to convert the chord, sequence or broken chord into a seed for the fractal tune.
This works by setting the sustain in Tempo and volume for fractal tune (Ctrl + 20) to the number of notes in the chord of most notes in the seed - and then whenever you want e.g. a two note chord, play it as a note with time duration 0, followed by one of normal duration. When the melody line plays a single note, you do the same, but set the volumes of the other notes in the chord to 0, so that they don't sound.
Since any polyphonic music can be broken up into two or more note chords with sustain, then this could play any polyphonic music as a seed - so long as you don't mind breaking up some of the longer notes into shorter notes. E.g. if a single note in one melody line is accompanied by two notes in the counterpoint, you have to break the single note into two identically pitched notes with different notes for the accompaniment.
So in principle with that restriction, you could record any polyphonic playing as a seed. It mightn't be that hard to program. Though how useful polyphonic seeds would be for the Tune Smithy sloth canons I don't know - maybe it would be most useful for simple phrases with a few chords.
I'll probably look into this for the next beta / release cycle.
You have to be a company to qualify as a rewire developer for legal reasons.
I don't think a sole trader counts as a company for their purposes. But I've just submitted a developer request in case it does count (December 2015).
There are no costs involved and they provide technical support.
Make the Tune as Score editable
This is one of those things that looks simple because it is easy to use. Unfortunately, the programming is very complex. I can't think of any easy way to attempt it myself - unlike e.g. text editing, then there's no standard windows component to just slot into your program. With a music score, you would have to write it yourself from scratch at a very low level.
It would be a great feature if it was easy to do. Unfortunately, unless some completely new approach is possible, e.g. someone releases a reusable music score component for anyone to use, it has to remain just a wish for now.
Add Klavarscribo option for the score
This is similar to the normal notation but goes down the screen vertically rather than horizontally, and with the lines drawn in a different place. Also has stems to left or right depending on which hand plays the notes.
This seems feasible on first thought, as the code is written in a way that makes it not that hard to change the locations of the lines, and changing it so it is vertical rather than horizontal also doesn't seem that hard to do.
However, until I try it, may well be some hidden "gotchas" to make it harder than it seems.
The score won't be editable (see previous wish) however in foreseeable future. Might be possible to read a midi file and convert into a Klavar score, no idea how easy or hard that would be (I mean, to do it properly with measure lines etc). Though as there is a program that already does that, most interesting if it can be made microtonal in some way.
Add Janko notation type option for the score
This is an idea by Johannes Drinda for a Janko type notation similar to Klavar but with the lines in a different place so that notes on the lines are played on the middle row of the Janko keyboard.
If I'm able to add the Klavar, should be easy enough to also add this Janko notation. Again would be good to make it microtonal - especially if used in conjunction with use of the PC keyboard as a four row Janko keyboard, as FTS can do - then if each row is tuned differently microtonally, would want to devise some way to indicate which row to play for that situation.
But would want it to fall back to the simpler notation in case where the notes are tuned to a twelve tone tuning with tone / semitone type steps.
Again might be reasonably easy to do, will only know for sure whenever I try it. Won't be editable. Might be possible to read a midi file and convert it to the notation, again, though issues might well arise doing that as well.
Play Direct Music Sound devices directly such as the Microsoft GS Wavetable Synth
Some time, if it is easy enough to do, I may add code to play DirectMusic devices directly in FTS, to avoid the fifth second latency - so that you can play it directly without the need to use DirectMusic producer. I've no idea yet about how easy or hard it will be to do.
Record to audio in Windows 7 and Vista
Tune Smithy can record directly to waveform audio in XP or earlier. This also works on any Vista or Windows 7 soundcards with a stereo mix feature - but many modern computers don't have this capability.
So if you have a modern computer you probably need to use another method. See How to record to Wav and Mp4 in Vista or Windows 7
I hope to add support for Windows 7 and Vista recording to FTS in the future some time. can be done and I've come across some documentation and sample code (forget where I saw it now).
Status - feasible, not sure how much work it involves
Polyrhythmic / Polytempi version of the multi-touch theremin
Idea is the rhythm depends on the pitch just as for the tune smithy lambdoma Lambdoma so as you move your fingers around continuously while playing the multi-touch theremin the rhythm for each finger would change as well, faster for higher pitched notes. And when they are in just intonation harmonies you'd get polyrhythms, otherwise polytempi. It would need programming from scratch, I wouldn't use the fractal rhythms code, but just write new timing code to handle the multi-touch theremin only.
Status - feasible
Split keys and 3D on screen keyboards
Idea is to do on-screen split key keyboards like the one for SCALA and also 3D keyboards like the ones for the CPS sets I did for Virtual Flower - but that one is only single touch.
Main thing is that now it could be multi-touch
It's all entirely feasible, but a fair bit of work and would be a matter of when I can find the time to work on it. By a fair amount of work, I'd imagine some weeks, maybe longer, of full time work, just very rough guess, lots of things to think about and would depend how each of those went.
Status - feasible
Make continuum versions of the keyboards for touch screens
Like this one: open source software version of the continuum keyboard for touch screens (I think just single touch from the video)
I could do it so it uses the channel volume controller for note volumes, plus pitch bends, similarly to Tune Smithy's "mouse theremin". Should be able to do it with multi-touch.
Status - feasible and probably fairly easy (as these things go)
Add option for keyboard regions for multiple midi in channels simultaneously
The idea here is, to take the keyboard region splits of Music keyboard regions (Ctrl + 26) and make them depend on the midi in channel.
The way to do it would be to have different copies of Music keyboard regions (Ctrl + 26) for each of the midi in channels, - maybe say at the top of the window show which channel it is, optionally maybe also permit several midi channels using the same window.
Would also have an option to use it for all midi in channels which would be the default and same as it is now.