aylet, xaylet - play Spectrum `.ay' music files
aylet/xaylet [-BehlmnNsS] [-A stopafter]
[-F fadetime] [-t tracknum] [file1
[file2 ... ]]
aylet plays music files in the `.ay' format. These files are essentially
wrappers around bits of Z80 code which play music on the Sinclair ZX Spectrum
128's sound hardware - the beeper, or the AY-3-8912 sound chip, or both. Files
using the Amstrad CPC ports are also supported.
`aylet' has a curses-based interface, and `xaylet' has an X-based
The way aylet works may seem a little strange if you're not familiar with how
the `.ay' format goes about things, so here's some background on how it all
- set stop-after time in seconds (this is the time at which tracks start
fading out), or 0 to disable fading. The default is 180 seconds (3
- use `ABC' stereo positions, rather than the default `ACB'. ACB effectively
pushes channels A and B to the left and right (using a stereo delay), with
C remaining central; ABC puts A and C to the left/right instead, leaving B
- force 8-bit playback, even if 16-bit is available.
- set fade-out time in seconds (the time tracks take to fade out). The
default is 10 seconds.
- give terse usage help.
- list the contents of files (track names etc.) rather than playing
- use mono rather than the default stereo playback.
- rather than the usual interface, use a simple batch-playing tty style, a
bit like mpg123. (Only works in the curses version.)
- use `narrow' stereo separation (so the channels sound closer together)
rather than the default `wide' separation.
- output sample data to stdout rather than playing it; implies `-n'. The
sample is 44.1kHz 16-bit stereo (or mono if using `-m'). Don't be
surprised if the sample takes a little while to generate, as it still has
to emulate the Z80.
- apply a pseudo-stereo effect to the beeper output. Works well in some
cases, but can make things sound a bit shaky (or rather, more so than
- play only the specified track, then exit. (Strictly speaking, it starts
playing the given track, and exits when any track fades out.) Mainly
useful when playing a single file non-interactively.
- file1 etc.
- the file(s) to play. Currently these can only be specified on the
As mentioned above, the files basically contain chunks of machine
code to run on an emulated Z80 with certain sound hardware. Since you're
just running a program, you can't really fast-forward or rewind as such, but
you can move between tracks specified in the file. (Some files only have
one, but others have several.)
The whole just-running-a-program thing leads to two other
problems, too. You can't tell where a track ends, other than to see when the
sound stops; what aylet does is to exit a track after 4 seconds of total
silence. And a track may never end at all; aylet fades it out after 3
minutes by default. (Yes, 3 minutes be may too soon to allow some tracks to
`finish', but you have to strike the balance somewhere, and it's only a
default. Use `-A' or press `s' to change it.)
Both the curses-based and X-based interfaces use these keys (some of which are
based on those used by XMMS):
- q or Esc
- exit the program.
- previous track.
- next track.
- restart track.
- Backspace or Delete
- previous file.
- next file.
- increase stop-after time.
- decrease stop-after time. Setting it to zero disables fading
- increase fade-out time.
- decrease fade-out time.
- enable/disable high-speed mode, playing four times as fast when enabled
(in a way), as a sort of substitute for a real fast-forward control.
In xaylet, you can also use the matching buttons for most of the
When using `aylet -n', the interactivity is scaled down
dramatically, leaving just the one control:
- if the current track has been playing for less than half a second, exit
the program; otherwise, skip to the next track.
Note that the key used to do this is really whatever you have set
up to generate a SIGINT signal, but it's generally Ctrl-C.
To play all .ay files in the current directory:
To convert ysfollin.ay to a mono sample in .wav format (requires
aylet -sm ysfollin.ay |sox -r 44100 -t sw - tune.wav
The AY is probably too loud relative to the beeper. This may be fixed in the
next version, though it's more likely to be an option to choose between the
current more reasonable balance and the real thing. :-)
Several options which it could reasonably allow to be changed at
runtime (e.g. AY stereo, beeper stereo, ACB vs. ABC) can't be at the
The X version is currently a bit too much like the curses one, at
the expense of GUIness in some respects.
Russell Marks (email@example.com).
The Z80 emulation was written by Ian Collier, for xz80.
Chris Cox wrote the OpenBSD sound code.
Matan Ziv-Av was partly responsible for the OSS sound code.