2014年3月30日日曜日

Raspberry Pi で Radikorec を使ってみる.


家で目的もなく動いてるRaspberry Pi さんにラジオを録音してもらいたくなった.
そこで, Raspberry Pi に radikorec をインストールしてみた.
Raspberry Pi に限らず,たいていのUnix 系OSならほぼ同じ手順でインストールできそうだった.




環境




<マシン>
Raspberry Pi

<OS>
Raspbian 7.1

<カーネル>
Linux raspberrypi 3.6.11+ #538 PREEMPT Fri Aug 30 20:42:08 BST 2013 armv6l GNU/Linux







radikorec のソースコードをダウンロード




radikorec のリポジトリは akiradeveloper/radikorec · GitHub にある.
ここから,クローンする.




git clone https://github.com/akiradeveloper/radikorec.git








setuptools distribute をインストール

(2015/08/22 更新: setuptools を使うように内容を変更)

radikorec のインストールのために、python のパッケージ管理ツールであるsetuptools を使うため、これをインストールする.

(この記事ではもともとdistribute を使うように書いていたが、distribute は2013年にsetuptools に取り込まれているらしいので、setuptools を使うほうがよいらしい
また、元々この記事で紹介していた distribute インストール用のスクリプトへのリンクが切れてしまっている.
このため、setuptools を使うように内容を変更した.)


distributete というpython のライブラリ? をインストール.
因みに,何のためのライブラリかはよくわかってない.

昔は distributete でなはく setuptools というライブラリが主流だったらしい.
現在は, setuptools の開発は止まっており,それを引き継いで開発されているのが distribute ということらしい.
というわけで,今回は distribute をインストールする.
(このことに関連して,あとでradikorecのインストールスクリプトを修正する必要がある.)

参考URL: Pythonパッケージ管理ツールまとめ | サイト運営の私的メモ




$ curl -O http://python-distribute.org/distribute_setup.py
$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
$ sudo python distribute_setup.py








その他必要なものをインストール




以下のコマンド(Debian 系)



sudo apt-get update
sudo apt-get install libssl-dev 
sudo apt-get install ffmpeg







インストールスクリプトの編集

(2015/08/22 更新: setuptools を使うように内容を変更)



compilesetup.py ファイルを編集.
compile の方は rtmpdump のソースコードをgitリポジトリからクローンしてくるのだが,このリポジトリの指定先が参照できないので,変更.
setup.pysetuptools ではなく distributete をインストールしたための変更.


編集内容は以下の通り.



$ git --no-pager diff
diff --git a/compile b/compile
index ef82607..8cf921e 100755
--- a/compile
+++ b/compile
@@ -6,7 +6,8 @@ pwd
 make
 cd -

-git clone https://github.com/svnpenn/rtmpdump.git
+git clone git://git.ffmpeg.org/rtmpdump
+# git clone https://github.com/svnpenn/rtmpdump.git
 cd rtmpdump
 pwd
 make SYS=posix      
