Jump to content
IGNORED

IMDI - A MIDI interface for the Intellivision / ECS


Recommended Posts

There seems to have been some interest in ECS projects recently, so I thought I might share something I've been working on:

 



IMDI (Intellivision Music Digital Interface) is a prototype of a combined MIDI interface and Intellivision cartridge. It turns the Master Component / ECS combo into a MIDI instrument. It came about as a result of a converstion with Paul Nurminen of the Intellivisionaries.

Currently IMDI runs a modified version JoeZ's Simple Synthesizer for the ECS. This version can take input from either the ECS synthesizer keyboard or a MIDI source and use it to drive the six voices of the ECS.

When using a MIDI source, the note velocity is used to set the output volume, making the ECS touch sensitive for the first time. The sound of the Simple Synthesizer has also been sexed up a bit with the addition of a little vibrato and decay.

The next step is to replace Joe's Simple Synthesizer with something a little more comprehensive, in an effort to see whether the ECS could have competed with the square wave keyboards of the mid 80s, such as the Yamaha PSS-130 or PSS-160:



For those that are interested the micro-controller used is the Teensy 3.2. I used their MIDI interface design, but not their software library as it upsets the timing of the cartridge interface.

As always, thanks to Joe and Paul for their help. All comments are most welcome.

 

 

Cheers

 

decle

 

  • Like 11
Link to comment
Share on other sites

Fantastic (and impressively quick) work, Decle! I realize this is a very niche Intellivision project in an already niche group of Inty enthusiasts, but I for one am excited by the unique musical possibilities of adding the ECS to my MIDI keyboard and synth rig.

 

 

 

 

Sent from my Keyboard Component using Jack's Conversational Intelli-talk cassette

  • Like 4
Link to comment
Share on other sites

The timing on your work is pretty interesting. I think that there is a Chiptune get-together in the UK fairly soon. It would be interesting for the folks there to see what you've done!

 

Check out these Twitter posts and the associated Tweets

 

 

https://twitter.com/IntvPrime/status/993227346994921473

 

https://twitter.com/IntvPrime/status/992908249518231552

 

 

 

 

 

 

There seems to have been some interest in ECS projects recently, so I thought I might share some[snip]

As always, thanks to Joe and Paul for their help. All comments are most welcome.

 

 

Cheers

 

decle

 

  • Like 2
Link to comment
Share on other sites

Very nifty!

 

BTW, I should note that decle's work also spotted a bug that crept into the assembler at the end of the year last year. It's a 1-liner fix, and I hope to push out a new release Monday.

 

