1 (edited by FrankT 2020-12-13 10:59:50)

Topic: TwinCh engine demo

I cut QChan down to 2 channels, also removed the pattern decay/sustains, it's always max sustain.

Need to fine tune the frequency table, adjusting so lowest note is loud enough.

I've had to adjust channel 2 volume (melody) by half, so bass notes can be heard.

The player reads QChan song data, skipping channels 3 and 4 data.
It's 244 bytes currently (without frequency table). Will be 236 bytes without skipping channel 3 and 4 data.

I need to write a routine to re-write the QChan pattern data to just 2 channels. So song patterns will be half size, and adjust pattern tempos, it plays almost double speed.

I was going to call it BitCh smile

Cheers.

Post's attachments

TwinCH_demo.tap 3.05 kb, 7 downloads since 2020-12-13 

You don't have the permssions to download the attachments of this post.

Re: TwinCh engine demo

Next thing I want to try is a vibrato and/or portamento. Maybe also a way of having some arpeggio presets for major/minor/7th/9th chords etc.

Re: TwinCh engine demo

great :-)

But ... it probably doesn't beat your amazing productions on Tritone.
(I look forward to the next ... when? When?)

4 (edited by FrankT 2020-12-13 13:01:12)

Re: TwinCh engine demo

Here's another demo, I saved one of my Tritone songs with QChan in Beepola. I just swapped channel 3 melody/chords with channel 1. No editing of the song, just saved it out.  Some notes are out of range and errors happen near end of song.

And of course no vibrato/pitch bends yet, I'm working on that now, using channel 3 for channel 2 note pitch adjustments.

Also, it can play about double the speed of Tritone, so it should be able to do some super fast arpeggio's and create some cool sounds at its fastest speed. Though song data will be huge,

Post's attachments

TwinCH_demo2.tap 16.6 kb, 6 downloads since 2020-12-13 

You don't have the permssions to download the attachments of this post.

Re: TwinCh engine demo

Wow sounds great.

Could've done with this when I was writing some jingles for my new game recently. I ended up using a qchan game over jingle which took 720 bytes and a few huby jingles (a few hundred bytes each).

So will the file size be halved once channel 3 & 4 data is removed (plus the engine) ?

6 (edited by FrankT 2020-12-13 15:12:55)

Re: TwinCh engine demo

AtariTufty wrote:

So will the file size be halved once channel 3 & 4 data is removed (plus the engine) ?

Yes, also if you make your patterns with no gaps it will get smaller (Beepola Edit Pattern shrink pattern/2), just play at slower tempo.

I'm saving a version for small data/player. And making a new version which has vibrato/pitch bend for channel 2 notes. I've moved channel 2 to channel 3. Channel 2 column will contain pitch bend adjustments for channel 3. So it will be about 2/3rds the size song data of QChan.

Edit: Or with lots of editing to how the player reads song data, songs could get MUCH smaller. Similar to how the SpecialFX engine does it. Each row will get bigger, but the length of the pattern will get much smaller. And having loops for bass lines and drums will shrink it further. Player will get much bigger but songs will be tiny compared to now.

Edit2: I transposed Eve Redux down an octave and rebuilt the frequency table up an octave. The demo2 now plays all the notes. All the notes are in the same range as Tritone. Updated tap attached.

Post's attachments

TwinCH_demo2.tap 16.6 kb, 3 downloads since 2020-12-13 

You don't have the permssions to download the attachments of this post.

Re: TwinCh engine demo

Wow, these sound really good.

What's your idea regarding a new song data format? Sure, 16K is pretty big yikes I think generally it's not necessary for beeper data to be super optimized, though. Usually things compresses quite well with common compressors (zx7, apack, etc).

8 (edited by FrankT 2020-12-14 16:18:05)

Re: TwinCh engine demo

utz wrote:

What's your idea regarding a new song data format? Sure, 16K is pretty big yikes I think generally it's not necessary for beeper data to be super optimized, though. Usually things compresses quite well with common compressors (zx7, apack, etc).

Using a bit of music theory for how to read patterns/songs. And being a bit "creative" with its use. Time signature format can give how many rows in bar/pattern, and timing of each note. For example:

