お父にゃんの電子工作 -20ページ目

お父にゃんの電子工作

暇なおじさんが、電子工作(主にラジオ製作)をして勝手な感想を書く

いよいよ、Raspberry Pi Zero 2WでWebラジオを試そうと思っていたのだが、その前に、ちょっと試してみたいことが有って、以前に作ったESP32S3版のWebラジオ↓

のコードを触ろうと思って、ついでにESP32-audioI2Sライブラリの新しいの(3.4.2)にアップデートしたら、各情報表示が出来なくなってしまった


え~、と思ってGithub↓を見たら、情報を返すコールバックの仕様が全面的に変更されていた。

 

前回使っていたのは今年の3月時点で最新の3.0.13だった。

この4~5か月の間に、どんどんアップデートされているのである。

 

で、その情報を返すコールバックなのだが、

従来方式 : 個別の関数を呼ぶ形

  audio.connecttohost(stations[cur_station].c_str());
}
 
void loop()
{
    audio.loop();
}
 
// optional
void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_id3data(const char *info){  //id3 metadata
    Serial.print("id3data     ");Serial.println(info);
}
void audio_eof_mp3(const char *info){  //end of file
    Serial.print("eof_mp3     ");Serial.println(info);
}
void audio_showstation(const char *info){
    Serial.print("station     ");Serial.println(info);
}
void audio_showstreaminfo(const char *info){
    Serial.print("streaminfo  ");Serial.println(info);
}
void audio_showstreamtitle(const char *info){
    Serial.print("streamtitle ");Serial.println(info);
}
void audio_bitrate(const char *info){
    Serial.print("bitrate     ");Serial.println(info);
}
void audio_commercial(const char *info){  //duration in sec
    Serial.print("commercial  ");Serial.println(info);
}
void audio_icyurl(const char *info){  //homepage
    Serial.print("icyurl      ");Serial.println(info);
}
void audio_lasthost(const char *info){  //stream URL played
    Serial.print("lasthost    ");Serial.println(info);
}
void audio_eof_speech(const char *info){
    Serial.print("eof_speech  ");Serial.println(info);
}
 

新方式:コールバック関数が一つにまとめられて、その中で情報を仕分けする形に

    audio.connecttohost("https://ais-sa2.cdnstream1.com/b22139_128mp3");
}
 
void loop(){
    audio.loop();
    vTaskDelay(1);
}
// detailed cb output
void my_audio_info(Audio::msg_t m) {
  switch(m.e){
    case Audio::evt_info:
        Serial.printf("info: ....... %s\n", m.msg); break;
    case Audio::evt_eof:
        Serial.printf("end of file:  %s\n", m.msg); break;
    case Audio::evt_bitrate:
        Serial.printf("bitrate: .... %s\n", m.msg); break; // icy-bitrate or bitrate from metadata
    case Audio::evt_icyurl:
        Serial.printf("icy URL: .... %s\n", m.msg); break;
    case Audio::evt_id3data:
        Serial.printf("ID3 data: ... %s\n", m.msg); break; // id3-data or metadata
    case Audio::evt_lasthost:
        Serial.printf("last URL: ... %s\n", m.msg); break;
    case Audio::evt_name:
        Serial.printf("station name: %s\n", m.msg); break; // station name or icy-name
    case Audio::evt_streamtitle:
        Serial.printf("stream title: %s\n", m.msg); break;
    case Audio::evt_icylogo:
        Serial.printf("icy logo: ... %s\n", m.msg); break;
    case Audio::evt_icydescription:
        Serial.printf("icy descr: .. %s\n", m.msg); break;
    case Audio::evt_image: for(int i = 0; i < m.vec.size(); i += 2){
        Serial.printf("cover image:  segment %02i, pos %07lu, len %05lu\n", i / 2, m.vec[i], m.vec[i + 1]);} break; // APIC
    case Audio::evt_lyrics:
        Serial.printf("sync lyrics:  %s\n", m.msg); break;
    case Audio::evt_log:
        Serial.printf("audio_logs:   %s\n", m.msg); break;
    default:
        Serial.printf("message:..... %s\n", m.msg); break;
  }
}

 

また、新機能として

・Audio::evt_lyrics で、同期歌詞が検出された際に歌詞を取得できる
 (音楽と一緒にその時の歌詞を表示できる)

・Audio::evt_imageでは 再生中に見つかったアルバムアート画像等の通知イベントで、

 画像データを受け取って表示させることも可能

 

気になってしかたがないので新仕様に合わせた修正版を作ってみた↓(新機能には未対応)

(回路図等は以前の記事を参照)

 

SeeedESP32S3_WebRadio_V1_2

 

なお、コンパイル時の注意点は以前の記事と同様に、ツールメニューから

・USB CDC On BootをEnabledに設定 

 (これをしないとシリアルモニタが動かない

・Flash ROMサイズを8MBに

・パーテーションを8Mで、3M APP/1.5MB SPIFFSに

・PSRAM:OPI PSRAM に設定

 (新ESP32-audioI2SライブラリはPSRAMが必須)

ボードライブラリは3.3.0を使用

 安定版の3.0.7のほうが お勧めかも

 

で、動かしてみる。

しかし、最初は音が出なくて焦った。

何が起きているかというと、例えば

http://www.181.fm/stream/pls/181-power.pls

は、セキュアなアドレス

https://www.181.fm/stream/pls/181-power.pls

に、リダイレクトされるのだが、リダイレクトされた後に再生してくれないようだ。

仕方ないので、プログラム中のURLはリダイレクト後のアドレスに修正。

(不具合のような気がする)

 

また、以前は推奨だったPSRAMが必須となり、PSRAMを搭載していない安いESP32ボードでは動作しなくなったようだ。

 

このほかにも、VORBISコーデックが192Kbpsまでしか対応できなくなって256kbpsの

こちら(Listen.Moe JPop Vorbis)が、まとに再生できなくなった。

かといって、MP3の Listen.moe J-Pop (MP3) でも、音が途切れてしまう。

おじさんにとっては、別に聞きたい局でないので実害は無いのだが、前はちゃんと再生できていたものが出来なくなるのは、心情的に寂しいのである。

 

ならば、と新機能の歌詞や画像のデータが埋め込まれたデータを流している局はないかと、いくつかの局でシリアルモニタを観察してたのだが、おじさんが見ている限り、無いのである。

 

※)読者の方で、この局に有るよ! と言う方はコメント欄で教えて欲しい。それを表示するプログラムを作ってみます)

 

 

う~ん。

Webラジオで使う場合、今のところメリットよりデメリットが多い気がする

 

結論:

現時点WebラジオではESP32-audioI2Sライブラリは、旧の安定版(3.0.13)を使うべし。

 

おじさんは、すでにESP32-audioI2Sライブラリは3.0.13に戻した。

 

また寄り道をしてしまった。

次こそは、ちゃんとRaspberry Pi 2WでWEBラジオを試してみるのである。

 

「必ずしも新しいのが良いとは限らないのニャ」