One of my longer term goals (and I'm happy if someone beat me to it) was to add some sort of modular-synth style effects programming to Simple Synth. And then that got distracted by LTO Flash. Since that has a serial port, I was able to do my experiments w/ modulation directly on a PC via the serial interface, downloading parameters from a C++ program. Great in my lab, but not as universal and integrated with a music setup as MIDI, nor as friendly.

  • Like 3
Link to comment
Share on other sites

Amazing work! Several of us here have been advocating for new ECS and Music Synthesizer work for a while so thank you for taking the time to create something new and impressive. The more things are created for the ECS and Synth the less niche they will be.

  • Like 1
Link to comment
Share on other sites

There seems to have been some interest in ECS projects recently, so I thought I might share something I've been working on:

 

 

IMDI (Intellivision Music Digital Interface) is a prototype of a combined MIDI interface and Intellivision cartridge. It turns the Master Component / ECS combo into a MIDI instrument. It came about as a result of a converstion with Paul Nurminen of the Intellivisionaries.

 

Currently IMDI runs a modified version JoeZ's Simple Synthesizer for the ECS. This version can take input from either the ECS synthesizer keyboard or a MIDI source and use it to drive the six voices of the ECS.

 

When using a MIDI source, the note velocity is used to set the output volume, making the ECS touch sensitive for the first time. The sound of the Simple Synthesizer has also been sexed up a bit with the addition of a little vibrato and decay.

 

The next step is to replace Joe's Simple Synthesizer with something a little more comprehensive, in an effort to see whether the ECS could have competed with the square wave keyboards of the mid 80s, such as the Yamaha PSS-130 or PSS-160:

 

 

For those that are interested the micro-controller used is the Teensy 3.2. I used their MIDI interface design, but not their software library as it upsets the timing of the cartridge interface.

 

As always, thanks to Joe and Paul for their help. All comments are most welcome.

 

 

Cheers

 

decle

 

 

Hi, decle,

 

Fantastic work! As someone who misspent his youth playing with old ARP and Moog analogue synths and lived on an unhealthy diet of 1970s and 1980s Electronic/Synth-Pop music, I always find these sort of projects fascinating.

 

Like intvnut, making a sophisticated synthesizer program for the Intellivision is in my ever-growing Gort Excursion List (a.k.a. "Things I'd like to do when the Earth stands still.") Unfortunately, being slower and less talented than most of you (not to mention, possessing an exceedingly high mastery of procrastination -- seriously, it's my super-power!), I'll probably never get to do it, so it's great to see others working on similar concepts. :)

 

One thing Paul and I had discussed in the past which you may want to consider for your own synth project is the use of the Intellivision disc controllers as rotating dials to modulate the signal of various patches, such as the frequency of LFOs, etc. I think it should be possible to measure the angular velocity of a spin of the disc as the thumb slides over it by sampling its position, measuring it against its previous one, and applying some simple heuristics. Then, it's a matter of translating this into a stream of values to the modulator. I haven't gotten around to try my theories yet, but I am confident it shouldn't be too hard.

 

Anyway, I think it would be neat to use the Intellivision discs as control surfaces for analogue-sounding modulation effects. :)

 

-dZ.

Edited by DZ-Jay
  • Like 3
Link to comment
Share on other sites

  • 3 weeks later...
  • 2 months later...

A few pictures of IMDI v0 #1:

 

post-46336-0-01729800-1532808279.png

 

post-46336-0-49490500-1532808287_thumb.png

 

post-46336-0-71817600-1532808290.png

 

post-46336-0-01096600-1532808294_thumb.png

 

post-46336-0-24031100-1532808303_thumb.png

 

post-46336-0-77136800-1532808309_thumb.png

As I hope to illustrate in due course, it turns out that IMDI has uses beyond MIDI. :)

Wow - awesome. It has six channels right? Is there a noise channel?


Yes, the combined Intellivision and ECS has 6 square wave "tone" voices and two semi-dependent white noise channels.

Meaning, could you get it to play some existing Midi tunes or are there not enough voices? Would love to see it play some old PC game stuff!


Yes, you can get the Intellivision to play existing MIDI tunes and typically 6 voices can give a reasonable rendition. For example:



You don't need IMDI to do this. Popcorn runs on a standard Intellivsion, with optional ECS, and was constructed from an internet sourced MIDI file using the MusoCheat toolset*:

It should be noted that, because the AY-3-891x only supports square wave output, it is not as flexible as Commodore's SID, which can vary its pulse duty cycle and also generate triangle and sawtooth waves. At the moment the definition of "instruments" within MusoCheat is even more limited (noise channels are not supported and you can only specify a rate of amplitude decay). As a consequence, everything tends to sound a bit "plinky-plonk", but if you go for faster tunes it sounds OK. I hope to upgrade this as part of the work to construct a more comprehensive synthesizer for IMDI.

Speaking of which, I really must stop procrastinating and start work on replacement for Joe's Simple Synthesizer.


Cheers

decle



*Of course MusoCheat is not the first MIDI to Intellivision converter. Whilst working for INTV Dave Warhol wrote one:

"By the late 1980s, most music synthesizers could output files compatible with the MIDI standard. Dave wrote a translator to turn MIDI files directly into Intellivision music code. Its first use was on Steve Ettinger's game Deep Pockets: Super Pro Pool & Billiards. George Sanger, commissioned to provide music for the game, selected blues pianist Jimmy Martin to improvise this piece on a MIDI keyboard. Dave's translator turned the MIDI output into Intellivision code that perfectly captured Jimmy's live performance, and in a fraction of the time it would have taken to program by hand.

