「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

RaspberryPi2 で音を鳴らす

このPOSTでは回路やセンサー等は使わず、 RaspberryPi2にSSHで入って コマンドから音を鳴らす準備からのメモです。 最後はWebサーバ+PHPで簡易なラジオサーバも 作ってみました。


◼︎課題


◼︎キーワード


◼︎mpg321とmplayer

どちらもパッケージとしてインストールしますが、 mpg321はmp3専用なので今回はmplayerをインストールして使ってみました。


◼︎インストール

sudo apt-get install mplayer

◼︎再生

再生も簡単です。 1. 音楽ファイルの再生 2. プレイリスト再生

1)音楽ファイルの再生
mplayer 音楽ファイルパス
2)プレイリスト再生|ネットラジオなどは大抵playlistで提供されている
mplayer --playlist 音楽ファイルパス
3)phpからmplayerコマンドを実行

最初は、こんなプログラムを書きWebサーバ経由で実行しました。

<?php
    system(""mplayer 音楽ファイル名パス");

が、音声ならない・・エラーは、沢山でたので割愛ですが、

普通?に考えるとApacheユーザでPHPが実行されているので、 root権限コマンドが叩けないエラーと思って、 権限・グループ周りを調節したのですが音は鳴らず・・

ググるって、このページにたどり着きました。

visudoコマンドで以下の行を追加設定しましたー ちなみにwww-dataはapacheユーザ名で、 パスワードなしでmplayerとkillallコマンドが 使えるという意味になります。

www-data ALL=(ALL) NOPASSWD: /usr/bin/mplayer,/usr/bin/killall

◼︎コード|ネットラジオ

RaspberryPi2のドキュメントルートに以下のファイルを作成し、 IP指定でwebブラウザで開いて ネットラジオの再生をするサンプルです。

ネットラジオSHOUTcastから 聞きたいリンクをコピーしてます。

getで取得したidを渡してmplayerで -playlistオプション付きで実行しています。 stopボタンタップでkillall コマンドでmplayerプロセス全てを停止する仕組みです。

03_01

<?php
if(isset($_GET['id'])){
    $id = $_GET['id'];

    if($id=="stop"){
        system("sudo killall mplayer");
    }else{
        system("sudo killall mplayer");
        system("sudo mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=" .$id. " > /dev/null &");
    }
}
?>
<html>
<head>
<meta name="viewport" content="width=device-width">
</head>
<body>
    <p><a href="index.php?id=stop">stop</a></p>
<ul>
    <li><a href="index.php?id=182443">SmoothJazz.com Global Radio</a></li>
    <li><a href="index.php?id=271757">Classical Jass Radio</a></li>
</ul>
</body>
</html>