2

インターネットラジオの内容を分析する方法を探しています。ストリームから現在のトラック、次のトラック、バンド、bpm、およびその他のメタ情報を取得できる Ruby クライアントを作成したいと考えています (例: シャウトキャストのラジオ)。誰もこれを行う方法を知っていますか? また、そのストリームを mp3 または aac ファイルに記録するにはどうすればよいですか?

すでにこれを実行できるライブラリがあるかもしれませんが、これまでのところありません。

よろしく

4

1 に答える 1

1

両方の質問にお答えします。

メタデータ

あなたが求めていることは完全に可能ではありません。次のトラックに関する情報は入手できません (すべてのステーションがプレイリストから曲を再生しているわけではないことを覚えておいてください...多くはライブ コンテンツを提供しています)。BPM などの高度なメタデータは使用できません。あなたが得るのは次のようなものです:

Some Band - Some Song

の形式{artist} - {song title}も常に守られているわけではありません。

これらの注意事項に従って、ストリーム URL に接続し、次の要求ヘッダーを使用してメタデータを要求することにより、ストリームからそのメタデータを取得できます。

Icy-MetaData: 1

これにより、ストリームにインターリーブされるメタデータを送信するようにサーバーに指示されます。約 8KB (サーバーによって応答ヘッダーで指定) ごとに、解析するメタデータのチャンクが見つかります。それを解析する方法に関する詳細な回答をここに書きました: PHP を使用してオーディオ ストリームからトラック情報をプルする 前の質問は言語固有のものでしたが、私の回答はどの言語でも簡単に実装できることがわかります。

ストリームをディスクに保存する

一般に、オーディオ再生ソフトウェアはエラーに対して非常に回復力があります。SHOUTcast サーバーはこのプリンシパルに基づいて構築されており、サーバーを通過するデータについては認識していません。エンコーダーからデータを受信するだけで、クライアントがストリームを要求すると、任意の時点でそのデータの送信を開始します。

これは、ストリーム データを保存するときに有利に使用できます。ストリーム データをファイルに書き込むだけで済みます。ほとんどのオーディオ プレーヤーで問題なく再生できます。これを MP3 と AAC でテストしました。

より準拠したファイルが必要な場合は、ライブラリを使用するか、自分でストリームを解析して適切なフレームに分割し、コードでビット リザーバーの問題を処理する必要があります。これは多くの作業であり、ファイルに実際の互換性の問題があることが判明しない限り、通常は行う価値がありません。

于 2012-11-18T05:33:52.567 に答える