30年ぶりに復活した隊長の電子工作指令本部
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
InternetラジオとMP3プレイヤーの原理は、音楽データを読み込んでそのままデコーダーに
流し込む処理を繰り返すだけという点で同じです。
両者の違いは、データの取得元がソケット通信なのか、ファイルなのかの違いでしかないので
まとめて記述します。
【デコーダー】
秋月で手に入るデコーダーの VS1053b は、高機能でオールインワン的なチップで、簡単に
使う事ができます。
データシートが日本語訳されているので助かります⇒ VS1053b日本語データシート私家版
ちなみに、前身である VS1011e は、メジャーで作例も多く HoneyBox でも使いました。
VS1011e に比べて、VS1053b は、
・より多くの圧縮形式がサポートされた。(本作ではあまり関係ない)
・音声出力の歪率が改善された。
・外付けクリスタルのデフォルトが、24.576MHz ⇒ 12.288MHz へ変更になった。
・1.8VのCore用電源を別途与えなければなならない。
・再生停止や中断の際に、ソフトウェアリセットがいらなくなった。
・他に、色々機能が付いた・・(けど、本作では使っていません)
下は、本作での回路です。
ほぼ、データシートのサンプル回路と同じです。細かい説明はそちらを参照した方が良いでしょう。
本作では、SPIクロックは2MHzで通信しています。といいますか、それ以上、上げる事は出来
ませんでした。データシートでは SCI_CLOCKF の設定次第と記載されているのですが、なぜ
か変わりませんでした。
ただ、2MHz で十分なので、消費電流を抑えるためにもこれ以上上げなくても良いとは思います。
【microSDカード】
プレーヤーとして再生する音楽ファイルを保存します。設定ファイルの保存にも使用します。
下は、micorSDカードとPICの接続です。
L1, C22, C23 は、オーディオ回路へのノイズ防止です。オーディオ回路がないのであれば、
10uF程度のパスコン1つだけで良いと思います。
基本、SPI接続するだけなのですが、プルアップ抵抗が2つ(47K~100K)必要です。
CS に入っているプルアップ(R23)は、PICのポートが不定状態時(起動直後等)に、安定さ
せるためにあります。
SPIクロックの最大周波数は、使うカードによると思いますが、秋月で売っているSanDiskの
microSDだと、約20MHz程度です。下記は、本作でのSPIクロック周波数です。
・プレイヤー時: 4MHz
・FTPServer用モード: 20MHz
尚、カードの中のファイルにアクセスするために、自作のセクタリードライトプログラムと、
FatFs を使わせてもらってます。
【SHOUTcast】
インターネットラジオにおける、音声ストリームの配信方法には、いくつかの仕様が存在していて
詳しくは知らないのですが、SHOUTcast というのが代表的な方式で、本作ではこれに準拠?
しています。
本家は SHOUTcast ですが、ここ以外にも多くのサイトで SHOUTcast 方式がサポートされて
いるようです。
プログラムフローを簡単に説明すると、
①放送局のURLにHTTPリクエストを投げて、プレイリスト(拡張子 .pls のテキスト)を受信する。
②プレイリストには複数のURLが記述してあるので、任意のURLにHTTPリクエストを投げる。
③HTTPレスポンスヘッダから必要な情報を取得したら、後はひたすら受信してデコーダーへ流す。
④停止する場合は、デコーダーを停止して、ソケットをクローズする。
と、基本これだけです。
試しに、下のリンクを右クリックしてファイルに保存して中を見てみてください。
SKY.fm 80s (http://yp.shoutcast.com/sbin/tunein-station.pls?id=737152)
中に書いてある、File1=http://68.68.105.146:80 というのがストリームのURLです。
ここにHTTPリクエストを投げて、音楽データの受信を開始します。
ちなみに、ストリームのURLは、複数書いてありますが、大抵全て同じ内容です。本作では
常に先頭に書いてあるURLへ接続します。
後、SHOUTcastには、音楽データに混じって定期的にメタデータ(現在の曲名等)を送って
もらえる仕組みがあります。本作のソースコードでは一応対応しましたが、メタデータ情報は
使わなかったため、リクエストしないようにしてあります。
【バッファメモリ】
組込み機器のストリーミング再生で一番の悩み所は、速度もさることながら、メモリのサイズで
しょう。使うマイコンやそのクロック、LANモジュールの性能、配信サイトの性能や、通信速度の
ばらつき率等、いろんな要素が絡んでくるので一概にコレというのは無いとは思います。
放送ストリームの一般的なビットレートは96Kbps~128Kbpsのようですが、それが実用的に
視聴出来る最低限は、概ね下記のようになりました。
※ 256Kbpsでは試していませんが、さすがに厳しいと思われます。
・ソケットの受信バッファサイズ: 8KB
・アプリの受信バッファサイズ: 32KB~48KB
・PIC32MXのクロック: 8MHz
注意点として、RAMは外付けでなく、PICのRAMという点です。もしこれが外付けなら、転送に
パワーをもっていかれるので、もっと多くのリソースが必要になると思われます。本作で
PIC32MX を使っている最大の理由がここにあります。
最終的には、空きメモリを全てアプリの受信バッファに割り当てて、105KB の受信バッファに
しました。ソケットの方は、8KBのままで十分なようです。
それにしても、意外と少ないリソースで実用的に視聴できたので、ちょっと拍子抜けしました。
流し込む処理を繰り返すだけという点で同じです。
両者の違いは、データの取得元がソケット通信なのか、ファイルなのかの違いでしかないので
まとめて記述します。
【デコーダー】
秋月で手に入るデコーダーの VS1053b は、高機能でオールインワン的なチップで、簡単に
使う事ができます。
データシートが日本語訳されているので助かります⇒ VS1053b日本語データシート私家版
ちなみに、前身である VS1011e は、メジャーで作例も多く HoneyBox でも使いました。
VS1011e に比べて、VS1053b は、
・より多くの圧縮形式がサポートされた。(本作ではあまり関係ない)
・音声出力の歪率が改善された。
・外付けクリスタルのデフォルトが、24.576MHz ⇒ 12.288MHz へ変更になった。
・1.8VのCore用電源を別途与えなければなならない。
・再生停止や中断の際に、ソフトウェアリセットがいらなくなった。
・他に、色々機能が付いた・・(けど、本作では使っていません)
下は、本作での回路です。
ほぼ、データシートのサンプル回路と同じです。細かい説明はそちらを参照した方が良いでしょう。
本作では、SPIクロックは2MHzで通信しています。といいますか、それ以上、上げる事は出来
ませんでした。データシートでは SCI_CLOCKF の設定次第と記載されているのですが、なぜ
か変わりませんでした。
ただ、2MHz で十分なので、消費電流を抑えるためにもこれ以上上げなくても良いとは思います。
【microSDカード】
プレーヤーとして再生する音楽ファイルを保存します。設定ファイルの保存にも使用します。
下は、micorSDカードとPICの接続です。
L1, C22, C23 は、オーディオ回路へのノイズ防止です。オーディオ回路がないのであれば、
10uF程度のパスコン1つだけで良いと思います。
基本、SPI接続するだけなのですが、プルアップ抵抗が2つ(47K~100K)必要です。
CS に入っているプルアップ(R23)は、PICのポートが不定状態時(起動直後等)に、安定さ
せるためにあります。
SPIクロックの最大周波数は、使うカードによると思いますが、秋月で売っているSanDiskの
microSDだと、約20MHz程度です。下記は、本作でのSPIクロック周波数です。
・プレイヤー時: 4MHz
・FTPServer用モード: 20MHz
尚、カードの中のファイルにアクセスするために、自作のセクタリードライトプログラムと、
FatFs を使わせてもらってます。
【SHOUTcast】
インターネットラジオにおける、音声ストリームの配信方法には、いくつかの仕様が存在していて
詳しくは知らないのですが、SHOUTcast というのが代表的な方式で、本作ではこれに準拠?
しています。
本家は SHOUTcast ですが、ここ以外にも多くのサイトで SHOUTcast 方式がサポートされて
いるようです。
プログラムフローを簡単に説明すると、
①放送局のURLにHTTPリクエストを投げて、プレイリスト(拡張子 .pls のテキスト)を受信する。
②プレイリストには複数のURLが記述してあるので、任意のURLにHTTPリクエストを投げる。
③HTTPレスポンスヘッダから必要な情報を取得したら、後はひたすら受信してデコーダーへ流す。
④停止する場合は、デコーダーを停止して、ソケットをクローズする。
と、基本これだけです。
試しに、下のリンクを右クリックしてファイルに保存して中を見てみてください。
SKY.fm 80s (http://yp.shoutcast.com/sbin/tunein-station.pls?id=737152)
中に書いてある、File1=http://68.68.105.146:80 というのがストリームのURLです。
ここにHTTPリクエストを投げて、音楽データの受信を開始します。
ちなみに、ストリームのURLは、複数書いてありますが、大抵全て同じ内容です。本作では
常に先頭に書いてあるURLへ接続します。
後、SHOUTcastには、音楽データに混じって定期的にメタデータ(現在の曲名等)を送って
もらえる仕組みがあります。本作のソースコードでは一応対応しましたが、メタデータ情報は
使わなかったため、リクエストしないようにしてあります。
【バッファメモリ】
組込み機器のストリーミング再生で一番の悩み所は、速度もさることながら、メモリのサイズで
しょう。使うマイコンやそのクロック、LANモジュールの性能、配信サイトの性能や、通信速度の
ばらつき率等、いろんな要素が絡んでくるので一概にコレというのは無いとは思います。
放送ストリームの一般的なビットレートは96Kbps~128Kbpsのようですが、それが実用的に
視聴出来る最低限は、概ね下記のようになりました。
※ 256Kbpsでは試していませんが、さすがに厳しいと思われます。
・ソケットの受信バッファサイズ: 8KB
・アプリの受信バッファサイズ: 32KB~48KB
・PIC32MXのクロック: 8MHz
注意点として、RAMは外付けでなく、PICのRAMという点です。もしこれが外付けなら、転送に
パワーをもっていかれるので、もっと多くのリソースが必要になると思われます。本作で
PIC32MX を使っている最大の理由がここにあります。
最終的には、空きメモリを全てアプリの受信バッファに割り当てて、105KB の受信バッファに
しました。ソケットの方は、8KBのままで十分なようです。
それにしても、意外と少ないリソースで実用的に視聴できたので、ちょっと拍子抜けしました。
隊長
カテゴリー
PR