Soprano
Soprano is a self-hosted audio streaming service and media player. Scan, organize, and easily serve your music collection over the internet.
More information coming soon :)
Features
- Music libraries
- Supporting mp3/flac/m4a/ogg/wav
- Directory file watcher
- Extract album art and id3 metadata
- Media session (Chrome/android compatibility)
- Search music library by artist/album/title/genre
- Create and add music tracks to playlist
- Transcode to mp3 with ffmpeg (compatibility)
- Podcasts
- Supported by Listen Notes
- Search for a podcast by title or episode
- Radio
- A curated list of Canadian/European radio streams
- Collection:
- B-93.3
- 106.7 ROCK
- 94.1 CJOC-FM
- KiSS 107.7
- CKXU 88.3
- AMP 90.3
- CJAY 92.1
- X92.9
- 100.3 The Bear
- JACK 103.1
- CBC Radio One (Calgary)
- CBC Music (Edmonton)
- 1 FM Amsterdam Trance
Upcoming
New features incoming... Thinking...
Installation
- With composer:
composer require whleucka/soprano
- I have included the backend in the
src/
folder - I am working on containerizing this project with Docker WIP
Directory file watcher
- Example of
systemd
service
❯ cat /etc/systemd/system/soprano-watcher.service
[Unit]
Description=Soprano File Watcher
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/usr/bin/env php /path/to/soprano/scripts/Watcher.php
[Install]
WantedBy=multi-user.target
Using a celestial command
Usage: celestial [options...]
-h, --help Get help for commands
-s, --start Run development server
--migrate-up=filename Run migration file, call up method
--migrate-down=filename Run migration file, call down method
--migrate-fresh Drop database and run all migration files calling up method
--migrate-create=name Create a migration file. Database table names should be plural. Eg, --migrate-create=users
--controller-create=name Create a controller file. Controller names should be uppercase and singular. Eg, --controller-create=Profile
--model-create=name Create a model file. Model names should be uppercase and singular. Eg, --model-create=Animal
--music-scan Scan for new music files and synchronize to database
--music-cover-scan Update music cover art