Files
racket-audio-dlna/README.md
T

82 lines
1.8 KiB
Markdown

# racket-audio-dlna
`racket-audio-dlna` plays local audio files on UPnP/DLNA media renderers.
It combines TagLib metadata from `racket-audio` with the HTTP server,
DIDL-Lite support, and renderer controls from `racket-upnp`.
```racket
#lang racket/base
(require racket-audio-dlna
racket-upnp)
(define renderer
(get-media-renderer "Denon"))
(define player
(make-dlna-player renderer))
(dlna-player-play!
player
"/muziek/radiohead/in-rainbows.flac")
(dlna-player-set-next-file!
player
"/muziek/radiohead/bodysnatchers.flac")
```
The constructor determines the local address used to reach the renderer and
starts a media file server on port 8080. The address, port, and URL path can be
overridden when required:
```racket
(make-dlna-player
renderer
#:listen-ip "10.7.3.108"
#:port 8081
#:path "/music/")
```
## Controls
```racket
(dlna-player-pause! player)
(dlna-player-resume! player)
(dlna-player-seek! player 120)
(dlna-player-seek-percentage! player 50)
(dlna-player-volume! player 35)
(dlna-player-muted! player #t)
(dlna-player-stop! player)
```
`dlna-player-info` returns a cached snapshot:
```racket
(define info (dlna-player-info player))
(dlna-info-state info)
(dlna-info-position info)
(dlna-info-duration info)
(dlna-info-volume info)
(dlna-info-reachable? info)
```
Transport state and position are refreshed by a background thread. Position is
advanced locally between polls. Volume and mute state use a slower cache.
Commands update the cache immediately after the renderer accepts them.
Use `#:refresh? #t` for a synchronous refresh:
```racket
(dlna-player-info player #:refresh? #t)
```
Close the player when it is no longer needed:
```racket
(dlna-player-close! player)
```
Closing stops playback, removes published files, stops the web server, and
terminates the polling thread.