ルモーリン
ホーム 更新 Perl ランドナー サービス 雑談 コースガイド 鉄ゲタ 自転車 Linux リンク 連絡先

AIFFファイルのループ再生と停止

2001-07-06

感謝

EsounDに関わった皆さん。大勢いらっしゃるので、
/usr/doc/esound-0.2.14/AUTHORS
をご覧ください(この時点でLinuxユーザ限定)。 そして、それらを利用されている方々に感謝を込めて。

まえおき

たぶん、もっと簡単な方法があると思うのですが、「やりたい」と思ってから、実際にできるまでの時間を最短にしています。 下記の中で「~できない」は「私は~する方法を知らない」と読んでください。 もし、都合の悪いことがあれば、エンリョなく連絡ください。 なお、一部の表現がAmigaに偏っているのは、私の趣味です。

きっかけ

AmigaでCDを聴いていたのですが、負荷が思っきり掛かるときに備えて、隣のLinuxで再生したところ、1曲だけの繰返し再生ができません。 LinuxでCDからAIFFを取得できなかったので、AmigaにCDを入れてAIFFをLinuxにコピーしました。 (AmigaのCD-ROMドライバAsimCDFSは、音楽CDを入れると仮想AIFFファイルを用意します。) ファイルサイズは50MBですが、空きが5GBもあるので気にしません。 ファイル名を「shanhai no kaze.aiff」にしてダブルクリックしたところ画面はないまま再生しました。 フォルダの「コマンド|MIME形式の編集...」から、AIFFファイルを再生したのはesdplayと判明しました。 画面はないのでコマンドラインに違いなく、ktermから「esdplay "shanhai no kaze.aiff"」としても再生できました。 「esdplay --help」で、オプションの一覧を表示しましたがループはないので、CGIでおなじみのPerlスクリプトでループしました。

再生を停止させるためCtrl+Cを入力すると曲の頭から再生をします。 esdplayの実行が止まっても、Perlスクリプトの実行に影響ないようです。 Perlの本を読んで、Ctrl+CのときにPerlスクリプトも終了するよう改善しました。

デスクトップにアイコンを用意して、ダブルクリックでPerlスクリプトを実行にしたら、ktermがないのでCtrl+Cを入力できません。(爆笑) (再生するまで気がつきませんでした。久しぶりのヒットです。) 「ps -A | grep esd」としたら「esd」「esdplay」の2個が見つかりプロセスIDから「esd」のほうが若いとわかったので、これをkillしてみると、曲の頭から再生しました。 次にesdplayをkillしてみると、今度は沈黙しました。 この作業もスクリプトにして、アイコンを用意しました。

これで、デスクトップのアイコンでループ再生、停止ができるようになりました。 下記に作成したファイルの内容を紹介します。 shanhai no kaze.aiff CDからコピーした曲です。 著作権者が損しないようにCDを持ったままです。 それに全身の写真も入っているし(^_^) .gnome-desktop/shanhai no kaze ループ再生をするPerlスクリプトです
#!/usr/bin/perl

$aifffile = '/home/public/music/shanhai no kaze.aiff';
while(1)
{
    $rc = system("esdplay '$aifffile'");
    if (0 != $rc)
    {
        last;
    }
}
.gnome-desktop/stop esdplay 再生を止めるshスクリプトです
#!/bin/sh

kill `ps -A | grep esdplay | awk '{print $1}'`

おまけ

曲名を見ても誰の曲か知らない人は、こっ恥ずかしいのでセンサクしないでください。 すぐ誰かわかった人は、あなたも同じ趣味の人なので、私を指差して笑わないように。(笑)