ぼくの声優ラジオ録音環境（ラズパイ4で録音→Dropboxにアップ→LINEに通知まで）

# 自己紹介
声優さんが好きな成人男性です。
ここ数年の年間イベント参加数は二桁後半くらい。
2020年2月後半から参加予定イベントが軒並み中止延期になりモチベ大幅に衰退中。
自分の好きなタイミングで声優さんの話し声が聞けるようにラジオ録音を始めました。

大西沙織さん、大橋彩香さん、東山奈央さんの声が好きです。

# はじめに

今年に入ってからラズパイ4 2GBを使って声優ラジオを録音できる環境（俗に言う録音サーバーを）を構築したので、備忘録のために残しします。

1月初旬～中旬までラズパイ購入＋環境構築、それから運用開始、今に至る（運用期間約2ヶ月）
という感じで、録音できないトラブルが途中ありましたが、1ヶ月半程度はトラブルなく録音できています。
録音後はDropboxにアップロード、アップロード後はLINEで自分のスマホに通知してくれるようにしました。

録音したことを忘れていても自動で通知が来るので、とても便利です。

イラストにするとこんな感じ
![SnapCrab_NoName_2020-3-10_1-50-0_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191958/7e4fa1db-5376-d52f-2697-5b84ee99cdc7.png)

録音ファイルアップロード後イメージ
![SnapCrab_NoName_2020-3-10_1-51-4_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191958/69427c51-c004-62e2-777c-0481986de902.png)

LINE通知イメージ（黒塗り箇所は見られると恥ずかしいところ）
自分とLINE Notifyがいるグループラインに録音完了のメッセージが送られます。
![IMG_0905.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191958/d4095c5e-4e04-8a64-481f-9c575d3ee0e1.jpeg)

