194円(送料込み)のマイクと Raspberry Pi でボイスレコーダーを作る話し

# はじめに
　 **原因不明のサーバーのダウンが頻発**すると厄介です。ログから分かる事は突然にシャットダウンシーケンスが走り始めたという事だけなので、おそらく **瞬間的な電圧の低下** とか **高周波のノイズが電源基盤に入った** とか何かそいいう **物理的な要因** なのだろうと思うのですが、そういえばサーバ室って高周波研と薄いパーティション挟んだだけの隣だし... でも僕らはソフト屋なので電気の理屈なんてよくわからないし...

　こういう時は、まず **現場・現物をよく観察** すると **予想外のヒント** が見えてくる事が、ドラマだけでなく **現実の問題** でもよくあります

先輩A 「このボタン、軽くなら大丈夫だからちょっと押しちゃおうぜ！」
後輩B 「えー、まずいっしょそれ」
先輩A 「大丈夫、元気があれば何でも出来る！ダーッ！」

ぷちっ！
......


　最近だと **飛行機**もどんどん安全になってきていて **人為的な理由が墜落理由の大きな割合をしめる**ようになってきているそうですが、ナショジオでメーデーとか見てるとこういう時に大活躍するのが **ボイスレコーダー**ですね

　その昔、特許まとめの会で上記事案を勘案して **サーバーのスイッチ周りにボイスレコーダーを設置する**というアイデアを出して特許部の怖い人に **アマチュア発明家のアイデアみたいなのでノルマ件数稼ぎしようとするな！** と叱られた若き日の思い出も甘酸っぱく、つきましては **ボイスレコーダーを作ってみよう**と思った次第です

