ラズパイをラジカセに

ラジカセじゃないんだけど音質的に

USBハブUSBマイクUSBスピーカーと購入。安く済ますためにRaspberry Pi Zeroを購入したというのにこの、なんだ、なんでもない。Zeroでなければ.net coreも動いたというのに……!まあいい機会なのでgolangを勉強するよ。

今日は息抜き & 購入したハードのテストを兼ねて、Raspberry Pi Zeroから音楽再生を試した。Youtubeを検索して一覧表示、選択して音声のみ再生というメソッド。古い情報(すでに更新されていないリポジトリのプレイヤーでドハマリしたり)が多かったので、速攻でキッティングできるようにメモ。

事前に

Raspberry Piに電源とUSBハブを接続。そのUSBハブにはUSBスピーカーとUSBスピーカーを接続。

再生デバイスの確認

dobusarai@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 0d8c:0016 C-Media Electronics, Inc.
Bus 001 Device 003: ID 0d8c:0103 C-Media Electronics, Inc. CM102-A+/102S+ Audio Controller
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
dobusarai@raspberrypi:~ $ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: MicroII [Audio Advantage MicroII], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
  サブデバイス: 8/8
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
  サブデバイス #2: subdevice #2
  サブデバイス #3: subdevice #3
  サブデバイス #4: subdevice #4
  サブデバイス #5: subdevice #5
  サブデバイス #6: subdevice #6
  サブデバイス #7: subdevice #7

私が購入したUSBスピーカーは、上記のカード0, デバイス0になる。default再生デバイスの確認や変更は下記が詳しい。

https://qiita.com/jumjamjohn/items/6b5d543f611f55abf254

適当なwavファイルでも拾ってきて、aplay hoge.wav で再生ができてれば問題ないはず。音量調整でalsamixerなどを使ったような気がするが、特に必要ないような気もする。異様に音量が高い、低いなどがあれば都度調べて調整。

pip3のインストール

使用するソフトウェアをインストールするために必要なので行う。

dobusarai@raspberrypi:~ $ sudo apt-get -y install python3-dev
dobusarai@raspberrypi:~ $ sudo apt-get -y install python3-pip

ソフトウェアのインストール

dobusarai@raspberrypi:~ $ pip3 install --user mps-youtube
dobusarai@raspberrypi:~ $ pip3 install --user youtube-dl

dobusarai@raspberrypi:~ $ sudo apt install mpv

PATH通す

~/.local/bin に上記の上2つはインストールされるのでPATHを通しておく。

Youtube Data API Keyの取得

defaultだと「Keyつかいまわしすぎ!」で、まずエラーになる。自身のgoogleアカウントでAPI KEYの取得が必要。下記あたりで取得方法を参照してください。念の為API KEYには制限なども設定しましたが、まあしなくても大丈夫でしょう、多分。気になる人は調べてやってください。

https://hi3103.net/notes/web/1271

起動・再生

dobusarai@raspberrypi:~ $ mpsyt set api_key <API_KEY>

初回実行のみ、api_keyを指定して実行。実行後になんかOK的なメッセージが出ます(書き留めるの忘れた)。現在は "The key, '' will now be used for API requests." こんな感じのメッセージ。

先程インストールしたmpvを再生プレイヤーに指定。

> set player mpv

今回はYouTubeのFirst Takeというチャネルにある、かぐや様二期の主題歌を再生します。


                                                                                                   _         _
                                                       _ __ ___  _ __  ___       _   _  ___  _   _| |_ _   _| |__   ___
                                                      | '_ ` _ \| '_ \/ __|_____| | | |/ _ \| | | | __| | | | '_ \ / _ \
                                                      | | | | | | |_) \__ \_____| |_| | (_) | |_| | |_| |_| | |_) |  __/
                                                      |_| |_| |_| .__/|___/      \__, |\___/ \__,_|\__|\__,_|_.__/ \___|
                                                                |_|              |___/ v0.2.8

Enter /search-term to search or [h]elp
>/the first take

"/"スラッシュに次いで検索ワードを入力。今回は"the first take"。検索結果がずらずら出てきたら通信成功。リストの左側にある番号を入力してEnter。おわり