※Radikoで配信している番組を録音しているだけです。
去年末にネットラジオの録音方法について調べていたらこちらの記事を参考に自分なりにアレンジしました。
[ラズパイでラジオをタイマー録音〜Google ドライブ転送](https://qiita.com/yuppejp/items/04a904ee183dc69dcb73)

【追記】
ミューレ声優ラジオなど、超！A＆G＋を録音したい場合はこちらを参考
[超/！/A＆G/＋の自動録画環境を作った](http://yagays.github.io/blog/2014/04/01/agqr-recording-script)

# 環境
- Raspberry Pi 4 2GB
    - wi-fi接続でインターネットに接続
    
- Windows 10 
    - sshでラズパイの操作

当初はラズパイ ゼロで録音しようとしたのですが、なぜか録音に失敗・・
業務外でPDするのも面倒なので、原因はスペック不足と決めつけて、ラズパイ4を購入

# 環境構築

### Windows10で作業
- microSDカードにラズパイOSを焼く

参考サイト [Raspberry PiにOSインストールする](https://qiita.com/kanaisawa/items/4723f72a28084263ae1f)

スターターキットを買った場合には付属しているmicroSDカードにOSが既に焼かれているのでこの手順は飛ばしてOK

個人的にはダウンロードに少し時間がかかるが、GUI版をインストールするのがおすすめ。wifi等諸々の設定が楽。
**ここからの手順はGUI版のOSをインストールした前提で進めていきます**

### ラズパイをディスプレイに繋いで作業
- キーボードをJIS配列にする


sudo raspi-config の画面から設定
JIS配列にしないとキー入力にイライラしまくる

- IPアドレス固定

SSHするためにIPアドレスを事前に固定しておく 
参考： [Raspberry Pi に固定IPアドレスを割り当てる方法（Raspbian Jessie）](https://qiita.com/marie_khr/items/b088ffb252a92eee8f5d)

- wifi設定

デスクトップ画面から設定

- SSH設定をONにする

デスクトップ画面から設定
 
### Windows10からSSHでラズパイに接続して作業
**個人的必須作業**

- vimの入れ直し+設定ファイル書き換え

ラズパイにデフォルトでインストールされているvimは使いづらすぎるので入れ直します。
 
こちらを参考にvimを入れ直す。
[RaspberryPi3のセットアップ続き〜VimやNFS設定](https://qiita.com/B73W56H84/items/1d164a3c083872e10ccb)

自分は./vimrcを以下のように設定しています。

```
vi ~/.vimrc
```
```~/.vimrc
set mouse=
syntax on
set autoindent
set expandtab

```

- crontab設定

crontabは定期的にジョブを実行してくれるコマンド
ラジオ自動録音をする際には、ラジオ録音スクリプトを指定した日時に実行します。
しかし、参考記事に書いてある通り、肝心のcrontabはラズパイはデフォルトでは使えないないので、使えるように設定をする必要があります。
参考記事に従ってcrontabを有効にする。

参考：[RaspberryPi3で初めてcrontabを使う前に](https://qiita.com/Higemal/items/5a579b2701ef7c473062)

ラジオ録音環境を構築する際、crontabが予定通りに実行されない問題。。つまづいた箇所です。


**個人的オプショナル設定**
やっておくと不便なくラズパイが使える

- HDMI接続設定変更

デフォルトでは電源がONになったときにディスプレイが接続されていないと、それ以降ディスプレイの接続をしても画面の出力をしてくれないです。
普段はディスプレイに接続せずに電源つけっぱなしのラズパイですが、たまに直接操作したいときにとても不便なので、設定を変更するします。
```
sudo vi /boot/config.txt
```

以下の箇所をコメントアウトを外す（#を消す）

```/boot/config.txt
hdmi_force_hotplug=1
```

参考： [Pi/環境/ラズパイを先、ディスプレイを後からつけると映らない場合の対処方法](https://minipc.just4fun.biz/?Pi/%E7%92%B0%E5%A2%83/%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E3%82%92%E5%85%88%E3%80%81%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4%E3%82%92%E5%BE%8C%E3%81%8B%E3%82%89%E3%81%A4%E3%81%91%E3%82%8B%E3%81%A8%E6%98%A0%E3%82%89%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95)

- マウスが遅れて動く問題対処

ラズパイはなぜかデフォルトではマウスが遅れて動きます。

```
sudo vi /boot/cmdline.txt
```
こちらのファイルに以下を追加
` usbhid.mousepoll=0`

追加後は以下のようになります

```/boot/cmdline.txt
console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles usbhid.mousepoll=0                                                                                                                                                                                                                                  
```

編集を保存後、再起動


参考：[Pi/無線マウスが遅れてorカクカク動く場合の対処方法](https://minipc.just4fun.biz/?Pi/%E7%84%A1%E7%B7%9A%E3%83%9E%E3%82%A6%E3%82%B9%E3%81%8C%E9%81%85%E3%82%8C%E3%81%A6or%E3%82%AB%E3%82%AF%E3%82%AB%E3%82%AF%E5%8B%95%E3%81%8F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95)

以上でラズパイの設定は完了

## ラジオ録音準備

こちらの記事　[ラズパイでラジオをタイマー録音〜Google ドライブ転送](https://qiita.com/yuppejp/items/04a904ee183dc69dcb73)　の
パッケージを最新化～Radiko録音スクリプトをダウンロード までを実施

ラジオ録音スクリプトをGitから取得、ラジオが正常に録音できるかを確認します。

こんな便利なスクリプトを公開してくださって作成者の方には本当に感謝です。

自分はラジオ録音用スクリプト末尾を以下のように修正しました。

```.rec_radiko.sh
(末尾あたり)
ffmpeg -loglevel quiet -y -i "/tmp/${channel}_${date}" -acodec libmp3lame -ab 128k "${outdir}/${PREFIX}_${date}.mp3"
if [ $? = 0 ]; then
  rm -f "/tmp/${channel}_${date}"
  # 音声ファイルのDropboxへのアップロード処理
  /home/pi/radiko/dropbox_uploader.sh upload "${outdir}/${PREFIX}_${date}.mp3" "/radiko/${PREFIX}"

  # LINEへの通知処理
  curl -X POST -H "Authorization: Bearer xxxxxxxxx" -F "message=${PREFIX}_${date}.mp3 録音 アップロード完了 " https://notify-api.line.me/api/notify
fi
```

**※音声ファイルのDropboxへのアップロード処理、LINEへの通知処理の準備等は下記で手順を紹介**

## ラジオ録画予約準備
ここで言う「ラジオ録画予約」とは、
「ラジオ録音スクリプト（rec_radiko.sh）をcronで任意の日時に実行するようにジョブの設定をする」
ことを指します

以下のコマンドでジョブの編集をします。

```
crontab -e
```

日曜日22時から文化放送で放送している水瀬いのりさんの「水瀬いのり MELODY FLAG」を毎週録音したい場合は以下の一行を追加
この場合、/mnt/usb1/minase_inori_MELODY_FLAG配下に録音ファイルが保存される

```
# 水瀬いのり MELODY FLAG
0 22 * * 7 sleep 15; /home/pi/radiko/rec_radiko.sh QRR 30 /mnt/usb1/minase_inori_MELODY_FLAG "水瀬いのり_MELODY_FLAG"
```
vimなどで入力可能。確か、 `crontab -e` 初回実行時に何のテキストエディタを使用するかが指定できます。自分は普段から使っているvimを選択しました。

cronは以下のフォーマットでジョブの実行日時を指定する

```
# m h  dom mon dow   command
# 分 時 日 月 曜日 コマンド
```

わかりやすく枠をつけると以下のようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191958/975c52f3-30e6-b6b4-6e55-6b0b17e2999b.png)

日時箇所： 
月、日は `*` で特定の月日を指定しない、曜日を日曜日を表す `7` を記載することで毎週日曜日にジョブの実行ができます。

コマンド箇所：
先頭　`sleep 15;` は参考記事にこうすると良いと記載してあったので、そのまま何も考えずに記載しています。
`/home/pi/radiko/rec_radiko.sh` 以降がラジオ録音スクリプトの引数

```
./rec_radiko.sh <放送局のID> <録音時間(分)> <録音ファイル保存先ディレクトリ> <録音ファイルのPREFIX>
```

音声ファイルはこのようなファイル名で指定したディレクトリに保存される
`水瀬いのり_MELODY_FLAG_2020-01-19-22_00.mp3`

【参考】曜日と数字の対応

| 数字 | 曜日 |
|:--:|:--:|
|0 |日|
|1  |   月|
| 2 |    火|
| 3 |    水|
| 4     |木|
| 5    | 金|
| 6   |  土|
| 7  |   日|

【参考】Radiko放送局一覧
録画したい放送局IDはこちらで確認
[radiko 参加放送局一覧](http://www.dcc-jpl.com/foltia/wiki/radikomemo)


cronのジョブは以下で確認

```
crontab -l
```

ちなみに自分のはこんな感じ

```
root@raspberrypi:/home/pi# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# m h  dom mon dow   command
# 分 時 日 月 曜日 コマンド

# 曜日割り当て
# 0     日
# 1     月
# 2     火
# 3     水
# 4     木
# 5     金
# 6     土
# 7     日


# A&G エジソン
0 21 * * 6 sleep 15; /home/pi/radiko/rec_radiko.sh QRR 120 /mnt/usb1/AG_エジソン "AG_エジソン_TRIBAL SQUARE"

# 水瀬いのり MELODY FLAG
0 22 * * 7 sleep 15; /home/pi/radiko/rec_radiko.sh QRR 30 /mnt/usb1/minase_inori_MELODY_FLAG "水瀬いのり_MELODY_FLAG" > /var/log/radiko/minase_inori.log 2>&1

# 大橋彩香 MELODY FLAG
0 21 * * 7 sleep 15; /home/pi/radiko/rec_radiko.sh QRR 30 /mnt/usb1/ohashi_ayaka_any_beat "大橋彩香のAnyBeat" 

# 本渡楓・楠木ともりFUN’S PROJECT LAB
30 22 * * 7 sleep 15;  /home/pi/radiko/rec_radiko.sh QRR 30 /mnt/usb1/hondo_kanade_kusunoki_tomori "本渡楓・楠木ともりFU S PROJECT LAB"

# TRUE ホントのハナシ
0 1 * * 6 sleep 15; /home/pi/radiko/rec_radiko.sh BAYFM78 27 /mnt/usb1/TRUE "TRUE_ホントのハナシ"

# ネットワークIPアドレス振り直し
59 * * * * sudo dhclient wlan0                       
```

一番の試行錯誤ポイントがここ

```
# ネットワークIPアドレス振り直し
59 * * * * sudo dhclient wlan0   
```
録音サーバー運用開始当初、アップロード完了通知が来ているのになぜかラジオが録音されていない問題が起きていました。

色々コマンド操作していると、どうやらラズパイを起動してから一定時間立つと外部のサイトに繋がらない（pingが通っていなかった）問題が起きていることが判明..

調べていると、以下の記事を発見
[Raspberry Piでいろいろなネット環境でつないで外部にだけつながらない時の対処法](https://www.1ft-seabass.jp/memo/2015/05/15/raspberry-pi-dhclient-refresh-wlan/)

ネットワークIPアドレス振り直しをすると良いとのことなので、毎時59分にネットワークIPアドレスの振り直しをしてラジオ録音に失敗することを防いでいます。
この一行を追加してからは録音に失敗したことはないです。

## 録音ファイルのアップロード、アップロード完了通知の準備

Dropboxへのファイルアップロード、アップロード完了時のLINEへの通知は以下の記事を参照

- Dropboxへのファイルアップロード準備：
[【Dropbox】scriptを使用してのファイル転送処理](https://qiita.com/Dace_K/items/890e9f2fe93a66ec8e56)

Dropboxのアカウントを作成ー＞
DropboxのWeb画面でアプリを作成してApp keyとApp Seacretを取得ー＞
所定の場所からシェル（ `dropbox_uploader.sh`）をダウンロードして実行、画面に従って入力ー＞
`dropbox_uploader.sh`を録音スクリプトと同じディレクトリに配置

- LINEへの通知準備：
[[超簡単]LINE notify を使ってみる](https://qiita.com/iitenkida7/items/576a8226ba6584864d95)

LINEの通知準備は本当にかんたん

Web画面ポチポチー＞
発行されるトークンを録音スクリプト（ `rec_radiko.sh`）の `xxxxxxxxx`の箇所に記載する
（指定のURLにヘッダーを付けてPOSTするだけ。SlackにしろTeamsにしろメッセージ送信ってすごく簡単にできるようにしてくれているのありがたいですよね。）
以上


POSTでかんたんに通知が送れる

```.rec_radiko.sh
  # LINEへの通知処理
  curl -X POST -H "Authorization: Bearer xxxxxxxxx" -F "message=${PREFIX}_${date}.mp3 録音 アップロード完了 " https://notify-api.line.me/api/notify
```

【参考】
自分やってませんが、Slackでの通知の方法はこちら参照

- slackで通知する：[Slack APIを使用してメッセージを送信する](https://qiita.com/kou_pg_0131/items/56dd81f2f4716ca292ef)


以上で録画準備はすべて完了
あとはラズパイの電源を付けっぱなしにして放置するだけ。

# おわりに

投げやり箇所、表記ゆれ、語尾に句点がある、ないなどなど日本語、文章に難ありますが、ご容赦ください・・
句点つけないくせ直したい

# 追記

```
# sudo df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root      ext4        12G   12G     0  100% /
devtmpfs       devtmpfs   841M     0  841M    0% /dev
tmpfs          tmpfs      970M     0  970M    0% /dev/shm
tmpfs          tmpfs      970M   25M  946M    3% /run
tmpfs          tmpfs      5.0M  4.0K  5.0M    1% /run/lock
tmpfs          tmpfs      970M     0  970M    0% /sys/fs/cgroup
/dev/mmcblk0p6 vfat       253M   52M  201M   21% /boot
tmpfs          tmpfs      194M     0  194M    0% /run/user/1000
tmpfs          tmpfs      194M     0  194M    0% /run/user/109
```
気づいたら /dev/rootの残り容量が0%になっていた。
このような場合には、 `sudo du -xh / | grep -P "G\t"`で容量食っているディレクトリを確認して削除する。
ログが溜まりすぎていた。

```
# sudo du -xh / | grep -P "G\t"
1.2G    /usr/share
2.7G    /usr/lib
4.0G    /usr
1.9G    /var/log
2.1G    /var
1.8G    /mnt/usb1/AG_エジソン
4.5G    /mnt/usb1
4.5G    /mnt
12G     /
```
# おまけ
### ラズパイ4について購入前に自分が気になっていたこと
- 発熱ってどうなの？ー＞ヒートシンクを付けていても結構熱い

以下キャプチャはヒートシンクを付けないで録音サーバーとして運用し始めたときに本体温度を測ったときのもの
ヒートシンクをつければ少しはマシになりますが、まあ熱いです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191958/bab38bfc-d482-2cc1-1e80-5c20e12ed9c7.png)

- 電源は[AnkerのUSB充電器](https://www.amazon.co.jp/gp/product/B01IT02UIW/ref=ppx_yo_dt_b_asin_title_o08_s00?ie=UTF8&psc=1)でも大丈夫？ー＞自分は大丈夫でした


最後に我が家のラズパイ4とディスプレイ
![IMG_0925.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191958/15118d34-7a08-d88d-412d-98628444220b.jpeg)

ディスプレイ左に写っているラズパイはNASサーバーとして使用してます