2019年11月20日水曜日

ラズベリーパイでradikoラジオをつくる: その3 I2S DACでRadiko再生

I2S出力を有効にする

  • Adafruit I2S Audio Bonnet for Raspberry Piのインストールスクリプトを試してみます。これには再生開始・停止時のポップ音対策としてサウンドデバイスが使われていないときにI2Sが途切れないよう無音を再生する機能が含まれています。この無音再生機能は、インストールスクリプトを再度実行すれば無効化もできます。
  • このスクリプトを走らせると、サウンドカードはI2Sのみが有効になり、HDMI出力のオーディオエンベデッド信号は無効となります。インストールは次のようにするだけでした。
$ curl -sS https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/i2samp.sh | bash
  • インストール後に再起動します。さらにもう一度、同じスクリプトを実行し、再起動すると、音量調整機能が有効になります。(この操作を忘れて時間をかなり無駄にしました)音量調整は、alsamixerを起動し、上下キーで変更できます。
$ alsamixer

  • aplayで再生デバイスを確認すると、sndrpihifiberry(I2Sのドライバ)のみが有効になっていることがわかります


  • 次は、コマンドラインでの音量調整を試してみます。Card 0/PCMの音量を左100%、右25%に変更する例です。(注意:「100%, 25%」のように空白が入ると動きません)この音量の数値に対し、音量は(対数ではなく)リニアに変化するようです。

$ amixer -c0 sset PCM 100%,25% unmute
音量はフルスケール255に対する実数でも指定できます。
$ amixer -c0 sset PCM 25,75 unmute

DACを有効にする

  • この基板ではDACのミュート端子をGPIO 27に接続してあるので、音を出すにはHレベルにします。この操作は、いずれ選局操作のスクリプトに組み込むつもりです。とりあえず動作確認のため、dac_enable.pyとしてスクリプトを作成しました。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
GPIO_DAC_ENABLE = 27
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_DAC_ENABLE,GPIO.OUT)
GPIO.output(GPIO_DAC_ENABLE,True)

音声出力のテスト

  • メディアプレーヤー アプリである MPlayer をインストールします。
$ sudo apt install mplayer
  • このアプリで、WAV, MP3, ALAC, FLAC等の音楽ファイルを再生できます。I2Sはデフォルトのサウンドデバイスでは無いので、出力先をI2S(card 1/Subdevice #0)と指定します。ちなみにALSA(Advanced Linux Sound Architecture)はサウンドのカーネルコンポーネントの名称とのこと。
$ mplayer music.mp3

play_radiko.shでRadiko受信

$ sudo apt install mplayer
$ sudo apt install rtmpdump swftools libxml2-utils
  • ダウンロードした play_radiko.shをTera Termのscpコマンドで ~/play_radiko に転送し、実行権限を付与します。
$ chmod 777 ~/play_radiko/play_radiko.sh
  • それでは再生(受信?)してみましょう。聴取する放送局のID記号は、radikoのwikiページに書かれています。NHKも地元局のみで他地区のものは聴けません。
$ cd ~/play_radiko/
$ ./play_radiko.sh [ID] 
東京都のID(例)
TBSラジオ: TBS(関東広域圏)
文化放送: QRR(関東広域圏)
ニッポン放送: LFR(関東広域圏)
InterFM897: INT(関東広域圏)
TOKYO FM: FMT
J-WAVE: FMJ
NHK R1: JOAK(関東広域圏)
NHK FM: JOAK-FM(全国)

ラジコプレミアム(エリアフリー)対応スクリプト

$ sudo apt-get install rtmpdump swftools libxml2-utils ffmpeg libavcodec-extra-53
としたらlibavcodec-extra-53のエラーが出て失敗してしまうので、その他をインストールします。どうやらffmpegにlibavcodecの機能が組み込まれている?ようです。
$ sudo apt-get install rtmpdump swftools libxml2-utils ffmpeg
  • 記事通りrec_radiko.sh を修正しplay_radiko2.shとして保存。実行権限を付与します。
$ sudo nano play_radiko2.sh
$ sudo chmod 755 play_radiko2.sh
  • 次のようにすると再生できます。スクリプトは~/play_radiko2/に置きました。IDは放送局のID記号で前項と同様です。timeは録音時間で、元々は録音アプリだったことの名残なので0でOKです。mail addressとpasswordは、radikoプレミアムのログインIDとパスワードです。
$ cd ~/play_radiko2/
$ ./play_radiko2.sh [ID] [time] [mail address] [password]
J-WAVEの聴取例
$ ./play_radiko2.sh FMJ 0 [mail address] [password]

0 件のコメント:

コメントを投稿