Unfortunately, INTV closed its doors in 1991 without releasing Deep Pockets. No other music was translated from MIDI to Intellivision."


I must remember to add this tid-bit to the next Development Tools Doc update.

I also suspect that JoeZ might have used a MIDI converter when putting together his "Song Player" titles in 1999.
  • Like 4
Link to comment
Share on other sites

I also suspect that JoeZ might have used a MIDI converter when putting together his "Song Player" titles in 1999.

 

No reason to suspect. I did exactly that, by tweaking PlayMidi to output note events, and then running it through some code I had initially developed for 4-Tris. My converter output specialized records that were ready-to-load in the PSG, as opposed to interpreting MIDI events on the Intellivision, though. I didn't have a sense yet how many cycles I really had to work with so I opted to preprocess as much as I could off-line.

 

Another beneficial side effect of the process is that it made it easy to "channel steal" for sound effects, by blocking writes to certain registers with a simple bitmap.

 

Now to go beef up Simple Synth with some nice effects. :-)

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...
  • 4 months later...

Hi decle!

 

Please forgive me if I've overlooked it. Is there a link to this product to purchase it? Is it just a "build your own" kind of thing? I have an original Inty II Synth, but having MIDI capabilities to hook up my much newer controller would be very cool.

 

Amazing work you've done on this!

 

Thanks,

Blaine

Link to comment
Share on other sites

  • 2 months later...

Hey guys,

For the past six months I've been distracted by other projects and this thread has been neglected.

However, recently I have had a chance to put a bit of work into the first stage of sINThY, the software synthesizer for IMDI:

This attempts to follow the principles of some of the low end analogue synths such as the Korg Monotron or Volca Keys (before you get your hopes up, I think the lack of a VCF to control the fundamental waveform limits what can be done). If you fancy giving it a go for yourself here is the ROM, along with a keyboard hack file that makes things much easier when using JzIntv:

 

sinthy-20190411.zip

As a non-musician, I'd be very interested in feedback from the musos out there. I feel as though I'm struggling to come up with "interesting" modulations.


Cheers

decle

  • Like 3
Link to comment
Share on other sites

Hi decle!

 

sINThY is really coming along nicely. I think the idea of trading some of the polyphony voices for the chance to add to the richness of the sound is a neat idea. It would kind of be like the analog synths that use more than one oscillator to produce unique sounds. I don't have a better name for it, but I call it the "dirty synth" sound. It's where more than one oscillator is used out of tune and sawtoothed to create a very strong, rich sound. Might be difficult with the Inty because things come out natively as square waves. Something to look into, at least.

 

I think your work on sINThY is amazing, as is all of your work in the Inty realm. Thanks for what you do!

 

- Blaine

  • Like 1
Link to comment
Share on other sites

It's extremely difficult to generate modulations on the AY-3-8914.

 

So far I've found certain tricks to achieve this.

 

One of these is to play with the volume to get a kind of different instruments using only a single channel.

 

There are two tools available for playing with a single channel:

 

1. Moving the volume.

2. Moving the frequency.

 

Typically a piano attacks, decays and sustain. I need to resort to explaining with code examples:

 

 

    ;
    ; Generates a bass
    ;
_bass_instrument:    PROC
    SLL R3,2    ; Lower 2 octaves
    ADDI #_bass_volume,R1
    MVI@ R1,R1    ; Bass effect
    IF DEFINED intybasic_music_volume
    B _global_volume
    ELSE
    JR R5
    ENDI
    ENDP

_bass_volume:    PROC
    DECLE 12,13,14,14,13,12,12,12
    DECLE 11,11,12,12,11,11,12,12
    DECLE 11,11,12,12,11,11,12,12
    ENDP

    ;
    ; Generates a piano
    ; R3 = Frequency
    ; R1 = Waveform position
    ;
    ; Output:
    ; R3 = Frequency.
    ; R1 = Volume.
    ;
_piano_instrument:    PROC
    ADDI #_piano_volume,R1
    MVI@ R1,R1
    IF DEFINED intybasic_music_volume
    B _global_volume
    ELSE
    JR R5
    ENDI
    ENDP

