From here: https://spectrumcomputing.co.uk/forums/ … p?p=116985
https://github.com/breakintoprogram/archive-follin

I used to work at Software Creations with the Follin brothers, and we've kept in touch since. A year or so ago Tim gave me a box of 3" disks with music source code on, authored on a Tatung Einstein. It's taken me up until now to get my act together, and have finally started copying the files to PC and dumping them on GitHub with their blessing. There's a mixture of Spectrum/Amstrad AY and SID stuff on here, in assembly language. Enjoy.

AgentX II converted to SjASM format here: https://www.dropbox.com/s/aseo2tznvgm6k … M.zip?dl=1

Edit: The Agent X 2 source is in Disk05 Side B of the github archive.

2

(135 replies, posted in Sinclair)

utz wrote:

Cooking up some new stuff. Seems like I've got phase distortion synthesis working. Not entirely sure if I got the maths correct, but it sounds interesting at least.

Sounds best when at lower frequencies. Maybe fine tune it to mimic a low frequency EQ filter, like what the SID can do.

3

(10 replies, posted in Sinclair)

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.

4

(10 replies, posted in Sinclair)

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.

5

(10 replies, posted in Sinclair)

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.

6

(10 replies, posted in Sinclair)

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,

7

(10 replies, posted in Sinclair)

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.

8

(10 replies, posted in Sinclair)

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.

9

(20 replies, posted in Sinclair)

I've just recently been looking for simple 2 channel engine with decay, for some in-game music, in a very simple game.

Been trying to cut QChan down to 2 channels, no drums, might be what I need. Small player and small music data.

Having been away from speccy and coding for some years, I'm a bit rusty at this. And I've never written sound routines before, just used what's available. Currently going through QChan with debugger to document the code so I know exactly what's going on.

Edit: Just seen utz tutorial on writing a routine, so I'm going to do that instead. Cheers utz, very helpful that...

10

(25 replies, posted in Sinclair)

I've no idea if it will be possible to combine SID + AY yet.  The only doc at the moment is this : http://www.specnext.com/turbo-sound-next/

I'm sure lots of work would need to be done to use z80 to control the SID.  Maybe the z80 SID emulator people can help with this.

The SID was never controlled by the interrupt when I played with it.  And it had analog filters.  Not sure how the SpecNext is going to support that without adding a capacitor/resistor network for the filters.  It'd be rubbish in software.

11

(25 replies, posted in Sinclair)

utz wrote:

The Lyndon Sharp is active? I've been trying to get in touch with the man for ages, to no avail.

Lyndon Sharp goes by the name Nodalmighty on the SpecNext forums.

He just quoted one of my posts here: http://www.specnext.com/forum/viewtopic … 0d7b#p1780

12

(22 replies, posted in Sinclair)

Lots of HF noise, the border stripes visualize the noise.  Does masking the border bits add much time to the routine?

13

(13 replies, posted in Sinclair)

utz wrote:

In case of doombass, perhaps FrankT could help unlock the extra drums? He's done quite a bit of patching in the Beepola code, so he might have an idea where the relevant parameter for the limit of drums is hidden. Frank, where are you man?

I'm here.  Been working on other non speccy stuff.

I don't have any idea about how to get Beepola to export drums above what's available for SFX engine.
The way I'd do it is make a binary song data to assembly listing converter in C.  Providing drums above 5 are written in the binary.  Like I did for converting bbsong's to Vortex Tracker text format.

14

(21 replies, posted in Sinclair)

utz wrote:

Thanks, awesome! Uhhm... what do those asterisks in your table mean?
Also, how about a meta patcher tool for Beepola that allows you to set your own configurations for note tables, speed values? That would basically open up a whole new range of possibilities for people who are into drone music, microtonal stuff etc...

The asterisks are the original beepola tempo's, 20 to 14.  Now on 14 to 8, to allow for at least 4x speed.

So if you have a song at tempo 19, patch beepola with the 19 to 13 patch, and reduce your song tempo by 6.  It will be the same speed as before, but now you have option to add 4x speed effects.
The only problem left really is the limit of 126 pattern length.

I've written loaders and patchers in C before, also bbsong to vortex tracker text converter.  Just don't have much time at the moment.

Wonder if there would be a chance for beeper engines being added to WyzTracker?  It already has everything there, even for note tables.  Also has nice feature for using scales, you can select key and scale types/modes/triads, which highlight the notes for making up your arpeggios.

15

(21 replies, posted in Sinclair)

I've made 7 new patches.  They're based on the original tempos from 20 to 14.
They're divisable between 3/4 and 4/4, 4/4 and 3/4 time signatures.  And allow for at least 4x speed increase for doing super fast effects.

https://dl.dropboxusercontent.com/u/949 … atches.zip

                          500.56  473.62  350.14  287.02  276.28  243.19  266.31
  Ticks Per Row  Beepola  20to14  19to13  18to12  17to11  16to10   15to9   14to8
              1       20     370     377     419     455     463     491     471
   1.3333333333       19     408     417     474     522     532     570     542
            1.5       18     427     437     501     555     566     609     578
              2       17     485     497     583     655     670     726     685
   2.6666666667       16     561     578     692     787     808     883     829
              3       15     599     618     746     854     877     961     900
              4       14     713*    739     909    1053    1084    1197    1115
   5.3333333333       13     865     900*   1127    1319    1360    1510    1401
              6       12     942     980    1236*   1452    1498    1667    1544
              8       11    1170    1222    1563    1850*   1912    2137    1974
  10.6666666667       10    1475    1544    1998    2381    2464*   2764    2547
             12        9    1627    1705    2216    2647    2740    3078*   2833
             16        8    2084    2188    2869    3444    3568    4019    3692*
  21.3333333333        7    2693    2832    3740    4507    4672    5273    4837
             24        6    2998    3154    4176    5038    5224    5900    5410
             32        5    3912    4120    5483    6632    6880    7781    7128
  42.6666666667        4    5131    5408    7225    8757    9088   10290    9419
             48        3    5740    6052    8096    9820   10192   11544   10564
             64        2    7568    7984   10709   13008   13504   15307   14000
  85.3333333333        1   10005   10560   14194   17259   17920   20324   18581

