decle Posted April 14, 2017 Share Posted April 14, 2017 (edited) Hey all,Need a tune for your Inty project, but you're not a muso? Join the club. MusoCheat is a set of tools to help take existing MIDI files, and potentially other formats, and get them into a format which the Inty can play. In tinkering with the PlayCable tunes I've extended and tidied up my MIDI to Intv bits and bobs to the point where they might be of interest / use to someone else. So here they are: musoCheat.tar.gzThe headlines: Convert source MIDI files into IntyBasic or the MusoCheat 6 voice music player format Profile MIDI source to identify tracks to capture Map one or more notes from any source track to Inty voices Extensible architecture to add more sources, transformations and target formats Here are a few examples:Music Box Dancer Source - http://www.angelfire.com/ut2/homelight/Musicbox.mid 3 voice IntyBasic - mcMusicBoxBasic.rom 3 voice IntyBasic source - mcMusicBoxBasic.bas 6 voice MusoCheat - mcMusicBoxAsm6.rom 3 voice MusoCheat - mcMusicBoxAsm3.rom Black and White Rag Source - http://www.trachtman.org/MIDI/Misc/blakwhit.mid 3 voice IntyBasic - mcBwRagBasic.rom 3 voice IntyBasic source - mcBwRagBasic.bas 6 voice MusoCheat - mcBwRagAsm6.rom 3 voice MusoCheat - mcBwRagAsm3.rom Popcorn Source - https://www.nonstop2k.com/midi-files/1669-crazy-frog-popcorn-midi.html 6 voice MusoCheat - mcPopcornAsm6.rom Maple Leaf Rag Source - http://www.trachtman.org/MIDI/Joplin/mapleaf.mid 6 voice MusoCheat - mcMapleLeafRagAsm6.rom Sorcerer's Apprentice Source - http://torbid.tljhome.com/midi/TheSorcerersApprentice.mid 6 voice MusoCheat - mcSorcererAsm6.rom Bad Apple Source - https://www.dropbox.com/s/k1skg7zg48lnkws/Alstroemeria%20Records%20-%20Bad%20Apple.mid 6 voice MusoCheat - mcBadAppleAsm6.rom As always, all feedback, good, bad or indifferent is most welcome.Cheersdecle Edited May 13, 2017 by decle 10 Quote Link to comment Share on other sites More sharing options...
decle Posted April 15, 2017 Author Share Posted April 15, 2017 Hey, I've found a problem where the IntyBasic renderer output was overflowing $6fff which made the resulting sample program unstable. I've changed this to place the music statements from $9000 up (it can still overflow at $c000, but seems to give 12K words of contiguous music space). A new version of the tools with this correction is at the top of thread. Cheers decle 1 Quote Link to comment Share on other sites More sharing options...
fsuinnc Posted April 15, 2017 Share Posted April 15, 2017 very nice. Thanks Quote Link to comment Share on other sites More sharing options...
+nanochess Posted April 15, 2017 Share Posted April 15, 2017 I'm pretty surprised by how you made a swiss-army knife of tools for MIDI conversion and it sounds amazingly well. Well done! Quote Link to comment Share on other sites More sharing options...
decle Posted April 19, 2017 Author Share Posted April 19, 2017 I'm pretty surprised by how you made a swiss-army knife of tools for MIDI conversion and it sounds amazingly well. Well done! Hi everyone, Thanks Oscar that is exactly what I was aiming at. As you might have guessed the IntyBasic output is a bit of a work in progress. In putting it together I have learned alot from Oscar for which I must thank him. You might notice that the very high notes at around 38 seconds in sound weird in IntyBasic, whereas they sound correct in the MusoCheat version. I've done a bit of investigation into this and I thought I might write it up as it illustrates what can be done by chaining the tools together and how they can be extended. It should be noted that this analysis has been done using the latest verision of the tools I have just uploaded. This lastest version changes the names and APIs of some of the tools, apologies for that. All tools now have a simple help which can be activated with the -h flag. Firstly it would be good to isolate this litle section of music to see what is going on. I've added a new tool to do this, filterTime.pl. So we can now grab the section from 36 to 40 seconds and render it as an IntyBasic song using: midicsv musicBox.mid | readMidi.pl 50 | filterTime.pl 36 40 | mapVoices.pl 3.H 2.H 4.H | renderBasic.pl tune.bas 1 Y Y Y Notice rather than using a wrapper script the various tools are just chained together with the output of one feeding the next. In the results sure enough the high notes are weird: mcMusicBoxBasicSnippetBroken.rom But if we capture the same section and render it as MusoCheat using: midicsv musicBox.mid | readMidi.pl 60 | filterTime.pl 36 40 | mapVoices.pl 3.H 2.H 4.H | mapVolume.pl 13 | renderMusoCheat.pl tune.asm tune.const 4 4 4 It sounds fine: mcMusicBoxAsmSnippet.rom OK, so perhaps we are missing some notes. What we need is some half sensible human readable form, perhaps a bit like a timeline. Lets write one: midicsv musicBox.mid | readMidi.pl 60 | filterTime.pl 36 40 | mapVoices.pl 3.H 2.H 4.H | mapVolume.pl 13 | renderHuman.pl tune.human Comparing this output with the tune.bas it all looks fine. Lets use profileNotes.pl to find which track has the high notes: midicsv musicBox.mid | readMidi.pl 60 | filterTime.pl 36 40 | profileNotes.pl Trk# Note# Conc timeMin timeMax vMin vMax vAve pMin pMax pAve 2 18 4 14 / 0.23 246 / 4.10 108 127 109 A5 C7 E6 3 26 4 0 / 0.00 266 / 4.43 108 108 108 F2 F4 A3 4 9 1 0 / 0.00 241 / 4.02 92 92 92 C2 C3 G2 TOT 53 1 0 / 0.00 266 / 4.43 92 127 105 C2 C7 F4 Looks like it is track 2 which has C7 in it. Lets confirm that by generating an IntyBasic program with only track 2 midicsv musicBox.mid | readMidi.pl 50 | filterTime.pl 36 40 | mapVoices.pl 2.H | renderBasic.pl tune.bas 1 Y Yes that still shows the problem: mcMusicBoxBasicSnippetSingleBroken.rom It looks as though there is an issue with IntyBasic playing C7. Talking to Oscar this is indeed the case, and it will be fixed in the next release of IntyBasic. OK that is a shame. Could we fix it somehow in the mean time? Well yes, if we had a transposition tool we could shift the tracks down a bit in pitch away from C7. How about: midicsv musicBox.mid | readMidi.pl 50 | filterTime.pl 36 40 | mapVoices.pl 3.H 2.H 4.H | transpose.pl m2 m2 m2 | renderBasic.pl tune.bas 2 Y Y Y This brings all voices down by 2 semi-tones and leads to much better results: mcMusicBoxBasicSnippetFixed.rom Here is the full track: mcMusicBoxBasicFixed.rom Hope this is helpful. Cheers decle 4 Quote Link to comment Share on other sites More sharing options...
+DZ-Jay Posted April 24, 2017 Share Posted April 24, 2017 Ha! Reminds me of a piece Der Luchs tracked for me for a Christmas demo I was making a few years ago. I never completed it, and the music needed some work, but it was not too bad. This particular version was based on a disco/techno version by DJ Schwede which I like very much. Der Luchs was kind enough to track it for me in a few hours using Arnauld's Tracker. Someday I'll complete that Christmas Demo and polish the song, but in the meantime, enjoy! -dZ. musicbox.rom 2 Quote Link to comment Share on other sites More sharing options...
First Spear Posted May 5, 2017 Share Posted May 5, 2017 This doesn't work running in my jzIntv environment with --jlp switch, but it plays like a champ without it. Why would that be? Awesome music work, by the way. Hi everyone,Thanks Oscar that is exactly what I was [snip] decle 1 Quote Link to comment Share on other sites More sharing options...
decle Posted May 5, 2017 Author Share Posted May 5, 2017 This doesn't work running in my jzIntv environment with --jlp switch, but it plays like a champ without it. Why would that be? Awesome music work, by the way. Hey, Thanks for giving MusoCheat a spin. I'm not a JLP expert, but it looks like by default it claims $8000-$9fff. Unfortunately the MusoCheat player puts the tune from $9000 up and the IntyBasic version has it running from $8040. There is a bit of a tradeoff between features, memory usage and tune size. Your options are: If your tune is small enough you can push it higher in memory (change ORG $9000 on line 217 of musoPlayer.asm or line 181 of renderBasic.pl. It looks like $A000 is the lowest compatible address for full JLP functionality). If you don't need JLP RAM and / or accelerator features disable them by writing $6A7A to location $8034 releasing this space to the program, as described in the JLP programmers manual here Hope this helps decle Quote Link to comment Share on other sites More sharing options...
decle Posted May 6, 2017 Author Share Posted May 6, 2017 This doesn't work running in my jzIntv environment with --jlp switch, but it plays like a champ without it. Why would that be? Awesome music work, by the way. Okie dokie, I've added tweaks to the sample players to disable the JLP RAM and accelerators as they are not needed. Everything has been rebuilt and uploaded at the top of thread and should now be JLP flag compatible in Jzintv. I have not bothered updating the diagnostic walkthrough at reply #5. Thanks for highlighting the problem. If you find anything else, or you have feature requests please let me know. decle 1 Quote Link to comment Share on other sites More sharing options...
decle Posted May 13, 2017 Author Share Posted May 13, 2017 As FirstSpear says, although it is probably not the most productive use of time, there is something strangely diverting about music played on the Inty. So, you will find some more examples of MIDIs converted to 6 voice Inty tunes at the top of thread. I've added: Popcorn Maple Leaf Rag The Sorcerer's Apprentice Bad Apple Enjoy decle 4 Quote Link to comment Share on other sites More sharing options...
tacrec Posted May 15, 2017 Share Posted May 15, 2017 Awww man I could have really used this years ago for my Astrosmash project. The best I could do was sample the Inty note and use it as a MIDI instrument. 1 Quote Link to comment Share on other sites More sharing options...
+nanochess Posted May 16, 2017 Share Posted May 16, 2017 As FirstSpear says, although it is probably not the most productive use of time, there is something strangely diverting about music played on the Inty. So, you will find some more examples of MIDIs converted to 6 voice Inty tunes at the top of thread. I've added: Popcorn Maple Leaf Rag The Sorcerer's Apprentice Bad Apple Enjoy decle This is really amazing! Quote Link to comment Share on other sites More sharing options...
+nanochess Posted May 16, 2017 Share Posted May 16, 2017 I had to make a video of Popcorn https://www.youtube.com/watch?v=zbDfhKyPtwI 1 Quote Link to comment Share on other sites More sharing options...
+nanochess Posted May 16, 2017 Share Posted May 16, 2017 Also made one of Maple Leaf Rag: https://www.youtube.com/watch?v=xQEZUiQc9MI Quote Link to comment Share on other sites More sharing options...
+DZ-Jay Posted May 25, 2017 Share Posted May 25, 2017 I had to make a video of Popcorn https://www.youtube.com/watch?v=zbDfhKyPtwI Very nice. A few comments: Some of the channels seem to be phasing each other out, especially the bass notes. This is very noticeable at around the 1:40 mark. I think the IntyBASIC music player could really use a per-note volume control to support a more sophisticated performance simulation. Also, please consider adding software envelopes. Some of those notes sound much too "chirpy," even for a "Popcorn" performance. I don't use IntyBASIC, so I do not know to what extent the above are already supported. If they are, then I encourage musicians to take advantage of them. It can change your song from just some teeny blips to glorious 8-bit chiptune. -dZ. Quote Link to comment Share on other sites More sharing options...
First Spear Posted June 11, 2017 Share Posted June 11, 2017 My understanding of IntyBASIC music is that per-note or per- voice volume control would incur a large amount of memory/DWORD overhead. I don't have the talent to change the source, so for my game effort I am coming up with composed songs that don't need it, or I switch instruments for different effect. Very nice. A few comments: Some of the channels seem to be phasing each other out, especially the bass notes. This is very noticeable at around the 1:40 mark. I think the IntyBASIC music player could really use a per-note volume control to support a more sophisticated performance simulation. Also, please consider adding software envelopes. Some of those notes sound much too "chirpy," even for a "Popcorn" performance. I don't use IntyBASIC, so I do not know to what extent the above are already supported. If they are, then I encourage musicians to take advantage of them. It can change your song from just some teeny blips to glorious 8-bit chiptune. -dZ. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.