ホームページ>H8をMacで>その9・インターネットラジオを聴きたい(ほぼ解決編)
目次
その9・インターネットラジオを聴きたい(ほぼ解決編)
目的と経緯
以下は、マイコンボードでインターネットラジオを再生することを模索した際の覚書です。
長らくの懸案だった「H8でインターネットラジオを再生する」ですが、ほぼ達成する事が出来ました。(「ほぼ」というのが微妙ですが、詳細は「考察」参照。)
それも、完全な「他力本願」で、です。
使わせて頂いたソフトウェアは、以下のサイトで公開されていたものです。
参考サイト(1):電子工作: Network Appliance 2 rev.b
サイト自体はPart 6当時から存じ上げていて、ソースもダウンロードさせて頂いていたのですが、当時はTOPPERS移行前だった事、また、移行後も(その頃は確か)本体部分のみの公開で、自分には動作環境(Makefile等)を一から構築する力がないので、再利用については諦めていました。
ところが、最近(2012.03)になって再びアクセスしたところ、Makefile等もアップされていて、これなら自分にもなんとかなるかも、と思って再開した次第です。
なお、作者様も言及されているとおり、若干の不整合(と、自分のハードウェア構成に合わせ込む作業)がありましたが、容易に対応可能でした。
方針
作者様とハードウェアの構成パーツは共通なので、基本的にはそのままで動く筈です。
なので、まずは以下の方針で行くことにしました。
- ROM上での動作を想定しているが、RAM上で動作させる事とする。
- 作者様CPUボードのクロックが25MHzにに対して、こちらは20MHzのままなので、必要に応じてソースを書き直す。
(jsp側は20MHzを想定しているので、特に何もしなくていい筈。)- SDカードとボードの接続は、前回のテストでシリアル接続にしてあったので、そのまま使うこととする。
(CSのみピンアサインが異なるので、ソースを書き直して対応。)- MP3デコーダとボードの接続は、現状のピンアサインのまま、即ち、汎用ポート&手クロック方式とし、ソースを書き直して対応。
- FTPやTelnet等、こちらでは必要ないものも含まれてるが、まずは動作確認が目標なので、手は付けない。
- DHCPにも対応しているようだが、ボードのIPアドレスは固定(192.168.1.200)とする。
作業の記録
以下は対症療法的試行錯誤の結果を整理したものです。漏れや何か問題がある可能性があります。
<ディレクトリ(フォルダ)の再編成>
<Makefileの編集>
- TINETを使うので、その7a・TOPPERSに移行する(ネットワーク編)で作成したjspを用いる。
- jspを、~/Documents/h8-Toppers/netRadio/に置いた。
- NA2-src-20070701.tar.gzとNA2_etc_20100904.zipをダウンロードし、解凍。
- NA2_etc_20100904内のsrcを、NA2-src-20070701内のsrcで置き換え。
- NA2_etc_20100904をjsp内に移動し、(名前が長いので)NA2にリネーム。
注)以下は、CPUクロック=20MHz、VS1011eクロック=14.318MHzを想定しています。
<ソースの編集>
- NA2/Makefile
以下の項目を書き換え# ターゲット名の定義
CPU = h8
#SYS = nkev_010h8
#SYS = akih8_3048f
SYS = akih8_3069f
#SYS = akih8_3069f25
TOOL =
# 実行環境の定義(どれにも該当しない場合は,すべてコメントアウトする)
# (ターゲット依存に上書きされる場合がある)
DBGENV := GDB_STUB
# DBGENV := ROM
# DBGENV := TNCT_MONITOR
# 共通コンパイルオプションの定義
CDEFS := $(CDEFS) -DVS1011E_CLOCK=14318000
#CDEFS := $(CDEFS) -DVS1011E_CLOCK=12288000
#CDEFS := $(CDEFS) -DVS1011E_CLOCK=12000000
# アプリケーションプログラムに関する定義
vs1011e_util.o newlib_wrap.o を削除(ソースが存在しないため)
- NA2/tinet_app_config.h
H8ボードのIPアドレスを、自分の環境に合わせて設定#ifdef SUPPORT_ETHER #ifdef DHCP_CFG #define IPV4_ADDR_LOCAL MAKE_IPV4_ADDR(0,0,0,0) #define IPV4_ADDR_LOCAL_MASK MAKE_IPV4_ADDR(0,0,0,0) #else /* of #ifdef DHCP_CFG */ #define IPV4_ADDR_LOCAL MAKE_IPV4_ADDR(192,168,1,200) #define IPV4_ADDR_LOCAL_MASK MAKE_IPV4_ADDR(255,255,255,0) #define IPV4_ADDR_DEFAULT_GW MAKE_IPV4_ADDR(192,168,1,1)- NA2/src/na2.h
先頭部分に以下を追加#include <t_services.h>- NA2/src/na2.cfg
#define _MACRO_ONLY の下に、以下を追加#include "na2.h"- NA2/src/mmc_io.h
SDカードのCS信号ピンアサインに合わせた変更(ピンアサインが同じなら不要)/ハードウェアで論理が反転している?ので逆を指定#define MMC_BIT_nCS 0 /* #define MMC_ENABLE_CS (PBDR.BYTE &= (0xff - MMC_nCS)) #define MMC_DISABLE_CS (PBDR.BYTE |= MMC_nCS) */ #define MMC_DISABLE_CS (PBDR.BYTE &= (0xff - MMC_nCS)) #define MMC_ENABLE_CS (PBDR.BYTE |= MMC_nCS)- NA2/src/vs1011e_app.h
バッファサイズを拡張(インターネットラジオの音切れ対策の暫定値)//#define MSG_BUF_SIZE (1024*4) #define MSG_BUF_SIZE (1024*8) /* 音声バッファのサイズ */ //#define VS1011E_BUFSIZE (150*1024) #define VS1011E_BUFSIZE (240*1024)- NA2/src/vs1011e_io.h
- NA2/src/vs1011e_access.h
- NA2/src/vs1011e_access.c
上記3ファイルについてはこちらを参照(これらはMP3デコーダの接続に汎用ポートを使用した事による変更であり、シリアルポートの場合は不要)
ビルドする
TINETを含むため、make-3.79を用いてビルドを行いました。(その7a・TOPPERSに移行する(ネットワーク編)参照)
jsp.srecが、NA2フォルダ内に作成されました。$ cd /Users/hoge/Documents/h8-Toppers/netRadio/jsp/NA2
注)2行目のexportは、gccの場所にパスを通すためのもので、あらかじめ設定してあれば不要。
$ export PATH=/Applications/h8/Local/bin:${PATH}
$ /usr/local/bin/make clean
$ /usr/local/bin/make depend
$ /usr/local/bin/make
(数カ所でwarningが出ますが、そのままでも動作しました。最終的にはつぶしておいた方がいいとは思いますが…。)
動作テストの前準備
注:以下の、Webブラウザでの操作に関する記述は当方の解釈によるもので、作者様の公開情報ではありません。そのため、不正確である可能性があります。本ソフトウェアの操作は、Webブラウザから行います。
そのために必要なhtmlやcgiを、あらかじめSDカード上にコピーしておきます。
また、音楽再生のために、MP3ファイルもコピーしておきます。
- SDカードのルートディレクトリに、「http」という名前のフォルダを作成
- NA2/src/sysinfoフォルダを、「http」内にコピー
- /http/sysinfo/image/sec/ を /http/sysinfo/ にコピー(コピーであって、移動ではない)
(注:一部cgiがこの階層にある事を想定しているため。最終的にはソースを改変した方がいいとは思うが、動作確認優先のため、こうした。)
- SDカードのルートディレクトリに、「mp3」という名前のフォルダを作成
- 適当なMP3ファイルを、「mp3」内にコピー
(注:ロングファイルネームには対応していないので、8文字の英数字にしておいた方が、後で分かりやすい。)
動作テスト
ビルドしたjsp.srecをMac-H8ToppersからH8 用簡易モニタにアクセスしてRAMに転送し、実行してみました。
各タスクが起動して、指示待ち状態になる事が確認できました。
(オリジナルはROMに格納して起動するようになっていますが、RAM上でも問題ないようです。)
ここで、Webブラウザを起動し、「http://192.168.1.200/sysinfo/image/control.htm」と打ち込みました。
(注:IPアドレスは、ここの設定に合わせます(DHCPについては未確認)。また、「http」はソフト内で付加するため、ここでは不要です。)
コントロールパネルが表示されました。
なお、ユーザ名とパスワードを要求されたら、SDカードの/http/sysinfo/image/sec/htaccessに書かれているものを指定(または、自分で追加)します。
まずは、SDカード上に置いたMP3ファイルを再生してみました。
コントロールパネル左ペインの「音楽一覧」をクリックして、表示される曲リストから、曲をクリックします。
結果、音楽が再生されました。(ただし、64kbpsでエンコードしたもの。詳細は「考察」参照。)
次に、インターネットラジオを再生してみました。
コントロールパネル左ペインの「Webラジオの再生」をクリックして、表示される画面で局を指定します。(IPアドレス指定の方)
結果、ラジオが再生されました。(ただし、64kbpsの局。詳細は「考察」参照。)
あと、システムログがSDカード上に書き込まれるのですが、これも確認できました。
考察
音楽再生について、当初は、SDカード/インターネットラジオとも、ノイズ混じり&スロー再生になってしまいました。
まずはSDカードですが、ノイズ混じり&スロー再生ではあるものの、演奏が途中で途切れる事はありませんでした。
つまり、以前からの懸案であった「再生中はデータの取得が止まる」という問題点はクリアできている、と見て良さそうでした。
これは、マルチタスクの威力(データ取得とデコーダへの送出は、メールボックスを介した別タスクになっている。)と考えられ、また同時に、データ送出における手クロック方式がダメ、ということもなさそうです。
ここで、MP3ファイルの仕様を確認してみたところ、128kbpsでエンコードされていました。
作者様のサイトでは、MP3ファイルは192kbpsまで確認済とのことですが、この辺はクロック差やROM/RAMの違いが関係している可能性もあります。
そこで、試しにビットレートを64kbpsに落としたMP3を作成して再生してみたところ、…、正常に再生されるようになりました\(^_^)/。
次にインターネットラジオですが、調べてみたところ、接続した局は128kbpsでした。
同じく作者様のサイトでは、インターネットラジオは128kbpsまで確認済とのことですが、こちらもSDカードと同じ状況である事が考えられたので、64kbpsの局を探し出して再生してみたところ、…、正常テンポで再生されるようになりました。
ただし、やたらと切れます。
そこで、バッファサイズを少し弄ってみたところ、…、かなり改善されました\(^_^)/。(時々切れますが、BGMとしてなら、さほど気にならない程度。)
高ビットレートに対応できていない可能性として考えられるのは、確実なのは、ハードウェア環境を作者様と同じにしてみることですが、当面はより簡便なソフトウェア周りのチューニングかな、という感じです。
- クロックの違いによるCPU処理能力の差。
- ソフトウェア本体を、ROMではなく、RAMに置いている。
- MP3デコーダをシリアルポートではなく、汎用のポートに繋いでいることが、実は災いしている。
- 各種バッファサイズやタイミング設定が、自分の環境にマッチしていない。または、カスタマイズ漏れがある。
あと、音量の変更は、再生中も可能ではあるのですが、実行まで結構時間がかかりました。(タスクが待たされる?)
また、なぜかstopは、再生が終わってから実行されました。
この辺も、自分の環境へのアジャストが十分でない感じです。
とまぁ、若干の積み残しはありますが、いずれにしてもこのソフト、凄すぎます。
積年の懸案が、一挙に(ほぼ)解決してしまった事は、衝撃以外の何物でもありません。作者様に大感謝です。
今後の課題
短期的には、
・各種バッファサイズやタイミング設定のチューニングと、カスタマイズ漏れのチェック。
・(自分にとって)不要な部分の整理。
中長期的には、
・MP3デコーダの、シリアルポートへの繋ぎ込み。(ケーブル周りの工作)
・クリスタルの交換。(20MHz>25MHz)
・ROM化。(スタンドアローン化の予定は今のところないので、書き込み制限を考えると、あまりやりたくない。)
といったところでしょうか。
「その9a・I/OボードのLCDとLEDを使えるようにする」へ続く
お世話になったサイト
有用なソフトウェアおよび貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)
参考サイト(1):電子工作: Network Appliance 2 rev.b
更新履歴
2012.03.31 「今後の課題」にリンクを追加。
2012.03.19 新規作成
[Home] [MacSoft] [Donation] [History]