sigrid/zuke

Description
# zuke

A music player for Plan 9.

![screenshot](zuke.jpg)

With some stuff one expects from a music player:

 * gapless playback
 * seeking
 * playlists
 * good metadata support
 * basic livestreams (ie IceCast) support

## 2020/03/04

The module music decoder of choice is now [audio/moddec, a port of
DUMB](https://git.sr.ht/~ft/dumb`).  Please install it if you want to
continue playing those mods.

## 2020/12/22

New playlist format.  Zuke still will load old format and you can
convert to the new one like so:

	audio/zuke -G <old.plist >new.plist

## Text-based alternative

Behold, a music player in rc, with keyboard control, plumbing, and a
playlist that can be live-edited(!), by umbraticus:
[music](http://runjimmyrunrunyoufuckerrun.com/rc/music).

## Installing

Install [libtags](https://git.sr.ht/~ft/libtags) first.

Clone the repo, do `mk install`.

Zuke comes with two programs.  One is `audio/zuke`, which is the player
itself.  The other one is `audio/mkplist`, it's used to make playlists
that are then fed to `audio/zuke`'s stdin:

	audio/mkplist /n/somefs/dir /n/otherfs/file.mp3 http://stream.nauticradio.net:14280/ > $home/music.plist
	audio/zuke < $home/music.plist

Of course, one can combine these steps into one:

	audio/mkplist /n/music | audio/zuke

## Plumbing

Plumbing music files and playlists is supported via "audio" port.  New
files can't be added to the current playlist just yet.

	type	is	text
	data	matches	'.+\.(mp3|MP3|ogg|OGG|flac|FLAC|wav|WAV|au|AU|mid|MID|mus|MUS|m3u|M3U|pls|PLS|it|IT|plist)$'
	arg	isfile	$0
	plumb	to	audio
	plumb	start	window -scroll play $file

To disable plumbing, execute before launching zuke:

	bind /dev/null /mnt/plumb/audio

To remote control zuke, you can emulate pressing keys through plumber
(ugh!):

	plumb -d audio 'key >' # will skip to the next song

## Formats

The ones supported with stock 9front: mp3, ogg/vorbis, flac, wav.

To play opus, visit [this](http://nopenopenope.net/posts/audcomp).

To play music mods, install [audio/moddec](https://git.sr.ht/~ft/dumb).

## Theme

To change the default theme install
[picker](https://git.sr.ht/~ft/picker) and run it using right mouse
button menu in zuke.  `snarf all` and save it to a file, then point to
that file using an environment variable (you can put it into
`$home/lib/profile`):

```
theme=.../my.theme
```

## Columns to display

Zuke has an optional argument `-c` that specifies which columns to
display, the default is `-c AatD`.

	A  artist
	a  album
	b  file basename
	t  title
	D  duration
	d  date
	T  track number
	p  full file path

With `-s` zuke will start in shuffled mode.

## Hot keys

	-    volume down
	+ =  volume up

	left/right                  seek backwards/forward (10 seconds step)
	, .                         seek backwards/forward (one minute step)
	up down pgup pgdn home end  move within the playlist
	o i                         move to the currently playing track
	enter                       play the selected track

	> b         skip next
	< z         skip prev
	v           stop
	p c space   pause/resume
	s           toggle shuffle
	q/del       quit

	/  search forward
	?  search backwards
	n  repeat search forward
	N  repeat search backwards

## Mouse

	left   - select a track
	right  - menu
	middle - play the track under the pointer
Last 5 commits (shortlog)
Date Author Short message Commit hash
2021-03-05 Sigrid mkplist: use audio/moddec (if available) to read duration 32bb880971ed6c746c42d5c14d0319ad4cee4390
2021-03-04 Sigrid add "basename" column, put it into "title" column if track has none, and no path nor basename column is showing 09382d6f208f24076988e6ae69146adc185ab53a
2021-03-04 Sigrid do not use -s with decoders unless actually seeking; allow seeking with known formats but no duration dd231a1c06f2da190f5d29f3f2aa01323600d1af
2021-03-03 Sigrid do not get stuck (or crash) if a decoder program is absent 6ddf9ac048b1440a328eb6273113ff177bdbf7ee
2021-03-02 Sigrid change for libtags update b25d50d8af6ff86462de767d287e201691baf376
Files (browse)
.gitignore
LICENSE
README.md
icy.c
icy.h
mkfile
mkplist.c
plist.c
plist.h
theme.c
theme.h
zuke.c
zuke.jpg