_piano_volume:    PROC
    DECLE 14,13,13,12,12,11,11,10
    DECLE 10,9,9,8,8,7,7,6
    DECLE 6,6,7,7,6,6,5,5
    ENDP

    ;
    ; Generate a clarinet
    ; R3 = Frequency
    ; R1 = Waveform position
    ;
    ; Output:
    ; R3 = Frequency
    ; R1 = Volume
    ;
_clarinet_instrument:    PROC
    ADDI #_clarinet_vibrato,R1
    ADD@ R1,R3
    CLRC
    RRC R3,1    ; Duplicates frequency
    ADCR R3
    ADDI #_clarinet_volume-_clarinet_vibrato,R1
    MVI@ R1,R1
    IF DEFINED intybasic_music_volume
    B _global_volume
    ELSE
    JR R5
    ENDI
    ENDP

_clarinet_vibrato:    PROC
    DECLE 0,0,0,0
    DECLE -2,-4,-2,0
    DECLE 2,4,2,0
    DECLE -2,-4,-2,0
    DECLE 2,4,2,0
    DECLE -2,-4,-2,0
    ENDP

_clarinet_volume:    PROC
    DECLE 13,14,14,13,13,12,12,12
    DECLE 11,11,11,11,12,12,12,12
    DECLE 11,11,11,11,12,12,12,12
    ENDP

    ;
    ; Generates a flute
    ; R3 = Frequency
    ; R1 = Waveform position
    ;
    ; Output:
    ; R3 = Frequency
    ; R1 = Volume
    ;
_flute_instrument:    PROC
    ADDI #_flute_vibrato,R1
    ADD@ R1,R3
    ADDI #_flute_volume-_flute_vibrato,R1
    MVI@ R1,R1
    IF DEFINED intybasic_music_volume
    B _global_volume
    ELSE
    JR R5
    ENDI
    ENDP

_flute_vibrato:    PROC
    DECLE 0,0,0,0
    DECLE 0,1,2,1
    DECLE 0,1,2,1
    DECLE 0,1,2,1
    DECLE 0,1,2,1
    DECLE 0,1,2,1
    ENDP
        
_flute_volume:    PROC
    DECLE 10,12,13,13,12,12,12,12
    DECLE 11,11,11,11,10,10,10,10
    DECLE 11,11,11,11,10,10,10,10
    ENDP

 

Notice how each instrument has a waveshape using only the volume (the first 8 are the attack always in my player), the next 16 are the sustain phase. There is no decay phase, the player only mutes the channel.

 

The clarinet instrument duplicates frequency to get another sound, the bass instrument lowers frequency by two octaves, while the flute instrument applies a kind of vibrato to frequency.

 

Also it's limited to the frequency of video update.

 

Still there are things that can be applied to generate surprising things like arpeggios (going upward with each key) or portamento (moving the frequency to the next key pressed)

 

The way to get disco-like sounds is using the frequency of envelope and envelope shape (the envelope shape generates NES-like triangular shapes!!!). To align it with the playing frequency, you need to divide the note value by 8, 16 or 32 and round, but this doesn't align perfectly except for some carefully choosen bass notes.

 

Moving the frequency of envelope by a few values can get some incredible sounds of distortion.

 

Here is a good example of using the envelope for the bass.

 

https://www.youtube.com/watch?v=9GqGjuj4mNA

 

Sorry for my lenghty post but I had to write it before losing the inspiration, I would like to add some examples but I'm out of time. :grin:

  • Like 2
Link to comment
Share on other sites

It's extremely difficult to generate modulations on the AY-3-8914.

 

[...]

 

The clarinet instrument duplicates frequency to get another sound, the bass instrument lowers frequency by two octaves, while the flute instrument applies a kind of vibrato to frequency.

 

 

If you grab a copy of Carl Mueller's Sound Test, it can be instructive to watch the volume bars for each of the notes to reverse engineer some of the instruments. It's also interesting to note that the main target volume is fairly low, to leave a lot of headroom for percussive elements and note attack.

 

