Beepola Help

Contents

Introduction

Keyboard commands

Beeper Engines

Compiling Songs

Ripping Songs

*.bbsong file format

Credits

 

Special FX Beeper Engine

This engine provides two melody channels, each with individual sustain data, plus a third percussion channel with four available drum sounds.

Notes entered in channel 2 are rendered slightly louder than those entered in channel 1.

The sustain setting for a given channel affects the rate of decay for all notes on that channel until a different sustain setting is encountered. A sustain setting of '1' causes notes to decay to near-silence very quickly, while higher sustain values cause the notes to ring for longer. With very high sustain values, notes effectively remain at a constant volume until the next note in sequence is played.

Independent sustain values can be set for each channel, and can appear as frequently as required within a pattern. The sustain values from the previous pattern are carried over into the next pattern during playback. Each sustain value increases the size of the final pattern data by 2 bytes.

A feature of the Special FX engine is that melody and percussion patterns are stored separately. This means that a repeating drum pattern is only stored once in the compiled song, even when it is used alongside different melody data.

The song compiler is smart enough to automatically recognise duplicate melody and drum patterns and only includes a single copy of any duplicated pattern in the final output.

A song may contain up to 127 unique patterns, and each pattern may contain up to 126 notes per channel. The tempo and length of each pattern may be set individually

The lowest valid note value is F#1 and the highest is A-5.

Useful POKEs/Addresses
24 bytes into the player routine, there is a LD HL,nn instruction which points to the start of the song data. Therefore, to select a different song to play:-

10 LET PlayerAddr = 60000
20 LET SongAddr = 61000
30 POKE PlayerAddr + 25,SongAddr - 256 * INT(SongAddr /2 56)
40 POKE PlayerAddr + 26,INT(SongAddr / 256)