音楽再生
これも先人たちがたくさんたくさん記事にされているネタ。
備忘目的で、自分も書いておく。
たまーに、どうやるんだっけって思うんだよね。
音楽再生ソフト mpg321 インストール
まずはソフトウェアのインストール。
先人たちに倣い mpg321 を使う。
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mpg321
再生環境の整理
必須な作業ではないけど、音楽がならないような場合は出力先を確定する。
すると、キャラクターベースで設定画面が出てくる。
以降の画面では、矢印キーで移動する。
[8 Advanced Options] を選択して Enter キーを押す。
[1 Force 3.5mm ('headphone') jack] を選択して Enter キーを押す。
これで 3.5mm のジャックから強制的に出力される。
最初の画面に戻るので、タブキーを2回押して
音楽ファイルの取り込みと転送
手元にある CD を、Windows Media Player で mp3 として取り込む。
さて、エクスプローラーであれば、PC→ミュージック→歌手名→アルバム名の順番で辿れば、取り込んだファイルがあるはず。
さて Raspberry Pi で再生しようかと思ったとき、少し考え込んでしまった。
samba をインストールしてファイル共有からコピーしても良いんだけど、もっと手っ取り早い方法は無い物かと。
USBメモリで移動するくらいなら、samba 設定する方が早い (どこに置いたか探すところから)。
「はーい、SCP 転送〜」
どこからか、のぶ代さんの声が聞こえてきた。
その独特なドラ声に導かれて、mp3 ファイルを ssh 接続している TeraTerm へドラッグアンドドロップ。
送付先ディレクトリが表示されるので、好みで変更して OK ボタンをクリック。
ちなみに、チルダ "~" はホームディレクトリを表すけど、この場合はログインアカウントのホームディレクトリだった。
ログイン後に su していると ls ~ コマンドを打ってもファイル名が表示されないので、一瞬焦る。
ホームディレクトリの配下に music ディレクトリを作って移動したあと…
(タイムスタンプは正確だけど気にしないこと)
転送できたことを確認したら、音楽を再生してみる。
$ ls -l ~pi/music
$ alias mm="mpg321"
$ mm ~pi/music/* &
ちなみにここで alias を使っているのは、単純に mpg321 と入力するのがイヤになってきただけで、深い意味はない。
キー入力しにくい並びなんだよね…自分的に…。
mpg と打とうとして、指が勝手に mpeg と打つとか、321 と打とうとして 123 と打つとか。
HDMI での再生
上記ではヘッドホンジャックから強制的に出力されるように設定する方法を紹介しているけど、HDMI をサポートしているディスプレイだったら、そこから音楽を鳴らすことができる。
自分が使っている HDMI ディスプレイでは、HDMI 画面にしていないと音楽が出てこなかったけど…。
何を言っているのか分からないかもしれないが、Windows からは DVI で接続して使っているので、ディスプレイから音楽を出力させるには接続方法を合わせないとダメだったということだ。
個人的な感想を言うと、ディスプレイから出力させるだけあって、ある意味「貧弱」な音なんだけど、ある意味では最高な音…。
ノイズが乗らないのが素晴らしい。
テレビとかに繋げば、それなりに再生環境が整うんじゃないだろうか。
…テレビ、持ってないんだよね。
ヘッドホンジャックでの再生
ジャックにイヤホンでもスピーカーでも接続すれば、そのまま音楽を流せる。
手軽に再生できるのが素晴らしい。
なんだけど、コンピュータの設計上、どうしてもノイズが乗る。
それこそ、アナログなレコードを再生しているかのようにノイズが乗る。
これでもかというくらいに、ざざーぷちぷちずざーと小さく鳴る。
気になる人は、絶対ダメだろうなぁ…
.bashrc にコマンドを仕込んでおいて、ログインしたら初音ミクあたりで音声出力なんかしたらどうだろう。
Raspberry Pi「ログインを確認しました」
Raspberry Pi「あと 10 秒で自爆します...9...8...7...」
うん、つまらなかった。
オプション
基本的には man mpg321 を実行すれば出てくる情報を、意訳したもの。
間違ってるかもしれない。
機能 | オプション |
---|---|
シャッフル再生 | -z |
ランダム再生 | -Z |
詳細表示 | -v |
ループ再生 | -l (数値) |
他にも機能があるけど、基本的にはこれくらい?
一応リスト再生もあるけど、これにちょっと手こずった。
pi@raspberrypi ~ $ cat ATLACH-NACHA.music.list /home/pi/music/01 Information.mp3 /home/pi/music/02 Red tint.mp3 /home/pi/music/03 World.mp3 /home/pi/music/04 Voluptuous lips.mp3 /home/pi/music/05 Luring to insanity.mp3 /home/pi/music/06 Calm time.mp3 /home/pi/music/07 Weeping Cause.mp3 /home/pi/music/08 Throwing into the banquet.mp3 /home/pi/music/09 Running Clouds.mp3 /home/pi/music/10 Passing moment.mp3 /home/pi/music/11 Atlach_nacha~Going on.mp3 /home/pi/music/12 Atlach_nacha~Huge battle.mp3 /home/pi/music/13 Atlach_nacha~Adoption.mp3 /home/pi/music/14 Running Clouds(Music Box).mp3 /home/pi/music/15 Memorial day.mp3 pi@raspberrypi ~ $ pi@raspberrypi ~ $ mpg321 -@ ATLACH-NACHA.music.list High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3. Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew, now maintained by Nanakos Chrysostomos and others. Uses code from various people. See 'README' for more! THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Title : Information Artist : shade
ということで、どうやらスペースにエスケープは要らないみたい。
今回はフルパスで記載したけど、「カレントから」であれば相対パスでもいけた。
なので、指定するディレクトリの mp3 ファイルを総ざらいしてリスト化する方法し、mpg321 に読み込ませるには、次の通り。
$ find ~pi -name "*.mp3" | sort > all.mulic.list $ mpg321 -@ all.mulic.list
これをシェルスクリプト化すると、こんな感じ?
#!/bin/sh ### Parameter # List file pListDir=/tmp pListName=all.mulic.list pList=${pListDir}/${pListName} # search target pWorkingDir=~pi/ pTargetMusic="*.mp3" # player pApp=/usr/bin/mpg321 pOption="-z" ### Listing find ${pWorkingDir} -name ${pTargetMusic} | /usr/bin/sort > ${pList} ### Play ${pApp} ${pOption} -@ ${pList} > /dev/null
なんていうか、mpg321 をバックエンドに、シェルスクリプトでフロントエンドを開発している気になってきたので、この辺で終わりにする。
音楽再生部分をバックグラウンドで走らせたら、止めるのにプロセスを探して kill しなきゃだし、そうするとどこかでプロセスIDを管理しなきゃだし、プロセスIDの管理までするなら変数として外部設定ファイルにしたほうが良いし…
脱線するけど…
バックエンド/フロントエンドはひとつの対義語で、ユーザが操作するシステムをフロントエンド、その操作を実際に処理するシステムがバックエンド。
ATM をイメージすると、わかりやすいかもしれない。
ATM 自体はフロントエンドで、その操作結果を受けて実際に処理を行うのは、客から見えないサーバ部分だし。
バックグラウンド/フォアグランドはひとつの対義語で、ユーザが発行するコマンドを受け付けるシェル部分がフォアグランド、発行したコマンドを陰で走らせるのがバックグラウンド。
これは、ズバリ、シェルそのもの。
厳密には違うところもあるけど、ここではこんな感じで使っている。
それはともかく、目的に合わせたリストを作って mpg321 に読み込ませてあげれば、それなりに動いてくれそうな気配。