On the flute in particular, the vibrato doesn't start right away. Rather, it starts something like a half-second into the note so that it only kicks in on sustained notes. So it's not just how much vibrato, but also when.

  • Like 2
Link to comment
Share on other sites

 

If you grab a copy of Carl Mueller's Sound Test, it can be instructive to watch the volume bars for each of the notes to reverse engineer some of the instruments. It's also interesting to note that the main target volume is fairly low, to leave a lot of headroom for percussive elements and note attack.

 

Thanks for the tip. :)

 

On the flute in particular, the vibrato doesn't start right away. Rather, it starts something like a half-second into the note so that it only kicks in on sustained notes. So it's not just how much vibrato, but also when.

Yep, this is a cuasi-flute because I needed to make it different from the simple square wave and most songs play with speed of 7 to 10 with short notes.

 

So the vibrato wouldn't be seen never.

 

BTW talking about instruments, Kai Videogames also made his own instruments with the IntyBASIC player, it can be heard in Ninja Odyssey and TNT Cowboy videos.

  • Like 2
Link to comment
Share on other sites

Hey Guys,

Thanks for all your thoughts, pointers and examples. It is much appreciated. I hope that I can put together something that will enable the construction of "instruments" as rich as these, whilst still being accessible to musicians and programmers.

So it looks as though most of the other AY-3-841x work takes a more "sample" based approach than I have. Instruments seem to be defined as a sequence of volume and pitch variations that are blasted as the PSG. Taking the IntyBASIC implementation as an example, the instruments are defined using 24 volume and optionally 24 pitch samples:

 

post-46336-0-18674400-1555151389.png post-46336-0-46595900-1555151388.png

Although Oscar describes the first 8 samples as being "attack" and last 16 as "sustain", by my reading of the code it might be better to describe the first 16 samples as being the "setup" and the final 8 as the "loop", to use Arduino terms. The first phase is a one-shot and, if reached, the second is repeated until the note finishes. I've separated the two phases in the plots above.

The IntyBASIC implementation is also really useful in highlighting a couple of differences in how sINThY is implemented.

The most obvious is that the sINThY "instrument" definition is abstracted into 10 values, rather than 24 or 48 samples. I hoped the result is more intuitive to musicians, but it comes at the cost of some flexibility in what can be generated. So, the obvious question, is this more intuitive route and is the loss of flexibility a price worth paying? Or should I be using the more common sample based approach to define envelopes?

Next, if we look at the way in which IntyBASIC handles pitch vibrato we see that the amount of period change is constant with the pitch of the note. This means that vibrato is stronger at high notes than low notes, most clearly heard on the clarinet, for example in the extreme:

    DATA     60
    MUSIC    C2X
    MUSIC    S
    MUSIC    -
    MUSIC    C7
    MUSIC    S
    MUSIC    -
    MUSIC    REPEAT

Because sINThY allows greater change in pitch than the native IntyBASIC instruments (up to +/- 2 tones), more work has gone into keeping this change constant across the range of notes played, although I'm still not happy with the results. Am I correct to try to manage the change in pitch in this way?

 

Currently the pitch change is a nasty mathematical adjustment of the period value. This leads to the waveforms being musically asymmetric and not necessarily peaking at chromatic tones. It might be better to calculate nearest periods for all the eighth-tones as we currently do for semi-tones and make the pitch shift of a whole number of these. So a triangle wave of amplitude 8 would start at the note played, go up a full tone then down to a full tone below the note played and return, with each change in frequency being an eighth-tone. What do you think, would this be more "musical" and make more sense to a musician?

Finally, we have the handling of volume, somewhere I think the way sINThY is implemented might make things easier. Because sINThY has to handle velocity sensitive input it treats loudness as an attenuation from a loud baseline, rather than volume relative to silence. This makes it easy to apply volume envelopes to the quieter input without them becoming silent early, and therefore, shortening notes. The only downside at the moment seems to be that the "sustain" parameter has the opposite sense to that normally used (being the attenuation from the maximum attack rather than the volume of the sustain phase).