; Time signatures
;  2/4 = 2 crotchets = 1 bar
;  3/4 = 3 crotchets = 1 bar
;  4/4 = 4 crotchets = 1 bar
;  5/4 = 5 crotchets = 1 bar
;  6/8 = 6 quavers = 1 bar
; 12/8 = 12 quavers = 1 bar

; Note lengths
; semibreve              = 1
; minim                  = 2
; crotchet               = 4     ; 1/4 note
; quaver                 = 8     ; 1/8 note
; semiquaver             = 16    ; 1/16 note
; demisemiquaver         = 32
; hemidemisemiquaver     = 64
; semihemidemisemiquaver = 128

Can write in song data something like:

Tempo:          defb 120        ; beats per minute
Sequence:       defw Verse      ; pattern sequence
                defw Chorus     ; pattern sequence
                defw Middle8
                defw 0          ; end marker
Verse:          defb 4          ; number of bars
                defw bar1, bar2, bar1, bar3
bar1:           defb 4          ; 4 * 1/4 notes (like time sig 4/4)
                defb A1,
                defb C2,
                defb D2,
                defb E2
bar1_ch2:       defb 8          ; 8 * 1/8 notes
                defb A4
                defb G4
                defb E4
                defb G4
                defb A4
                defb C4
                defb A3
                defb B3
bar2:   ; etc

So patterns no longer have long columns of 0's wasting space.

I also have an idea for making variations (mood changes), and key changes, to whole tune or just sections, without needing to write any new patterns. I'll show how that's done later. Using modes.

9 (edited by FrankT 2020-12-14 17:22:36)

Re: TwinCh engine demo

Altering the mood of your song or patterns.

Mood is changed by what "mode" your music is written in. Seven distinct moods/feelings, from godly/ethereal/ambient (Lydian), down to pure evil (Locrian).

This is the table of modes in order of feeling/mood:

; Modes                Intervals
;                    1 2 3 4 5 6 7
Lydian:         defb 0,2,4,6,7,9,11
Ionian:         defb 0,2,4,5,7,9,11
Mixolydian:     defb 0,2,4,5,7,9,10
Dorian:         defb 0,2,3,5,7,9,10
Aeolian:        defb 0,2,3,5,7,8,10
Phrygian:       defb 0,1,3,5,7,8,10
Locrian:        defb 0,1,3,5,6,8,10

You can use this table to adjust the "spelling" of the scales to change moods. Ionian is the standard Major scale, Aeolian is the standard Minor scale. Lydian, Ionian and Mixolydian are Major scales. Dorian, Aeolian and Phrygian are Minor scales. Locrian is known as the half-diminished scale. It has what's called the "satanic" interval banned by the Christian monks, the flatted 5th.

Mixolydian is what most "happy" blues uses. Dorian is for "jazzy". Phrygian is "Spanish/flamenco", lots of heavy metal uses it also. There are lots of other non standard modes like Phrygian Dominant, which has a Major 3rd, the 3rd interval raised one semi-tone, the standard Flamenco/Spanish scale, 0,1,4,5,6,8,10.

The table can be extended to 13 intervals for the spellings of all known chords. Standard chords are just the 1st, 3rd and 5th intervals. But there are also 7th, 9th, 11th, 13th chords in both Major and Minor flavors. This would be useful for having ornament presets.

Re: TwinCh engine demo

If you'll go the Nth/note with time signatures route, it will be not possible to properly support in tracker-alike editors (I had to replace such formats in some classic engines in 1tracker). Many also consider this format to be difficult to write by hand. So while it may have its own benefits, it dooms the format to never gain popularity.

website - 1bit music - other music - youtube - bandcamp - patreon (latest news there)

11

Re: TwinCh engine demo

I think the approach is interesting. It could indeed produce very compact data. In theory Bintracker could support such a format (though at this point it's still missing various required bits here and there). The interface would not reflect the data structure at all though. It'd still be just a normal tracker interface and then conversion to the actual format would be done by the compiler/optimizer. I even have reasonably accurate scale/mood recognition working, though it's just a very simple proof-of-concept at this point.

One problem I see though is that this format optimizes for a certain style of writing the music. Someone who doesn't care about time signature and/or mood might not benefit from size savings as much. Then again, the chance that someone is going to write dubsteb with that thing isn't that high I guess.