# 194円(送料込み)のUSBマイク
　購入当時(2016年1月5日)は **送料込みで194円**だった[USBマイク](http://www.ebay.com/itm/231668535198?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT)、 **横浜市営地下鉄の初乗りよりも安い**お値段が嬉しいです。これだと仮に届いた物がうまく使えなかったとしても、 **新横浜から渋谷にでようとして間違えて地下鉄に乗った程度の損害**ですみます

　1月5日にぽちって1月25日に届いたのがこちらです
　![スクリーンショット 2016-01-29 13.21.28.png](https://qiita-image-store.s3.amazonaws.com/0/46544/68fe199b-2639-7f05-c99a-704db70d4d92.png "スクリーンショット 2016-01-29 13.21.28.png")

すごく小さくて軽いです。本当に動くのか、この黒い部分の中に本当になにかはいっているのか心配になるレベルの **シンプルで美しい構造** です

## 組み立て
という程たいそうなものではなく、マイクを Raspberry Pi のUSB ポートに挿すだけです
![スクリーンショット 2016-01-29 13.58.59.png](https://qiita-image-store.s3.amazonaws.com/0/46544/87c29345-5b6d-bc88-75ae-b6c0df8f8226.png "スクリーンショット 2016-01-29 13.58.59.png")

## 基本設定（実は不要）
後で御説明致しますが、時々発生する数百ミリ秒程度の音飛び（ボイスレコーダーとしての機能には我慢できる範囲だと思うのですが）を気にしないのであればソフトウェアの設定は全く不要なので興味がなければこの章は読み飛ばしていただいても大丈夫です

Raspberry Pi (Raspbian は jessie でも jessie lite でもどっちでもいいです）に挿して lsusb で確認してみると嬉しいことにちゃんと認識されていて中身は C-Media の CM108 みたいです。

![スクリーンショット 2016-01-29 11.44.03.png](https://qiita-image-store.s3.amazonaws.com/0/46544/c5cc9398-5365-344d-056c-bc25b8019a98.png "スクリーンショット 2016-01-29 11.44.03.png")

ここで、時々（例えば音声認識させたい時とか）に問題になるサウンドデバイスとして認識される順番ですが、そのままだとやっぱり snd_bcm2835 に負けて二番目になります

![スクリーンショット 2016-01-29 11.44.40.png](https://qiita-image-store.s3.amazonaws.com/0/46544/fb6771c5-355a-97d0-35cd-8fd01f376703.png "スクリーンショット 2016-01-29 11.44.40.png")

でも、単にボイスレコーダーとしてつかうのであれば **snd_usb_audio は二番目のまま** で問題はないです。
別に１番をめざさなくても２番のままでいいなんて、なんという朗らかさなのでしょう

※尚、今回は関係ないですが[こちらのファイル](https://gist.github.com/UedaTakeyuki/926f6e89ec48fcde0b6f)でこのマイクの snd_usb_audio はトップにできることを確認しております


## 録音
arecord -l で見ても下記のようにカード番号1、デバイス番号0 です

![スクリーンショット 2016-01-29 11.45.13.png](https://qiita-image-store.s3.amazonaws.com/0/46544/61ef506f-78ac-b4cb-4eb7-9bc3045e926c.png "スクリーンショット 2016-01-29 11.45.13.png")

そこで、下記のようなコマンドで 8ビット 8KHz のモノラルで録音を始めます。丁度、昔の電話（[G.711](https://ja.wikipedia.org/wiki/G.711))の音質ですね

```bash:録音コマンド
arecord -D plughw:1,0 test.wav
```

これを /etc/rc.local とかに書いておくと起動後勝手に録音をはじめてくれるので便利です

![スクリーンショット 2016-01-29 13.45.58.png](https://qiita-image-store.s3.amazonaws.com/0/46544/ec7b105f-3f43-3b9c-978e-8174030983aa.png "スクリーンショット 2016-01-29 13.45.58.png")


無圧縮なのでうるさかろうが静だろうが **毎秒8kByte** ずつ test.wav ファイルが育っていくのですが、１分間で480kByte、一時間で 28.8 MByte、一日で 691.2 MByte、 **一週間録音しっぱなしでも 4.6 GByte** なので、 **無圧縮でも 8GByte の SDカード一枚で一週間もちます**。もちろん ffmpeg とかで圧縮するとさらに良いかと思いますが、ffmpeg はかなり CPU をまわしてしまうのでバッテリー駆動だと逆に連続録音時間を縮めてしまう可能性なども総合的に勘案する必用がございます

## 録音ボリューム調整
ボリューム調整でもカード番号の 1を明に -c オプションで指定して

```bash:ボリューム調整
amixer sset Mic 16 -c 1
```
このマイクは 0 - 16 の16段で調整が可能なようで、16が最高感度のようです

見た目の通り **あまり感度は良くなく、マイクの側で話さないと拾ってくれない**のですが、逆に余計な音をあまり拾わないのでかえってよいかも

## 再生
デフォルトの設定だと Raspberry Pi を HDMI でテレビとつなぎ

```bash:再生コマンド
aplay test.wav 
```
でテレビのスピーカーから再生されるようです

jessie lite のデフォルトだとテレビはこういう感じの画面かと思いますがここから音がでます

※当然なのですがイヤホンを挿せばイヤホンから再生されます

![スクリーンショット 2016-01-29 13.21.38.png](https://qiita-image-store.s3.amazonaws.com/0/46544/331d33a5-37f0-75d2-699e-3372d97777cf.png "スクリーンショット 2016-01-29 13.21.38.png")

# 音飛び対策

ここまで組み立てもなにもなし、ソフトの設定も不要と好い事づくめだったのですがちょっと残念な事に長時間録音していると下記のように時々音が飛びます

![スクリーンショット 2016-01-29 12.40.07.png](https://qiita-image-store.s3.amazonaws.com/0/46544/d1b64154-ac37-9725-972c-c35a27819e86.png "スクリーンショット 2016-01-29 12.40.07.png")

これは[ファイルシステムとSDカードの組み合わせによるcpuのストールが原因で、ext4 や FAT よりもさらに速いXFSを使うとこの現象はおきなくなる](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=43738)とのことでした。
そこで、下記のように gparted 等で XFS のパーティションを作って、そこに録音する事にします

![スクリーンショット 2016-01-27 10.12.45.png](https://qiita-image-store.s3.amazonaws.com/0/46544/2c97c679-596d-d3a2-6e41-eac84f3e45b5.png "スクリーンショット 2016-01-27 10.12.45.png")

尚、以前も[こちら](http://qiita.com/UedaTakeyuki/items/1b9708cd40d5f83d4b7c)や[こちら](http://qiita.com/UedaTakeyuki/items/18d5f819c7ef158ea157)で少しご紹介させていただいたのですがRaspbian の SD カードのパーティションの操作は PC よりも **Raspberry Pi 自体で** おこなったほうが準備の手間等が楽ですし、失敗して **大事な PC の HDD を壊す** 心配もないです

　 **SDカードスロットに挿している SD のパーティションをいじることは無理**なので、下記のように **USBカードリーダー** を用意し、パーティションを操作したい SD カードを USBカードリーダーに挿して別の SD カードで起動した Raspberry Pi から編集すると楽です。この時、USBカードリーダー上の SD カードは **/dev/sda として上記写真のようにパーティションを操作** することができます

![スクリーンショット 2016-01-29 17.02.45.png](https://qiita-image-store.s3.amazonaws.com/0/46544/4b3ffbc1-8da9-f6e5-a46b-06fa8f376cd7.png "スクリーンショット 2016-01-29 17.02.45.png")

XSF に録音すると確かに音飛びがなくなりました。すばらしい

# 結び
　ボイスレコーダーを用意する時は一言その旨ことわっておくほうが職場の人間関係が悪くならなくていいと思います。「君たちを疑ってるわけではないんだけど」などといういささか見え透いて感じる言い訳でも、一言あるだけで不思議とソフトな雰囲気になります

# related works
というかすでに Raspberri Pi にマイクを設定して音声認識をさせる先行事例の紹介が[文献4](http://qiita.com/t_oginogin/items/f0ba9d2eb622c05558f4)や[文献5](http://qiita.com/kinpira/items/75513eaab6eed19da9a3)など沢山ある中で、本稿には全然進歩性がなく、むしろ使い方として退行してますし... 

単に安いマイクが使えました、という紹介ぐらいの意味しかなかったと思います。どうもすみません ^^;;;

# references
1. [194円の USB マイク](http://www.ebay.com/itm/231668535198?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT) eBay のサイトです

2. [Raspbian Jessie で usbマイクの優先順位を上げる方法](http://raspberrypi.stackexchange.com/questions/40831/how-do-i-configure-my-sound-for-jasper-on-raspbian-jessie) 本稿では関係ないとことわりながら上で補足した gist の元ネタです。jessie になって 設定方法がかわりました

3. [Raspbian への xfs のインストール](http://www.limemo.net/blog/2013/12/ラズベリーパイを使ってみる-標準より高速なフ.html) 
- [Raspberry Pi で音声認識](http://qiita.com/t_oginogin/items/f0ba9d2eb622c05558f4) ALSA のコマンド等を勉強させていただきました。大変参考になりました
- [簡単にできる！音声認識と音声合成を使ってRaspberrypiと会話](http://qiita.com/kinpira/items/75513eaab6eed19da9a3) ALSA のコマンド等について勉強させていただき大変参考になりました。どうもありがとうございました

# futur works
ちなみにこのマイクでも音声認識の入力には十分でしたので、その旨あわせてご報告させていただきます