As always, your thoughts, opinons and experience would be much appreciated.


Cheers

decle

Edited by decle
  • Like 2
Link to comment
Share on other sites

decle, this is some awesome work. I've mentally kicked around the idea of doing a similar project, but you've already gone further with IMDI than I would have.

 

Some questions for you:

 

1. Have you looked into using the CC3's serial port as an alternative to the IMDI hardware? The serial port's baud rate is very configurable on the CC3 so MIDI's baud rate should be easy. A small amount of external hardware would still be necessary to adapt the CC3's voltage levels to MIDI voltages. The biggest problem with using a CC3 is that these days they are expensive on eBay.

 

2. Have you looked into a table-driven sine wave as an alternative to the triangle wave? Maybe it will give a slightly different effect.

Link to comment
Share on other sites

  • 1 year later...

I just caught up with this thread (it's been in my reading list for while), so pardon the belated response.

 

On 4/13/2019 at 7:09 AM, decle said:

Hey Guys,

Thanks for all your thoughts, pointers and examples. It is much appreciated. I hope that I can put together something that will enable the construction of "instruments" as rich as these, whilst still being accessible to musicians and programmers.

So it looks as though most of the other AY-3-841x work takes a more "sample" based approach than I have. Instruments seem to be defined as a sequence of volume and pitch variations that are blasted as the PSG. Taking the IntyBASIC implementation as an example, the instruments are defined using 24 volume and optionally 24 pitch samples

 

Arnauld's tracker is modelled after old-school microcomputer music software, like Fast Tracker, etc., in that it treats the musical score as a sequence of patterns, and each pattern is comprised of a set of events (i.e., tracker frames) occurring at periodic times.  This is similar to how "MIDI" format songs work.

 

The main difference between "MIDI" and "MOD" (i.e., module) trackers like Fast Tracker and Arnauld's, is that they also define a set of instruments.  In the case of classic modules, these were PCM samples; on the Intellivision, we use the PSG to synthesize the instruments.

 

There are two kinds of instruments supported in the Intellivision Music Tracker:  musical and drums.  The distinction is made mostly because the former relies on pitch and amplitude modulation, and plays at discrete semi-tones on the chromatic scale; while the latter are treated more like sound effects, where you can assign arbitrary frequencies, mix in noise, and control the parameters of each on each tracker frame.

 

MUSICAL INSTRUMENTS:

Musical instruments are a combination of an envelope, and pitch and volume modulation parameters.

 

Envelope:

Instead of using the common 4-stage "ADSR" envelope, the tracker offers a 64-point description of the volume changes over time.  Each point represents the volume assigned to a sound channel at a given frame in the length of a note.  You can visualize it as a graph of the changes in volume over time, for instance:

        ATTACK         DECAY                                SUSTAIN                                           RELEASE
      .--------|---------------------|-------------------------------------------------------|---------------------------------------|
   F -|. . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
   E -|. . . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
   D -|. . . . # . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
   C -|. . . . # . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
   B -|. . . # . . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
V  A -|. . . # . . . . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O  9 -|. . . # . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . .
L  8 -|. . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . .
U  7 -|. . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . .
M  6 -|. . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . .
E  5 -|. . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . .
   4 -|. . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . .
   3 -|. # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . . . . .
   2 -|. # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . . .
   1 -|# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # . . . . . . .
   0  `+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------
       | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
       1 3 7 B F E E D D C C B B A A 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 7 5 4 3 3 2 2 2 1 1 1 1 1 0 0 0 0 0 0 0

 

The speed of the envelope can be controlled by configuring the number of points to process per frame.  You can select from 1 (every frame) to 4 (every fourth frame); essentially quantizing the envelope at various sampling rates.

 

Pitch Effects:

This is a four-step "arpeggiator," essentially functioning as a cheap LFO.  You can define the shape of the LFO by selecting how many half-tones to go up and down on each step.  These changes are then applied throughout the length of a note at the machine's display rate (e.g., NTSC=60Hz).

 

This is typically used for tremolo effect.  It can also be used for fast arpeggios, like is done in many 8-bit machines, although it's a bit limited with only 4 steps.

 

 

Vibrato:

The vibrato offers only a single parameter, letting you select the amplitude of the effect's modulation relative to the playback volume of the channel.  You can choose from no vibrato, high (+/- 1 amplitude), medium (+/- 1/2 amplitude), and low (+/- 1/4 amplitude).  The vibrato is also applied at the machine's display rate throughout the length of a note, although it runs through 8 steps, in a pseudo-triangle shape.

 

It turns out that these simple configurations, which simplify the implementation greatly, afford an exceedingly impressive amount of expression in the way the instruments are synthesized.

 

 

---

 

If I were to change anything on Arnauld's tracker, it would be support for more complex shaping of the modulation effects.  I like being able to "draw" the envelope of a note as a graph, which is how we always visualized ADSR in the past anyway.  I always wished I could do the same for arpeggios and vibrato.

 

To simplify usage, these could all be abstracted with a set of macros, where you could give a set of parameters (ADSR values perhaps?) to each ones and pre-calculating the values table from that.  This would allow you to shape the tremolo and vibrato with another envelope, following the common "patching" paths used in old analog synths.

 

Another feature I would add would be to parametized the frequency of the modulation, rather than having it always play at the same speed.

 

To be honest, much of the complexity in using Arnauld's tracker lies in understanding the song data format.  However, this could be abstracted with even more macros (or converted from other song formats) to simplify the interface.

 

Quote

...
 

Because sINThY allows greater change in pitch than the native IntyBASIC instruments (up to +/- 2 tones), more work has gone into keeping this change constant across the range of notes played, although I'm still not happy with the results. Am I correct to try to manage the change in pitch in this way?

 

Yes.  The way that the Intellivision Music Tracker handles this is by using a look-up table of pre-calculated amplitude values for modulation, tuned to each semi-tone (actually 30% of each semi-tone).

 

This follows the way that instruments sound in real life.

 

Quote

Currently the pitch change is a nasty mathematical adjustment of the period value. This leads to the waveforms being musically asymmetric and not necessarily peaking at chromatic tones. It might be better to calculate nearest periods for all the eighth-tones as we currently do for semi-tones and make the pitch shift of a whole number of these. So a triangle wave of amplitude 8 would start at the note played, go up a full tone then down to a full tone below the note played and return, with each change in frequency being an eighth-tone. What do you think, would this be more "musical" and make more sense to a musician?

 

 

For what it's worth, that's similar to the way Arnauld devised his vibrato effect:  the amplitude change per semi-tone is pre-calculated in a table to be ~30% of the note's pitch, then that value is scaled in a ramp to 1/4, 1/2, and 1/1, then back down again, to shape the modulation.

 

 

---

 

All that said, there's yet another option you may want to explore, and it's the way some modern(ish) 8-bit music trackers for chiptunes have been implemented.  Take a look at one called GoatTracker.  On its surface, it appears to be absurdly strange and complicated, but upon deeper inspection, it is basically the same as the other "event-based" trackers, except that it's fully programmable using a specialized "scripting language."

 

Basically, similar to Arnauld's tracker, each channel is given a series of "note events" specifying the note, volume, instrument, and various other parameters.  Then, in addition to that, you can specify on any event a call to a small "program" where you treat the sound device's parameters as variables, and can alter them directly over time, using counters, etc. to simulate LFOs.

 

You can chain a few of these "programs," where one modulates the next, simulating the "patches" of an old school synths that alter the signal as it passes through various components.

 

The beauty of this is that the "built-in" features themselves (envelopes, instruments, pitch/amplitude modulation, arpeggiators, etc.) are all implemented in this programmatic way, giving you full flexibility to alter them.

 

It's a rather neat idea.  I see it as a low-level virtual machine implementing the driver for each oscillator, with the tracker and instrument being a high-level application implemented on top of it.

 

Once again, the complexity can be abstracted with a high-level interface (either programmatic or user), in a similar fashion to the way that a high-level language abstracts the low-level machine code.

 

Anyway ... off to dream some more. :)

     -dZ.

  • Like 3
Link to comment
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...