Jump to content
decle

MusoCheat - Adequate Inty music for non-musicians

Recommended Posts

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.gz

The 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

Black and White Rag

Popcorn

Maple Leaf Rag

Sorcerer's Apprentice

Bad Apple

 

As always, all feedback, good, bad or indifferent is most welcome.


Cheers

decle

Edited by decle
  • Like 10

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

I'm pretty surprised by how you made a swiss-army knife of tools for MIDI conversion and it sounds amazingly well.

 

Well done! :thumbsup:

Share this post


Link to post
Share on other sites

I'm pretty surprised by how you made a swiss-army knife of tools for MIDI conversion and it sounds amazingly well.

 

Well done! :thumbsup:

 

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

 

  • Like 4

Share this post


Link to post
Share on other sites

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

  • Like 2

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

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

  • Like 4

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
Share on other sites

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! :)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...