数年前に、ルーターからネットワークサウンドカードを作成する方法に関する記事を既にレイアウトしました 。 そのオプションには、アクティブな音源とスピーカーが必要でした。 ポータブル版はかさばるので、完成品を購入することにしました。 可用性の理由と最も安いオプション(50ユーロ)として、私はrenkforce IR 1を選択しました 。
主な特徴のうち、次のことが私にとって重要でした。
DLNA
DLNAの存在により、サウンドをLinuxからインターネットラジオに直接リダイレクトできます。 これは、少なくとも3つの方法で実行できます。
- パッシブ。 サウンドカードで再生されるすべてをファイルに記録し、 minidlnaサーバーを介してこのファイルをラジオで再生します。
- アクティブ Rygelを使用します 。これにより、仮想サウンドカードが作成され、そこからすべてのサウンドがDLNAを介して送信されます。 スクリプトで実行します。構成ファイルが必要です。
- アクティブ、シンプル。 プロジェクトhttps://github.com/masmu/pulseaudio-dlnaを使用します 。 Ubuntuのppaリポジトリを使用して手動でインストールするか、 Ubuntu 16.10からパッケージをバックポートできます。
これらの方法の詳細については、 こちらをご覧ください 。
Androidフォンから直接音楽を再生することもできます。 DLNAサポートは、Samsungのプレインストールされた音楽プレーヤーでのみ見つかりました。 Google PlayでDLNA対応の音楽プレーヤーを見つけようとしましたが、役に立ちませんでした。
Wifi
唯一の小さな欠点は、802.11nプロトコルのサポートがないことです。
音
このカテゴリのデバイスの音はかなりまともです(10Wで1人のスピーカー)。 私はオーディオファンではありませんが、通常のラップトップに組み込まれているスピーカーとの違いは重要です。 ベース、ジャズサウンド、ロック、エレクトロニックミュージックもあります。 2つの列を持つバリアント( renkforce IR 2モデル)がありますが、私はそれを不要とは考えませんでした。
スクリーン
画面は普通です。 インターフェイスは非常にフレンドリーです...
ただし、独自のラジオ局を追加する手順には、多くの要望があります。
プレイリスト
プレイリストのため、私はこの記事を書くことにしました。 リモートコントロールまたはスクロールホイールを使用してラジオステーションのURLを手動で駆動することも別のアクティビティです。 リモコンの数字ボタンを使用するときの文字の出現順序は、プッシュボタン電話でSMSを入力するときに使用するものとは非常に異なります( 2の場合、これは「2 ABC ab c」などのシーケンスです)。 スクロールホイールを使用する場合は、アルファベットの各文字をスクロールする必要があります。 Webインターフェースからプレイリストを追加できるかどうかを分析することにしました。
Webインターフェイスが削減されました。 AirMusicヘッダーのある開いている80番目のポートには、設定ラベルのみが表示されます。 HTMLは、ポート8080に存在しないCSSスタイルを指します。 8080ポート自体には、デフォルトで404 Not Foundと表示されます。
幸いなことに、telnetポートが利用できました。 ルートユーザー名とパスワードパスワードを使用して、組み込みのbusyboxにアクセスできました。 内部デバイスの調査により、次の情報が得られました。
- これらはすべて、ARMアーキテクチャのプロセッサで動作します。
- httpdサーバーはポート8080でリッスンし、 / UIDataにある静的変数をホストします。 CSSスタイルやその他の有用な情報はありませんでした。
- UIProtoはラジオの心臓部です。 ポート80をリッスンし、 mplayerを起動し、画面に情報を表示するなど 、静的にコンパイルされたアプリケーション。 インターネット上のこのバイナリの名前への参照の数によって、それはほとんどの中国のインターネットラジオのためにアウトソーシング会社(mediayou.net)によって開発されたようです。
UIProtoは、お気に入りプレイリストをファイル/flash/myradio.cfgにバイナリ形式で保存します。 端末出力から読み取ることは可能ですが、テキストとしてのみ可能です。 ファイルを完全に取得するには、少し汗をかかなければなりませんでした。 幸いなことに、ラジオのbusyboxはftpputおよびftpgetコマンドをサポートしてコンパイルされています 。 FTPサーバーをセットアップした後、それらを使用して、さらに調査するためにファイルをコンピューターにコピーしました。
xxd(1)ユーティリティでバイナリファイルを分析しました。 およそのファイル構造は次のようになります。
Amount of entries: 2b Every entry len: 366b 0x00: 1b 0x00|0x02|0x03: 1b 0x20 (32): 1b 0x00: 6b 0x07|0x05: 1b len(0xTITLE+1): 1b 0x80: 1b 0xTITLE: 40b 0x00: 59b 0xURL: 250b 0x00: 5b 0x00: 2b
構造内の一部の要素が、割り当てられていない割り当てられたメモリからの通常のゴミである可能性を排除しません。 これらの要素でゼロを使用しても、最終結果には影響しません。
Cのユーティリティの初期バージョンでは、ハードコードされたプレイリストが保持されていました。 単一リンクリストを使用して、構造をユーティリティメモリに保存しました。 最初の起動の結果は、デバイスにダウンロードしたテストバイナリプレイリストによって提供されました。 未知の構造要素にゼロがあったとしても、新しいプレイリストは正常に読み込まれました。 ユーティリティの最終バージョンは、CSVファイルからプレイリストを読み取り、それをバイナリ形式に書き込みます。 素晴らしいボーナスは、URLの代わりにラジオステーションのヘッダーを使用したことです(以前のリストのラジオステーションはhttp://1.2.3.4:8080/radio.mp3として表示されていました)。
結論として、実験のために、ラジオ自体で直接実行できる静的ネイティブバイナリをコンパイルしようとしました。 これによる実用的な利点はありませんが、httpdデーモンを作成して、Webインターフェースから直接ラジオステーションを編集できるようにすることができます。 よりグローバルで実現不可能なアイデアは、インターネットラジオ用の完全にオープンソースのファームウェアを書くことです。
更新後にUIProtoでプレイリストを再読み込みする方法は、まだわかりません。 筋金入りの方法- 同期と再起動を使用します。
プレイリストをラジオにダウンロードするために、 expect(1)を使用してスクリプトを作成しました。
USB
ボードにははんだ付けされていないUSBがあります。 dmesg(1)から判断すると、非常に効率的です。 実際にそのパフォーマンスを確認する時間はまだありません。
参照資料
- githubのユーティリティ、ヘルパースクリプト、およびその他のラジオ情報のソースコード: https : //github.com/kayrus/iradio
- インターネットラジオの同様のモデルに関する情報: https : //sites.google.com/site/tweakradje/devices/abeo-internet-radio