aylet(1)

πŸ“¦ version 0.5, in ubuntu jammy

πŸ’Ώ aylet(1) β€” Music Software πŸ’Ώ

okay bestie, sit DOWN, because today we're talking about aylet and xaylet, two little icons from the Music Software section of your manual that play Spectrum .ay music files. no cap. πŸ’–


✨ NAME ✨

aylet, xaylet β€” play Spectrum .ay music files 🎡


🌸 SYNOPSIS 🌸

aylet/xaylet [-BehlmnNsS] [-A stopafter] [-F fadetime] [-t tracknum]
[file1 [file2 ... ]]

πŸ¦‹ DESCRIPTION πŸ¦‹

so aylet plays music files in the .ay format. and what ARE those, you ask? they're basically lil wrappers around bits of Z80 code that play music on the Sinclair ZX Spectrum 128's sound hardware β€” that's the beeper, or the AY-3-8912 sound chip, or honestly both at once, she contains multitudes. πŸ’… files using the Amstrad CPC ports are also supported, we're inclusive here.

aylet has a curses-based interface, and xaylet has an X-based one. two sisters, different aesthetics, same energy. ✨


πŸŽ€ OPTIONS πŸŽ€

  • -A β€” set stop-after time in seconds (that's the moment when tracks start fading out), or 0 to disable fading entirely. default is 180 seconds (3 minutes).
  • -B β€” use ABC stereo positions instead of the default ACB. so here's the tea: ACB effectively pushes channels A and B to the left and right (using a stereo delay), with C staying central. ABC puts A and C to the left/right instead, leaving B central. pick your fighter. πŸ’œ
  • -e β€” force 8-bit playback, even if 16-bit is available. she's humble like that.
  • -F β€” set fade-out time in seconds (how long tracks take to fade out). default is 10 seconds.
  • -h β€” give terse usage help. short and sweet, we love a minimal queen.
  • -l β€” list the contents of files (track names etc.) rather than playing them. window shopping fr.
  • -m β€” use mono rather than the default stereo playback.
  • -n β€” instead of the usual interface, use a simple batch-playing tty style, a bit like mpg123. (Only works in the curses version! not the X one, bestie, don't try it.)
  • -N β€” use narrow stereo separation (so the channels sound closer together) rather than the default wide separation.
  • -s β€” output sample data to stdout rather than playing it; implies -n. the sample is 44.1kHz 16-bit stereo (or mono if you're using -m). and don't be surprised if the sample takes a little while to generate, because it still has to emulate the Z80. she's working hard, be patient. 🫢
  • -S β€” 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 usual :-)). iconic behavior honestly.
  • -t β€” 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 command-line. no drag-and-drop era yet, we're in the trenches. 😭

πŸ” BEHIND THE SCENES πŸ”

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 works. storytime. 🧚

as mentioned above, the files basically contain chunks of machine code to run on an emulated Z80 with certain sound hardware. and 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. variety!! ✨)

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 β€” so what aylet does is exit a track after 4 seconds of total silence. and a track may never end at all, in which case aylet fades it out after 3 minutes by default. (yes, 3 minutes may be 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. it's giving ✨customizable✨.)


⌨️ KEYS ⌨️

both the curses-based and X-based interfaces use these keys (some of which are based on those used by XMMS, for the elders in the chat):

  • q or Esc β€” exit the program. bye bestie πŸ’œ
  • z β€” previous track.
  • x β€” play.
  • c β€” pause.
  • v β€” stop.
  • b β€” next track.
  • r β€” restart track.
  • Backspace or Delete β€” previous file.
  • Space β€” next file.
  • s β€” increase stop-after time.
  • S β€” decrease stop-after time. setting it to zero disables fading completely.
  • f β€” increase fade-out time.
  • F β€” decrease fade-out time.
  • h β€” 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. it's giving speedrun energy πŸ”₯

in xaylet, you can also use the matching buttons for most of the above. touch grass? no. touch BUTTON. πŸŽ€

when using aylet -n, the interactivity is scaled down dramatically, leaving just the one control:

  • Ctrl-C β€” if the current track has been playing for less than half a second, exit the program; otherwise, skip to the next track.
heads up: the key used to do this is really whatever you have set up to generate a SIGINT signal, but it's generally Ctrl-C. iykyk.

🌈 EXAMPLES 🌈

to play all .ay files in the current directory:

aylet *.ay

or

xaylet *.ay

to convert ysfollin.ay to a mono sample in .wav format (requires sox):

aylet -sm ysfollin.ay |sox -r 44100 -t sw - tune.wav

she's piping, she's converting, she's slaying. πŸ’…


πŸ’€ BUGS πŸ’€

  • 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. :-) we'll see bestie.
  • 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 moment. tragic. 😭
  • the X version is currently a bit too much like the curses one, at the expense of GUIness in some respects. she's still figuring out her aesthetic.

πŸ‘€ SEE ALSO πŸ‘€

fuse(1)


πŸ‘‘ AUTHOR πŸ‘‘

Russell Marks (rus@svgalib.org).

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.

give them all their flowers, fr fr. 🌸


Version 0.4 Β· 1st October, 2004 β€” yeah she's vintage, she's an heirloom, and she still ate. periodt. πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from