table of contents
- Tumbleweed 20251011-1.1
- Leap-16.0
- Leap-15.6
bsvplay(1) | hxtools | bsvplay(1) |
Name¶
bsvplay — convert BASICA music data to PCM
Syntax¶
bsvplay [-i part] [-q part] [-r rate] [file...] | aplay -f dat -c 1
Description¶
bsvplay will convert BASICA binary music data to linear 16-bit raw PCM. Normally, you will be wanting to pipe it into a raw PCM player like aplay(1) to actually output it to a sound device. Consider lowring the system volume beforehand to avoid surprise loud output. Square waves contain odd harmonics and the total power is ~57% higher (1.95 dB). By default, bsvplay mix a square wave rendition with a sine wave rendition 1:1 to reduce the effect of odd harmonics and reduce the power.
Do note that the music data is embedded in BSV/EXE/COM files and needs to be manually located. It is usually very evident from a regular pattern in hexdumps.
Options¶
- -q part
- Part to mix square waves in (default: 1.0)
- -i part
- Part to mix sine waves in (default: 1.0). If -q2 -i1 is specified for example, the final PCM output will consist of 2/3*squarepcm + 1/3*sinpcm.
- -r rate
- PCM sample rate (default: 48000 Hz)
- --pianoman
- Assume the input is Pianoman MUS.
File format¶
The BASICA format is defined 6-byte tuples of divisor, duration and pause.
struct bsv_insn { uint16_t divisor; uint16_t duration; /* in ticks */ uint16_t af_pause; /* in ticks */ };
where divisor specifies the divisor value that it directly handed to the x86 PC speaker. The following formula holds:
frequency = 1193181 / divisor;
See also¶
2008-02-06 | hxtools |