diff --git a/setup.py b/setup.py
index ecba8a4..5b2df88 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,5 @@
-#from distutils.core import setup
-from setuptools import setup
+from distutils.core import setup
+#from setuptools import setup

 setup(
     name = 'radikorec',








インストールスクリプトの実行




以下のコマンドを実行する.



sudo make install
./compile 
sudo ./setup 








試験的に動かしてみる.




以下のコマンドでradikorecを試してみることができる.



./runtest


これを実行すると. /tmp/ 以下にログや録音した音声ファイルができるはず.
ffmpeg のインストールを忘れてると,録音したのにエンコードできなくて音声ファイルが出力されない.
僕は,毎度この段階で ffmpeg がないことに気づくので,実際に ./runtest で音声ファイルを出力したことはなかったりする.








放送局コードについて




radikorec を使うときに,録音したい放送局を放送局コードで指定する.
これを知るためには,http://radiko.jp/v2/api/program/today?area_id=JP14 へアクセスして返ってきたxml を見ればいいっぽい.
<station io=hoge>hoge の部分が放送局コード
その放送局が何かはすぐしたの <name> に書いている.

参考URL: FreeBSD で radiko を録音する。






おまけ: mp3に変換して,コマンドラインから再生する.




raspberry pi イヤホン端子もあるので,再生して聞くこともできる.
m4a 形式を直接コマンドラインから再生する方法がよくわからなかったのでmp3に変換してから再生してみた.
以下のようにやればできた.

m4a → mp3 は以下のようにやればできる.



ffmpeg -i NHR-2014-03-30-04-20.m4a  hoge.mp3




再生は, mpg321 をインストールして使えばOKっぽい.
デバイスファイルへのアクセス権限の関係で,何も設定しないとユーザ権限では動作しない.
今回は面倒だったのでsudo を付けないと動かした.
sudo を付けたくない人は,ブログログ mpg321を一般ユーザーで再生できるようにする。 などを見て,デバイスファイルにアクセスできるように権限を設定しよう.
mpg321 のインストールおよび再生コマンドは以下の通り.



sudo apt-get install mpg321 
sudo mpg321 hoge.mp3 



ここに書いた方法で,Raspberry Pi から直接再生することができる.
しかし,上記のエンコード処理はRaspberry Pi でやると非常に遅い.
また,録音した音声ファイルのサイズは大きくなりがちなので,SDカードの容量も心配である.
なので,音声ファイルは聞くときに別のマシンに移してしまって,そのマシンでエンコードなり再生なりしたほうがいいと思ったのがやってみた感想である.

参考URL: ブログログ mpg321を一般ユーザーで再生できるようにする。






コマンドリスト







git clone https://github.com/akiradeveloper/radikorec.git
cd radikorec/
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py 
vi ./compile 
vi ./setup.py 
sudo make install
./compile  #失敗
sudo apt-get update
sudo apt-get install libssl-dev 
./compile 
sudo ./setup 
sudo apt-get install ffmpeg
./runtest 
vi my_script.sh
chmod +x my_script.sh 
mkdir ../radiko_data
./my_script.sh 
ffmpeg -i NHR-2014-03-30-04-20.m4a  hoge.mp3
sudo apt-get install mpg321 
sudo mpg321 hoge.mp3 








my_script.sh の中身







#!/bin/sh
radikorec \
 --channel=LFR \
 --duration=1 \
 --prefix=NHR \
 --directory=/home/deep/radiko_data





--
My Emacs Files At GitHub

2014年3月11日火曜日

Mac Port のselfupdate ができなかった時のメモ


長らく放置していたMac port.
Mac OS X も Mervericks にアップデートしたし,いい加減アップデートしないとなぁ,とselfupdate しようとすると…



$ sudo port selfupdate
---> Updating MacPorts base sources using rsync
MacPorts base version 2.1.2 installed,
MacPorts base version 2.2.1 downloaded.
---> Updating the ports tree
---> MacPorts base is outdated, installing new version 2.2.1
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl

Error: /opt/local/bin/port: port selfupdate failed: Error installing new MacPorts base: command execution failed


などと,エラーがでてしまった.

これの解決は,以下のページを参考(というかそのまま)にしたらできた.
macportをアップデートしようとしたらエラーになった。 - @thorikiriのてょりっき

要は,xcode のコマンドラインツールが入ってなかったらしい.
Mac OS X をMervericks にアップデートするとインストールし直さないといけないんだったっけ?
以下の通りコマンドを叩くと,ポップアップが出てきて,コマンドラインツールをインストールするか否かを聞いてくる.
OKを押せばインストールしてくれる.



$ sudo xcode-select --install


で,再度selfupdate を実行してみると…



$ sudo port selfupdate
Password:
---> Updating MacPorts base sources using rsync
MacPorts base version 2.1.2 installed,
MacPorts base version 2.2.1 downloaded.
---> Updating the ports tree
---> MacPorts base is outdated, installing new version 2.2.1
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl


The ports tree has been updated. To upgrade your installed ports, you should run
port upgrade outdated
$ port version
Version: 2.2.1



とちゃんとMac port が2.2.1へアップデートされたっぽい.

余談だが,バージョンを確認するときは port --version ではないので注意.
port --version と叩くと,以下の様に怒られる.




$ port --version
Error: global does not accept --version
Usage: port
[-bcdfknopqRstuvy] [-D portdir] [-F cmdfile] action [privopts] [actionflags]
[[portname|pseudo-portname|port-url] [@version] [+-variant]... [option=value]...]...

"port help" or "man 1 port" for more information.





--
My Emacs Files At GitHub