Skip to content

Instantly share code, notes, and snippets.

@daniel-j
Created May 15, 2015 20:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daniel-j/77d24bd7257ad8d79668 to your computer and use it in GitHub Desktop.
Save daniel-j/77d24bd7257ad8d79668 to your computer and use it in GitHub Desktop.
Galaxy News Radio (MPD + Python)
#!/bin/bash
cd ${0%/*}
sock="`pwd`/mpd/socket"
function addList {
LIST=`python2 create-show.py`
IFS=$'\n';
for i in $LIST; do
echo "Adding $i"
mpc -h $sock -q add "file://$i"
done
}
mpd mpd.conf
mpc -h $sock -q consume on
mpc -h $sock -q clear
addList
mpc -h $sock -q play
while true
do
mpc -h $sock -q idle playlist > /dev/null
COUNT=`mpc -h $sock playlist | wc -l`
#echo "playlist changed"
if [ "$COUNT" -le 1 ]; then
echo "Adding show..."
addList
mpc -h $sock -q play
fi
done
#!/usr/bin/python2
import os
from random import shuffle
from random import randrange
def getRandomFiles(dir):
files = []
for (path, dirnames, filenames) in os.walk(dir):
files.extend(os.path.join(path, name) for name in filenames)
shuffle(files)
return files
def getRandomFile(dir):
return getRandomFiles(dir)[0]
root = "/home/djazz/gnr/audio/"
show = []
musicList = getRandomFiles(root+'music')
firstSong = musicList[0]
laterSongs = musicList[1:min(len(musicList), randrange(2, 5))]
if randrange(10) is 0: # 10%
show.append(getRandomFile(root+'full'))
elif randrange(10) is 0: # 10%
show.append(getRandomFile(root+'radioplay'))
else:
show.append(getRandomFile(root+'intro'))
if randrange(2) is 0: # 50%
show.append(getRandomFile(root+'intro news'))
show.append(getRandomFile(root+'news'))
else:
show.append(getRandomFile(root+'intro psa'))
show.append(getRandomFile(root+'psa'))
show.append(getRandomFile(root+'outro'))
if randrange(3) is 0: # 33%
music_info = firstSong.replace(root+"music/", root+"outro music info/")
if os.path.isfile(music_info): # if this music file has info
show.append(music_info)
show.append(firstSong)
show.extend(laterSongs)
print "\n".join(show)
# An example configuration file for MPD
# See the mpd.conf man page for a more detailed description of each parameter.
# Files and directories #######################################################
#
# This setting controls the top directory which MPD will search to discover the
# available audio files and add them to the daemon's online database. This
# setting defaults to the XDG directory, otherwise the music directory will be
# be disabled and audio files will only be accepted over ipc socket (using
# file:// protocol) or streaming files over an accepted protocol.
#
music_directory "~/gnr/audio"
#
# This setting sets the MPD internal playlist directory. The purpose of this
# directory is storage for playlists created by MPD. The server will use
# playlist files not created by the server but only if they are in the MPD
# format. This setting defaults to playlist saving being disabled.
#
playlist_directory "~/gnr/mpd/playlists"
#
# This setting sets the location of the MPD database. This file is used to
# load the database at server start up and store the database while the
# server is not up. This setting defaults to disabled which will allow
# MPD to accept files over ipc socket (using file:// protocol) or streaming
# files over an accepted protocol.
#
db_file "~/gnr/mpd/tag_cache"
#
# These settings are the locations for the daemon log files for the daemon.
# These logs are great for troubleshooting, depending on your log_level
# settings.
#
# The special value "syslog" makes MPD use the local syslog daemon. This
# setting defaults to logging to syslog, otherwise logging is disabled.
#
log_file "~/gnr/mpd/mpd.log"
#
# This setting sets the location of the file which stores the process ID
# for use of mpd --kill and some init scripts. This setting is disabled by
# default and the pid file will not be stored.
#
pid_file "~/gnr/mpd/pid"
#
# This setting sets the location of the file which contains information about
# most variables to get MPD back into the same general shape it was in before
# it was brought down. This setting is disabled by default and the server
# state will be reset on server start up.
#
state_file "~/gnr/mpd/state"
#
# The location of the sticker database. This is a database which
# manages dynamic information attached to songs.
#
sticker_file "~/gnr/mpd/sticker.sql"
#
###############################################################################
# General music daemon options ################################################
#
# This setting specifies the user that MPD will run as. MPD should never run as
# root and you may use this setting to make MPD change its user ID after
# initialization. This setting is disabled by default and MPD is run as the
# current user.
#
#user "mpd"
#
# This setting specifies the group that MPD will run as. If not specified
# primary group of user specified with "user" setting will be used (if set).
# This is useful if MPD needs to be a member of group such as "audio" to
# have permission to use sound card.
#
#group "nogroup"
#
# This setting sets the address for the daemon to listen on. Careful attention
# should be paid if this is assigned to anything other then the default, any.
# This setting can deny access to control of the daemon. Choose any if you want
# to have mpd listen on every address
#
# For network
#bind_to_address "0.0.0.0"
#
# And for Unix Socket
bind_to_address "~/gnr/mpd/socket"
#
# This setting is the TCP port that is desired for the daemon to get assigned
# to.
#
#port "6600"
#
# This setting controls the type of information which is logged. Available
# setting arguments are "default", "secure" or "verbose". The "verbose" setting
# argument is recommended for troubleshooting, though can quickly stretch
# available resources on limited hardware storage.
#
#log_level "default"
#
# If you have a problem with your MP3s ending abruptly it is recommended that
# you set this argument to "no" to attempt to fix the problem. If this solves
# the problem, it is highly recommended to fix the MP3 files with vbrfix
# (available as vbrfix in the debian archive), at which
# point gapless MP3 playback can be enabled.
#
#gapless_mp3_playback "yes"
#
# This setting enables MPD to create playlists in a format usable by other
# music players.
#
#save_absolute_paths_in_playlists "no"
#
# This setting defines a list of tag types that will be extracted during the
# audio file discovery process. Optionally, 'comment' can be added to this
# list.
#
#metadata_to_use "artist,album,albumartist,title,track,name,genre,date,composer,performer,disc"
#
# This setting enables automatic update of MPD's database when files in
# music_directory are changed.
#
auto_update "yes"
#
# Limit the depth of the directories being watched, 0 means only watch
# the music directory itself. There is no limit by default.
#
#auto_update_depth "3"
#
###############################################################################
# Symbolic link behavior ######################################################
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links outside of the configured music_directory.
#
follow_outside_symlinks "yes"
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links inside of the configured music_directory.
#
follow_inside_symlinks "yes"
#
###############################################################################
# Zeroconf / Avahi Service Discovery ##########################################
#
# If this setting is set to "yes", service information will be published with
# Zeroconf / Avahi.
#
#zeroconf_enabled "yes"
#
# The argument to this setting will be the Zeroconf / Avahi unique name for
# this MPD server on the network.
#
#zeroconf_name "Music Player"
#
###############################################################################
# Permissions #################################################################
#
# If this setting is set, MPD will require password authorization. The password
# can setting can be specified multiple times for different password profiles.
#
#password "password@read,add,control,admin"
#
# This setting specifies the permissions a user has who has not yet logged in.
#
#default_permissions "read,add,control,admin"
#
###############################################################################
# Input #######################################################################
#
input {
plugin "curl"
# proxy "proxy.isp.com:8080"
# proxy_user "user"
# proxy_password "password"
}
#audio_output {
# type "alsa"
# name "ALSA output"
# device "hw:0,0" # optional
# format "44100:16:2" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
#}
audio_output {
type "shout"
encoding "lame" # optional
name "Galaxy News Radio"
host "localhost"
port "8000"
mount "/gnr"
password "hackme"
# quality "5.0"
bitrate "128"
format "44100:16:2"
protocol "icecast2" # optional
# user "source" # optional
# description "My Stream Description" # optional
# genre "jazz" # optional
# public "no" # optional
timeout "30" # optional
}
audio_output {
type "null"
name "My Null Output"
}
replaygain "auto"
# Character Encoding ##########################################################
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment