MYSQLを使用した「らじる☆らじる」の録音と再生

テーブルは以下の形式としました。

create table if not exists t_sound(
seq int,
estimate datetime,
sound mediumblob
);

 seq はオートインクリメントされる整数とします。

 estimate には 「らじる☆らじる」の音声ファイル名と放送時刻の対応  で作成した推定式を使用して求めた放送時刻をinsertします。

新しい「らじる☆らじる」 録音方法の提案  で紹介した方法により音声をダウンロードし、8000Hzにダウンレートしたraw形式に変換しておきます。

 この音声ファイルを MYSQLでバイナリデータの取り扱い  のようにしてMYSQLに登録します。

 

再生は放送時刻(date1からdate2まで)で指定することが可能となります。estimateの範囲で検索して、select into dumpfile 文で作成したrawファイルをcat でつなぎ合わせた後に、soxコマンドでwav形式に変換します。

 


 

再生用シェルスクリプト

#!/bin/bash
dir_SECURE_FILE_PRIV=/var/lib/mysql-files
temp=`mktemp ${dir_SECURE_FILE_PRIV}/XXXX`
date1=`getparstr $# "$*" "date1"` # この日時から
date2=`getparstr $# "$*" "date2"` # この日時までを再生
declare seq=( \
`mysql nhkradio -N << _SQL_
select seq from t_sound
where "$date1"<=estimate and estimate<="$date2"
order by estimate;
_SQL_` \
) # 再生すべき連番をシェル変数$seq[]に保存

rm playback.raw
# ${seq[$i]}で検索してバイナリフィールドsoundを外部ファイルに書き出す
for ( ( i=0; i<${#seq[*]}; i++ ) )
do
echo ${seq[$i]}
rm $temp
mysql nhkradio << _SQL_
select sound into dumpfile "$temp"
from t_sound where seq=${seq[$i]};
_SQL_
cat $temp >> playback.raw # catでraw形式ファイルに連結する
done
rm $temp

# soxで事前に決めておいたwav形式ファイル playback.wav に変換する
sox -r 8000 -c 1 -b 16 -e signed-integer playback.raw playback.wav
aplay playback.wav # playback.wav ファイルを再生する
rm playback.wav playback.raw