Jump to content
DZ-Jay

Adding Portamento/Glissando To Intellivision Music Tracker

Recommended Posts

Posted (edited)

I am considering adding a glissando or portamento effect to the Intellivision Music Tracker, and I would like to know how this sort of thing has been implemented in other trackers.  Can anybody provide any details on how it works in any other tool they've used in the past?

 

Any guidance or suggestions would be greatly appreciated.

 

    -dZ.

Edited by DZ-Jay

Share this post


Link to post
Share on other sites

One game's soundtrack that put portamento to a lot of use is Tyrian for PC.  You should be able to fetch the modtracker files and plug it into the modtracker player of your choice and study it there.

Share this post


Link to post
Share on other sites
Posted (edited)
1 hour ago, Zendocon said:

One game's soundtrack that put portamento to a lot of use is Tyrian for PC.  You should be able to fetch the modtracker files and plug it into the modtracker player of your choice and study it there.

Well, I am more interested in how MOD trackers implement portamento or glissando.  I've seen in FastTracker II and MilkyTracker that there are effect commands for Portamento Up, Portamento Down, Glissando, etc. and each takes a numeric argument; but it is not clear to me what the argument represents or how it's used, other than to adjust the pitch on every tick.

 

I guess if the musician is willing to compute the pitch differences between two semi-tones on a function over the time interval between the two note events, then we could just take that value and add it on every tick.  However, it seems like an insanely complex burden to put on the musician.
 

I also do not know if the glissando is expected to reach its target pitch (i.e., the next semi-tone) by the time the next event occurs, which means that the tracker would need a look-ahead feature to compute the increment per tick.

 

That's the thing, I don't even know if I am over-thinking this!  That's why I hope to see how it has been done before.

 

I thought perhaps others with experience writing chiptunes or MODs could offer some insight.

 

    dZ.

Edited by DZ-Jay

Share this post


Link to post
Share on other sites

I'm certainly not a veteran Amiga composer, but it had always been my guess that there was a starting pitch, ending pitch, and duration.

 

The reason I say that is while I was still playing Tyrian on my 486, I had added a Wave Blaster II board to my Sound Blaster 16, and then tried reconfiguring all my DOS games to use General MIDI where available.  Tyrian ceased to play the portamento effect, and instead played the starting pitch at the beginning of where the effect took place, and the ending pitch at the midpoint and end.

Share this post


Link to post
Share on other sites
1 hour ago, Zendocon said:

I'm certainly not a veteran Amiga composer, but it had always been my guess that there was a starting pitch, ending pitch, and duration.

Thanks, that part I know.  The beginning and ending pitches, I think, are two consecutive note events.  The duration would be the number of ticks between them.

 

The problem I see is that, just computing that would be very expensive -- you will need to look ahead at the next note, divide the pitch difference by the number of ticks interval, and add the increment on every tick until the next event arrives.

 

That to me seems the most natural way, but it would be horribly costly.  My guess is that trackers do this differently, but I just do not know how.

 

Quote

The reason I say that is while I was still playing Tyrian on my 486, I had added a Wave Blaster II board to my Sound Blaster 16, and then tried reconfiguring all my DOS games to use General MIDI where available.  Tyrian ceased to play the portamento effect, and instead played the starting pitch at the beginning of where the effect took place, and the ending pitch at the midpoint and end.


I also see that FastTracker II supports treating the sweep as discrete semi-tone changes between the two notes, rather than a pitch bend.

 

I guess that implementing the transition on the new note (rather than from the previous one) could be cheaper, and we could just have a set of "speed" values for the increments to be added to the outgoing pitch, and then you just continue it until it reaches the target pitch -- however long it takes to do so.  I guess that could work.


An alternative would be to pre-process the computations in the data definition macros, so that it performs the look-ahead and calculation of the pitch increment.

 

    dZ.

Share this post


Link to post
Share on other sites
Posted (edited)

Classic SoundTracker/NoiseTracker and I believe ProTracker has two kinds of glissandos: effects 01xx and 02xx which slide the note upwards or downwards by a fixed amount (regardless of the next note) and effect 03xx which is calculated as a relative slide towards the next note.

 

Many years ago when I added features to my VIC-20 music tracker, I seem to recall that I implemented glissando as a look-ahead function that would look for the next note, take the frequency difference to the current note, divide it by number of ticks and get a delta how much to add/subtract from the current note. It though was a bit CPU intense so I removed that function from my very latest player routine, where I kept vibrato, arpeggio and a function to cut off notes ahead of their duration (which I picked up from somewhere it should be known as portamento, but I see now that is wrong nomenclature).

 

