MYSQLのプレイリスト三度

プレイリストのヘビーローテーション設定 の拡張版です。通常は再生しないと設定した曲も特定の日(ここでは土曜日と日曜日)には再生するようにします。その際、乱数を発生させてランダムな曲順となるようにしています。

#!/bin/bash
################################## # main.sh # このファイルを実行します。
##################################

export PATH="/home/user/work/実行するフォルダー:$PATH" export play_dir="/home/user/work/音声ファイルのフォルダー" export host=127.0.0.1 export DB="database" export table="PLAYLIST" # テーブル playlist の存在を確認 exist=`\ mysql -N -h ${host} ${DB} << _SQL_ show tables like "${table}"; _SQL_ ` # 存在しない場合作成する if [ -z ${exist} ] then temp=`mktemp ../XXXX.tmp` ls -1 ${play_dir} |\ awk '{print $1,NR}' > ${temp} mysql -h ${host} ${DB} << _SQL_ create table if not exists ${table} ( id int primary key auto_increment, file text, seq int unique, last_play datetime, behavior enum('routine','random','skip') default 'routine' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /* ファイル名のload */ set character_set_database=utf8; load data local infile "${temp}" into table ${table} fields terminated by " " lines terminated by "\n" (file,seq); _SQL_ rm ${temp} fi # 今日の曜日を取得する today=`date +'%w'` if [ ${today} -eq 6 ] || [ ${today} -eq 0 ] then # 土曜日・日曜日はスキップ対象のランダム再生 random_play.sh else # それ以外の曜日は指定順再生 routine.sh fi # 再生したファイル名をログファイルへ出力 logfile=/home/user/work/played.log mp3file=\ `mysql -h ${host} -N ${DB} << _SQL_ select file from ${table} where last_play= (select max(last_play) from ${table}); _SQL_ ` echo "本日("`date +'%m月%d日'`")の課題ファイルは" ${mp3file} "です" > ${logfile} # 最新ファイルの再生 newest.sh

 

#/bin/bash
##########################################################
# random_play.sh
# 土曜と日曜にはこのファイルが実行される
# PATH が通っている /home/user/work/実行するフォルダー 内
# に存在しなくてはならない
##########################################################

# ランダム再生の対象となる曲のリストを取得する declare -a play_list=( `mysql -h ${host} -N ${DB} << _SQL_ select seq from ${table} where behavior='random'; _SQL_ ` ) nlist=${#play_list[*]} #次に再生する曲のファイル名を取得する selected=$(( RANDOM % ${nlist} )) seq=${play_list[$selected]} mp3file=\ `mysql -h ${host} -N ${DB} << _SQL_ select file from ${table} where seq="${seq}"; _SQL_ ` echo "本日("`date +'%m月%d日'`")の課題ファイルは" ${mp3file} "です" # ここで mplayer などを用いて ${mp3file} を再生する。 #mplayer ${play_dir}/${mp3file} # 最後に再生した曲のbehavior変数を skip に変更する if [ $? -le 0 ] then mysql -h ${host} -N ${DB} << _SQL_ update ${table} set behavior='skip' where seq="${seq}"; update ${table} set last_play=now() where seq="${seq}"; _SQL_ fi echo "ランダムリスト中ファイルは、あと" ${nlist} "曲です"
#/bin/bash
########################################################
# routine.sh
# 平日はこのファイルが実行される
# PATH が通っている /home/user/work/実行するフォルダー 内
# に存在しなくてはならない
##########################################################

# 最新曲のseqを取得する max_seq=\ `mysql -h ${host} -N ${DB} << _SQL_ select max(seq) from ${table}; _SQL_ ` # 通常再生の対象内で最後に再生した曲の${seq}を取得する last_seq=\ `mysql -h ${host} -N ${DB} << _SQL_ select seq from ${table} where last_play= (select max(last_play) from ${table} where behavior='routine'); _SQL_ ` # 次に再生する曲の${seq}を決定する next_seq=\ `mysql -h ${host} -N ${DB} << _SQL_ select min(seq) from ${table} where behavior='routine' and seq>${last_seq}; _SQL_ ` if [ ${next_seq} -eq ${max_seq} ] then next_seq=\ `mysql -h ${host} -N ${DB} << _SQL_ select min(seq) from ${table} where behavior='routine'; _SQL_ ` fi #次に再生する曲のファイル名を取得する mp3file=\ `mysql -h ${host} -N ${DB} << _SQL_ select file from ${table} where behavior='routine' and seq=${next_seq}; _SQL_ ` echo "本日("`date +'%m月%d日'`")の課題ファイルは" ${mp3file} "です"

# ここで mplayer などを用いて ${mp3file} を再生する。
#mplayer ${play_dir}/${mp3file}

# last_play変数を再生した曲の再生日時で更新する
if [ $? -le 0 ] then mysql -h ${host} -N ${DB} << _SQL_ update ${table} set last_play=now() where seq="${next_seq}"; _SQL_ fi
#/bin/bash
################################################################
# newest.sh
# このファイルは毎日実行される
# やはりPATH が通っている /home/user/work/実行するフォルダー 内
# に存在しなくてはならない
################################################################

# 最新曲のseqを取得する max_seq=\ `mysql -h ${host} -N ${DB} << _SQL_ select max(seq) from ${table}; _SQL_ ` # 最新曲のファイル名を取得する。 newest=\ `mysql -h ${host} -N ${DB} << _SQL_ select file from ${table} where seq=${max_seq}; _SQL_ ` echo "今週("`date +'%m月%d日'`")の復習ファイルは" ${newest} "です"
# ここで mplayer などを用いて ${mp3file} を再生する。
#mplayer ${play_dir}/${mp3file}