続きを読む "ラズパイをラジカセに"

ラズパイを捨てろ!(捨てません)

生殺与奪の権を他人に握らせるな!

Raspberry Pi Zero WH 買った
昨日こんなエントリを書いて、どのようにラズパイを使っていくかなどを考えつつ調べていた。が、尽く踏みにじられてしまった。

音系のプログラミングやりたい -> NAudioを前からやってみたかったしな -> あれ?ZeroはWin10 IOT入らないみたいだぞ -> 仕方がないからとりあえずasp.net coreでkestrelでも立てて動かすか -> んんん?targetにLinux x86ないぞ? -> \(^o^)/ ※追記参照(2020-1-27)

よく調べてから買えよ、としか言えないのだが。NAudioはよく見たらMicrosoft.Win32に依存してるって書いてあるしWin10 IOTはWin10じゃねえし……。まあ、せっかく買ったしあがきまくることにした。

折れるような鈍を作ったあの子が悪いのや

で、"Raspberry Pi プログラミング"で検索しまくったのだが、まー次から次へとぱいそんぱいそんぱいそん……死ねこら!近寄るな!これなー、派遣のエージェントにも言われたし友人にも一度だけ言われたのだけど、ぱいそんなー。インデントがゲロ吐くくらいキモいとか、亀みたいに遅いとか、MLって言ったってnativeライブラリに対するラッパーがあるだけじゃんとかetcetc...は死ぬほどどうでもよくて、俺は!爬虫類が!大嫌いなんだ!昔々、まだこんなにどこもかしこもぱいそんぱいそん言われる前の新宿紀伊国屋書店。オライリー本を手にとった俺は股関節が攣ったね。

閑話休題。で、調べてみるとgolangにgobotというIOTフレームワークがあり、斜め読みした感じだとGPIOなども散見されたのでいけるかなと。音周りのライブラリには全く期待できないが、最悪WAVのcreate&playくらいは出来んだろ、と。学習途中で.net coreに魅入られてしまったので離れていたが、おべんきょうの再開ということで。

頑張れ!人は心が原動力だから 心はどこまでも強くなれる!

で、.net coreの場合だとWindowsでコード書いて、そのままLinux-x64向けにビルドして実行ファイルのみsftpでlinuxに配置して実行、ってのが可能だったのだがgolangではそうはいかないだろうからsamba立ててファイル共有までしました。今日はおわり。

追記(2020-10-26)

マジかよ。クロスコンパイルしまくりんぐじゃないですか。

https://qiita.com/Jxck_/items/02185f51162e92759ebe

追記(2020-10-27)

壮大な勘違いをしていた。なぜにラズパイがx86なのか。次のエントリで修正しました。

修正しました。てへぺろ

Raspberry Pi Zero WH 買った

これは壮大なサーガの始まりなのだよ

や、買う前からラズパイ買ったところで何やればいいんだろと思っていた。買った今も漠然としています。なんとなく考えてるのは、他のデバイス、そうだなー、スピーカー/マイクを繋げて自作ツール作ろうかな。USBやBTではなくGPIOで繋げたい。アナログというか電子工作というか、そのあたり死ぬほど弱いので。はんだごて持ってたけど捨ててしまったみたいだから買わないと。引っ越しを繰り返す民は物持ちが悪い。

SDカードリーダーが無かった

本体と電源アダプタとSDカードとHDMIケーブルが一体になったセットを買ったのだけど、SDカードリーダーを持っていなかった(捨てていた)ので速攻でamazonさんに頼む。780円?だかで問題なくOS焼けた。

SDカードリーダー

OSを焼く。そして女子高生を拾う。

SDカードリーダーが来るまで、ラズパイの公式サイトでイメージファイルをダウンロードしまくっていたのだが、そんなしょうもないことしなくてもツールから一瞬で焼くことが出来た。

https://www.raspberrypi.org/downloads/

上のRaspberry Pi Imagerをダウンロードしてインストール。起動するとシンプルなGUIがあり、OSを選択、SD(マウントドライブ)を選択、焼く。これだけ。

Raspberry Pi Imager

画面とか有線LANとかめんどくさい