Using ZXTune now, why are the timings so different to AY_Emul?  When using the same timings in both programs, ZXTune and AY_Emul, they have 4 seconds difference on a 3 minute tune.

If CPU and AY speed was read, there wouldn't be a need to provide a time/length for the tune.  It could be calculated how long the tune plays for.

The only thing I need to know is what speed CPU/AY is used on the website.  So I can put the correct time in the AY header.  So the tunes play for the correct length on the website.

I did a google search for Pentagon timings, but only found different AY timings for Timex.  I have the different timings for 48k/128k models, but not uncontended.  If I knew the magic numbers, I could just calculate the length myself for the AY header.

Edit:  Or, allow looping of songs with a fade timeout.  AY players do loop correctly, regardless of the time entered in the AY header.

I've just converted a few tracks to .ay and uploaded them.

I spent some time getting the length correct, using AY-Emul to test.  However, after uploading, all the tracks play for a couple of seconds longer.

19

(25 replies, posted in Sinclair)

The only details at the moment is Audio AY-3-8912 or FM2149 chips (selectable) with stereo output.

Einar Saukas posted some details here, he's in contact with the author Victor Trucco:
http://www.worldofspectrum.org/forums/discussion/52606

20

(21 replies, posted in Sinclair)

Here are the new patches.  Just patch Beepola with whatever tempo range you want.

There's a new example TempoTest.bbsong included.

Edit:  Added the SpecialFX note table patch.

21

(21 replies, posted in Sinclair)

The 1.75, 3.5 and 7 ticks per row are redundant.  So I'm removing them.  These will be the final tempo's.  It allows to change from 8, 12, 16, 24, 32, 48, 64, 96 etc.

                       118.4 177.6 236.8
 Ticks Per Row Beepola            
             1      20   739   578   498
          1.25      19   860   659   558
   1.333333333      18   900   685   578
           1.5      17   981   739   618
   1.666666666      16  1061   793   659
             2      15  1222   900   739
           2.5      14  1464  1061   860
   2.666666666      13  1544  1115   900
             3      12  1705  1222   981
   3.333333333      11  1866  1329  1061
             4      10  2188  1544  1222
             5       9  2671  1866  1464
   5.333333333       8  2832  1973  1544
             6       7  3154  2188  1705
   6.666666666       6  3476  2403  1866
             8       5  4120  2832  2188
            10       4  5086  3476  2671
  10.666666666       3  5408  3691  2832
            12       2  6052  4120  3154
  13.333333333       1  6696  4550  3476

I'll redo the patches today.  And release the files to patch Beepola, instead of the actual Beepola.exe's.

22

(21 replies, posted in Sinclair)

Just updated the archive, patched both Tritone tempo fixes with the new SFX frequency table.  Same link as before.

Beepola New Tritone Tempos + New SFX Frequency Table

I've added an example TempoTest.bbsong, just a few bars of the same drum beat at pattern lengths of 8, 12, 16, 24, 32, 48 and 64.  With Beepola tempo's of 2, 6, 8, 12, 14, 18 and 20.  Just to show it stays in time when changing pattern length/tempo.

It's in the archive and here.
TempoTest.bbsong

23

(21 replies, posted in Sinclair)

I've just patched the SpecialFX frequency table.

The one you found was just for Beepola playback, compiling a tap, bin, or source listing and it reverted to the old note table.

For compiling, the SpecialFX engine builds from source which is stored as a Unicode text string at around #22BE20 in Beepola.exe.  I patched the text, and now it compiles with the new frequency table.

Going to make a patcher, so I can easily apply it to my already patched tritone tempo fixes.

I'm having a similar problem with the Tritone engine.  I wanted to patch the engine to remove the extraneous out instruction after the soundloop, before the key detection, that causes clicking at high speeds.  I can patch the Beepola playback, but on compiling the out ($fe),a is still there.

24

(25 replies, posted in Sinclair)

It's going to have AY and FM sound, switchable from a boot screen.  Cool.

And you can plug real hardware into it.  It has a fully capable edge connector.

Simulates all Sinclair, Amstrad, Timex models, and Jupiter Ace too.

I want one.  But it may be too expensive for me.  Probably around £180.

25

(21 replies, posted in Sinclair)

I've changed the ticks per rows a bit, and made 2 patches.  One normal speeds but with divisable tempo's, and the other for superfast songs.

                        118.4 177.6
Ticks Per Row  Beepola
            1       20   739   578
         1.25       19   860   659
  1.333333333       18   900   685
          1.5       17   981   739
  1.666666666       16  1061   793
         1.75       15  1101   820
            2       14  1222   900
          2.5       13  1464  1061
  2.666666666       12  1544  1115
            3       11  1705  1222
  3.333333333       10  1866  1329
          3.5        9  1947  1383
            4        8  2188  1544
            5        7  2671  1866
  5.333333333        6  2832  1973
            6        5  3154  2188
  6.666666666        4  3476  2403
            7        3  3637  2510
            8        2  4120  2832
           10        1  5086  3476

Beepola New Tritone Tempos