ホームページH8をMacで>その9・インターネットラジオを聴きたい(ほぼ解決編)

その9・インターネットラジオを聴きたい(ほぼ解決編)

目次
 目的と経緯

 以下は、マイコンボードでインターネットラジオを再生することを模索した際の覚書です。

 長らくの懸案だった「H8でインターネットラジオを再生する」ですが、ほぼ達成する事が出来ました。(「ほぼ」というのが微妙ですが、詳細は「考察」参照。)
 それも、完全な「他力本願」で、です。
 使わせて頂いたソフトウェアは、以下のサイトで公開されていたものです。

 参考サイト(1):電子工作: Network Appliance 2 rev.b

 サイト自体はPart 6当時から存じ上げていて、ソースもダウンロードさせて頂いていたのですが、当時はTOPPERS移行前だった事、また、移行後も(その頃は確か)本体部分のみの公開で、自分には動作環境(Makefile等)を一から構築する力がないので、再利用については諦めていました。
 ところが、最近(2012.03)になって再びアクセスしたところ、Makefile等もアップされていて、これなら自分にもなんとかなるかも、と思って再開した次第です。

 なお、作者様も言及されているとおり、若干の不整合(と、自分のハードウェア構成に合わせ込む作業)がありましたが、容易に対応可能でした。


 方針

 作者様とハードウェアの構成パーツは共通なので、基本的にはそのままで動く筈です。
 なので、まずは以下の方針で行くことにしました。
  1. ROM上での動作を想定しているが、RAM上で動作させる事とする。
  2. 作者様CPUボードのクロックが25MHzにに対して、こちらは20MHzのままなので、必要に応じてソースを書き直す。
    (jsp側は20MHzを想定しているので、特に何もしなくていい筈。)
  3. SDカードとボードの接続は、前回のテストでシリアル接続にしてあったので、そのまま使うこととする。
    (CSのみピンアサインが異なるので、ソースを書き直して対応。)
  4. MP3デコーダとボードの接続は、現状のピンアサインのまま、即ち、汎用ポート&手クロック方式とし、ソースを書き直して対応。
  5. FTPやTelnet等、こちらでは必要ないものも含まれてるが、まずは動作確認が目標なので、手は付けない。
  6. DHCPにも対応しているようだが、ボードのIPアドレスは固定(192.168.1.200)とする。


 作業の記録

 以下は対症療法的試行錯誤の結果を整理したものです。漏れや何か問題がある可能性があります。

 <ディレクトリ(フォルダ)の再編成>
  1. TINETを使うので、その7a・TOPPERSに移行する(ネットワーク編)で作成したjspを用いる。
  2. jspを、~/Documents/h8-Toppers/netRadio/に置いた。
  3. NA2-src-20070701.tar.gzとNA2_etc_20100904.zipをダウンロードし、解凍。
  4. NA2_etc_20100904内のsrcを、NA2-src-20070701内のsrcで置き換え。
  5. NA2_etc_20100904をjsp内に移動し、(名前が長いので)NA2にリネーム。
 <Makefileの編集>
 注)以下は、CPUクロック=20MHz、VS1011eクロック=14.318MHzを想定しています。
  1. 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 を削除(ソースが存在しないため)
 <ソースの編集>
  1. 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)
    
  2. NA2/src/na2.h
     先頭部分に以下を追加
    #include <t_services.h>
    
  3. NA2/src/na2.cfg
     #define _MACRO_ONLY の下に、以下を追加
    #include "na2.h"
    
  4. 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)
    
  5. 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)
    
  6. NA2/src/vs1011e_io.h
  7. NA2/src/vs1011e_access.h
  8. NA2/src/vs1011e_access.c
     上記3ファイルについてはこちらを参照(これらはMP3デコーダの接続に汎用ポートを使用した事による変更であり、シリアルポートの場合は不要)

 ビルドする

 TINETを含むため、make-3.79を用いてビルドを行いました。(その7a・TOPPERSに移行する(ネットワーク編)参照)
$ cd /Users/hoge/Documents/h8-Toppers/netRadio/jsp/NA2
$ export PATH=/Applications/h8/Local/bin:${PATH}
$ /usr/local/bin/make clean
$ /usr/local/bin/make depend
$ /usr/local/bin/make
注)2行目のexportは、gccの場所にパスを通すためのもので、あらかじめ設定してあれば不要。
 jsp.srecが、NA2フォルダ内に作成されました。
(数カ所でwarningが出ますが、そのままでも動作しました。最終的にはつぶしておいた方がいいとは思いますが…。)


 動作テストの前準備
注:以下の、Webブラウザでの操作に関する記述は当方の解釈によるもので、作者様の公開情報ではありません。そのため、不正確である可能性があります。
 本ソフトウェアの操作は、Webブラウザから行います。
 そのために必要なhtmlやcgiを、あらかじめSDカード上にコピーしておきます。
  1. SDカードのルートディレクトリに、「http」という名前のフォルダを作成
  2. NA2/src/sysinfoフォルダを、「http」内にコピー
  3. /http/sysinfo/image/sec/ を /http/sysinfo/ にコピー(コピーであって、移動ではない)
    (注:一部cgiがこの階層にある事を想定しているため。最終的にはソースを改変した方がいいとは思うが、動作確認優先のため、こうした。)
 また、音楽再生のために、MP3ファイルもコピーしておきます。
  1. SDカードのルートディレクトリに、「mp3」という名前のフォルダを作成
  2. 適当な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としてなら、さほど気にならない程度。)

 高ビットレートに対応できていない可能性として考えられるのは、
  1. クロックの違いによるCPU処理能力の差。
  2. ソフトウェア本体を、ROMではなく、RAMに置いている。
  3. MP3デコーダをシリアルポートではなく、汎用のポートに繋いでいることが、実は災いしている。
  4. 各種バッファサイズやタイミング設定が、自分の環境にマッチしていない。または、カスタマイズ漏れがある。
 確実なのは、ハードウェア環境を作者様と同じにしてみることですが、当面はより簡便なソフトウェア周りのチューニングかな、という感じです。

 あと、音量の変更は、再生中も可能ではあるのですが、実行まで結構時間がかかりました。(タスクが待たされる?)
 また、なぜか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]