CAT760でUSBサウンド演奏

歌うCAT760(略して唄猫)

CAT760にはUSBポートがあります。市販のUSBスピーカを接続して音楽を演奏してみました。

IMG_5948.jpg

ハード工作不要なので、誰でも再現できるとおもいます。
コンピュータ教材に最適かもしれません。

実験機材

  • CAT760(EK760) Linux-2.6.15
  • USBスピーカ ELECOM MS-77UWH (USB AUDIO機器として認識するものであれば何でも可と思われる)

ソフトウェア環境

カーネルコンフィグレーション

以下のコンフィグレーションでカーネルをコンパイルする。

  • 開発機にて
$ tar xzfv linux-2.6.15-cat_20060718.tgz
$ cd linux-2.6.15-cat
$ make cat760_defconfig
$ make menuconfig
Device Drivers  --->
  Sound  --->
    <M> Sound card support
    Advanced Linux Sound Architecture  --->
    Open Sound System  --->
      <M> Advanced Linux Sound Architecture
      <M> Sequencer support
      < >   Sequencer dummy client (NEW)
      <M> OSS Mixer API
      <M> OSS PCM (digital audio) API
      [*] OSS Sequencer API
          USB devices  --->
            <M> USB Audio/MIDI driver
  • 「組み込みlinuxガイド」を参考にして、モジュールをCAT760 rootfsの /lib/modules 以下にコピーする。

詳細略

  • /etc/modules にモジュールの組み込みを追加する
    /etc/modulesの一番最後に
    #   USB sound
    snd-usb-audio nrpacks=2
    snd_pcm_oss

演奏ソフト(mpg123)の組み込み

mpg123 は mp3プレイヤーです。Debian SH4用バイナリを aptサーバ からダウンロードし、CAT760の rootfs に組み込みます。
mpg123は標準的なCライブラリ以外使用しませんので、 .deb ファイルをバラして /usr/bin にコピーするだけでOKです。

以下の作業は全てCAT760で行います。

  • mpg123_0.59r-20_sh4.deb をダウンロードする
    # cd /tmp
    # wget https://www.si-linux.co.jp/pub/debian-sh/pool/non-free/m/mpg123/mpg123_0.59r-20_sh4.deb
  • mpg123_0.59r-20_sh4.debファイルを分解する
    # busybox ar -x mpg123_0.59r-20_sh4.deb
    # gzip -d data.tar.gz
    # busybox tar -xvf data.tar
  • FLASH ROM を書き込み可能に
    # rommode rw
  • mpg-123のコピー
    # cp /tmp/usr/bin/mpg123-oss /usr/bin/mpg123
  • デバイスファイルを作る
    # mknod /dev/dsp c 14 3
    # chown root:audio /dev/dsp
    # chmod 660 /dev/dsp
  • FLASH ROM を書き込み不可に戻す
    # rommode ro
  • 演奏コマンド
    # mpg123 -b 512 任意の.mp3

結果

鳴ります。唄います。
う〜ん。あたりまえだけど、すごい面白い。

音楽演奏だけではなく、CATは組み込みボードですから、例えば接点入力を受けたら「おはようございます」としゃべらせたりの組み込み向け音声指示装置など応用が考えられますね。

応用

電源を入れたら自動的に USBメモリに格納された mp3 ファイルをランダム演奏するスクリプト。
USBメモリの中に mp3 というフォルダを作り、その中に *.mp3 ファイルを入れておくと起動時にランダム演奏する。

  • /etc/init.d/mp3play
#! /bin/sh
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DEVICE=/dev/sda1    # USBメモリのデバイス名
MNT=/mnt

d_start() {
        mount $DEVICE $MNT -t vfat -o ro
        sleep 2
        mpg123 -b 512 -Z $MNT/mp3/*.mp3 &     # mp3/*.mp3 のランダム演奏
}

d_stop() {
        killall mpg123
        sleep 1
        umount $MNT
}

case "$1" in
  start)
        d_start
        ;;
  stop)
        d_stop
        ;;
  restart|force-reload)
        d_stop
        sleep 1
        d_start
        echo "."
        ;;
esac

私の環境では mpg123 のオプションに -b 512 (バッファリング512Kbyte)を付けたところプツプツ途切れなくなりました。

# rommode rw
# cd /etc/rc2.d
# ln -s ../init.d/mp3play S90mp3play
# rommode ro

関連

Last-modified: 2019-07-22 (月) 17:56:00 (32d)