これも調べたのだが、電源供給以外のケーブルは必要なかった。詳しくは下記のサイトでまとまっています。(あと、そもそも有線LANはついてません。キーボートとかめんどくさい、の誤りです)

超ミニサイズコンピュータRaspberry PiをインストールしてWi-Fiでリモート接続してみる。

補足するなら、下記くらいかな。

  • wlanとsshのファイルは、OSを焼いたあとのSD(マウントドライブ)のルートに配置する
  • 紹介されているwpa_supplicant.confの自動生成サイトでは、SSID/Passphraseを入力した後に"追加"を押してから作成ボタンを押すこと

SDぶっ刺して電源入れたら無線LANに繋がりました。試したのですがSSIDをステルスにすると接続できませんでした。おま環?

まあとりあえず

デフォのユーザ(pi)で証明書なしで入る感じのガバガバさ加減が嫌なので、ユーザの新規作成、piのグループを新規ユーザに追加、/home/piのファイルを全て新規ユーザのhomeにコピー、固定IP、鍵ファイルの作成、パスワードログオンを拒否などを設定。下は参考例。

/etc/dhcpcd.conf

#行の一番最後に追加
interface wlan0
static ip_address=192.168.0.11/24
static routers=192.168.0.254
static domain_name_servers=192.168.0.254

/etc/ssh/sshd_config

...

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no  #アンコメントしてnoに変更
#PermitEmptyPasswords no

...

ぶおーーーん!!!!!マジかよ糞箱買ってくる。

電源アダプタを使ってましたが、不要になった電子タバコのミニUSBケーブルがあったので使ってみた。stressコマンドでCPUに負荷かけてみましたが問題ないみたい。ヒートシンクもやんわりと暖かくなった程度。

ラズパイ

今日はこんな感じで。

プログラミングしたいからデバイスほしい。なに買うか。

断酒を始めてからというもの時間が余りまくる(脳が常に生きてる)ので、とにかく何かをしていないと落ち着かない。やりたいゲームは来年春のニーア1.22まで出そうもないし。で、以前こんなことをやっていたのを思い出した。そうだ、何らかのデバイスを買おう。金無いから安いやつ。

[.net framework] Pasori RC-S380でNFCのUID読み取り
https://www.dobusarai.net/blog/net-framework-pasori-rc-s380/

前職での話。要件でFelica読み取りがあったのだが、システム自体は極々単純な会員管理だったので初めは単純なWebアプリケーションを考えていた。が、当時のJavaScriptのWebUSBがバージョン違いで挙動が怪しいって話があり、結局はWebアプリケーション + Windowsアプリケーション(ChefSharp(Chromiumブラウザコンポーネント), Felica読み取り)で提案した。まー案件自体は謎理由でポシャったのだが。

当時のテストデバイスは、NFCのTYPE-A, B, F(Felica)が読めるPasori RC-S380というカードリーダを使っていた。同僚が何故か持っていたので1ヶ月ほど借りていた。

そんな感じで、何かプログラミングが活かせるデバイスが欲しい。昔はUSB指紋認証とかでフィリピンパブ向けにタイムレコーダー作ったりしたが、SDKをダウンロードするのにNDAだのなんだのめんどくさかった。手軽で何か日常生活に活きるようなデバイスはないかな。とはいえ高いものはアレだしラズパイやArduinoは何に使っていいものかわかんねえしチョイスが難しい。

define R6 オープンレイアウト(断念)

以前のエントリ( https://www.dobusarai.net/blog/define-r6/ ) の続きというかなんというか。

夏場に向けて清掃を行ったのと同時に、せっかくなのでdefine R6のオープンレイアウト化を行ってみた。5inchにはDVD-ROMドライブがあるのだが、この一年で使用した記憶もないし、USB接続のポータブルDVD-ROMドライブもあるので。

が、HDD2台を無風の裏配線空間に押し込むのはちょっと怖いわ。設置するとどういう感じなのかというと、(写真を撮るのを完全に忘れていたので)エルミタのここらへん参照( http://www.gdm.or.jp/review/2018/0124/248261/9 )。大量の画像ファイルは、すでにgoogleドライブの有料アカウントにバックアップしているので、NASかなんかを導入して内部ストレージを減らしたら再度チャレンジするかもなー。