The type 01xx and 02xx form of glissando probably would be the easiest to do, as it is pretty much only one long vibrato except it never changes direction. I haven't analyzed the tracker syntax yet to make a suggestion exactly how to implement it though. Skilled musicians would probably be able to adjust the effect in order for notes to meet eachother, without the developer of the tracker software needing to supply that function. It would take a little more work when putting together the player but be quite a bit lighter on the CPU when executing the song.

Edited by carlsson

Share this post


Link to post
Share on other sites
11 minutes ago, carlsson said:

Classic SoundTracker/NoiseTracker and I believe ProTracker has two kinds of glissandos: effects 01xx and 02xx which slide the note upwards or downwards by a fixed amount (regardless of the next note) and effect 03xx which is calculated as a relative slide towards the next note.

 

Many years ago when I added features to my VIC-20 music tracker, I seem to recall that I implemented glissando as a look-ahead function that would look for the next note, take the frequency difference to the current note, divide it by number of ticks and get a delta how much to add/subtract from the current note. It though was a bit CPU intense so I removed that function from my very latest player routine, where I kept vibrato, arpeggio and a function to cut off notes ahead of their duration (which I picked up from somewhere it should be known as portamento, but I see now that is wrong nomenclature).

 

The type 01xx and 02xx form of glissando probably would be the easiest to do, as it is pretty much only one long vibrato except it never changes direction. I haven't analyzed the tracker syntax yet to make a suggestion exactly how to implement it though. Skilled musicians would probably be able to adjust the effect in order for notes to meet eachother, without the developer of the tracker software needing to supply that function. It would take a little more work when putting together the player but be quite a bit lighter on the CPU when executing the song.

Hi, @carlsson,

 

Thanks for the suggestion.  That seems to coincide with the "Portamento Up" (1xx) and "Portamento Down" (2xx) effects of MilkyTracker, although the manual calls the argument "portamento speed," which is what confused me.

 

The manual also mentions "Portamento To Note" (3xx), which bends the current playing note towards the new note (the effect command is added to the target note, so no look-ahead needed).


However, again, the argument is called "portamento speed," so it is still unclear to me how it would know what increment to add to the pitch -- unless it is assumed that the changes are always semi-tones ... ?
 

    dZ.

Share this post


Link to post
Share on other sites

Hm, it probably can be deduced either from additional documentation, reading source code or practical experimentation exactly which amount is added and how the speed relates to amount per frame.

Share this post


Link to post
Share on other sites
23 minutes ago, carlsson said:

Hm, it probably can be deduced either from additional documentation, reading source code or practical experimentation exactly which amount is added and how the speed relates to amount per frame.

You know what?  It's the same as you described before.  The explanation of the effects in the manual states that the higher the speed value, the faster it would go.

 

I guess that is another way of saying, the higher the pitch delta, the faster it will shift to a higher note.  Hence, it calls it "portamento speed."

 

Alright, so now I'm set!  I think I have enough information to implement the 1xx and 2xx commands.

 

I already found a way to enhance the data format to support any number of effects, while keeping backwards compatibility with the current format; so this will open the opportunities for all sorts of cool new features.


Thanks, guys!

    dZ.

  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)

Good news!  I'm well underway to implementing not only portamento, but an entire set of effects!

 

This new version of the Intellivision Music Tracker will support 7 different effects that can be applied to a channel on any given row.  As with other trackers of it's ilk, a channel can support only one effect at a time, but the effect is layered on top of the existing instrument synthesis, which includes vibrato, arpeggio, and volume envelope.

 

The seven effects are taken from the classic FastTracker II roster, they are:

  • Arpeggio
  • Portamento Up
  • Portamento Down
  • Portamento To Note
  • Vibrato
  • Volume Slide Up
  • Volume Slide Down
  • Tremolo

Plus, I figured out a way to do this within the confines of the existing data format, so we can keep backwards compatibility with any existing tracks.

 

I already have most of the effects implemented, although untested.  I also will try to micro-optimize the code as best as I can to keep it as lightweight was possible.  The goal is to make the Intellivision Music Tracker versatile and powerful, while still able to play along with an active game program (in Assembly or IntyBASIC) without dragging it down.


Stay tuned!  Exciting things are happening in the Intellivision music scene!

 

   dZ.

Edited by DZ-Jay
  • Like 3

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.
Note: Your post will require moderator approval before it will be visible.

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