|
1ビットサウンドポートでいきなりつまづき中(・∀・;)
こんなのちょちょいのパッで片付くと思ったんだけどなあ。 エミュレータ環境を整えたPCはとっくに壊れてるしw 実機はあちこち不具合で、例えば「C」が入力できないとかw 1チップMSXはみつけたが、ACアダプターが見つからないw そんなこんなで環境整備ばかりに時間がかかってます。 準備してから再スタートすべきだったと、これはいつもことですな。 一応言い訳しておくと、MSXのスロットに突っ込んで絵と音が出るボードとか、作りかけてるんですよ。 スロットひとつ塞いじゃうけどね。HB-F900とかの機種だと、画面が下向くしw ブランクが長いと、ちょっとしたこともテキパキ進められないですなあ。BASICもアセンブラも見事に忘れてますわʅ(‾◡◝)ʃ ま、ぼちぼち行きます。 |
コメント(1)
|
■ PSGと1ビットサウンドポート
MSXには、PSG(Programmable Sound Generator)と呼ばれる音源チップのほかに、PPIポート(I/OアドレスAAH)の第7ビットが「1ビットサウンドポート」として使用されている。 この1ビットサウンドポートは、もっぱらカセットI/Fの出力に使用されるほか、BEEP音の発声にも使用されている。 また、カセットI/Fの入力は、PSGの#14レジスタの第7ビットを通じて行われる。なお、カセットI/Fの入力には3kHzのローパスフィルタが入っている(ん?書いていて気づいたが、カセットI/Fの高速モードで「1」を表す際、4800Hzのパルスがあるんじゃが、いいのか?まあ、3kHzでチョン切れるわけではないが、だいぶ減衰することにはなろうな。)。 アスキー出版の「MSXテクニカル・ハンドブック」には、カセットI/Fから取り込んだ音を1ビットサウンドポートから出力するプログラム例が掲載されている。 BIOSを使っている関係でビットレートは不明であるが、量子化ビット数は1ビットである。1ビットの量子化でもビットレートさえ高速であれば、ある程度の音階は再現可能である。 音質は、高音部が詰まった音に、エレキギターを弾く方ならお馴染みのエフェクタ「FUZZ」をかけたジャリジャリした感じを思わせる。これは、前述の3kHzのローパスフィルタの影響及び、波形が「0」か「1」かの矩形波に近くなる結果であろう。 ま、こういうものでも、とりあえず「1ビットPCM」と呼んでよかろう。決していちびっているわけではない。 以下、オンライン版テクハンから引用(少し編集)。 リンク:1.4 1ビットサウンドポートのアクセス この1ビットサウンドポートをアクセスするために、次に示すBIOSルーチンが用意されています。 ● CHGSND (0135H/MAIN) 入力:A←ON/OFF指定(0=OFF, 0以外=ON) 出力:--- 機能:Aレジスタに0を入れてこのルーチンをコールするとサウンドポートのビットをOFFにし、0以外の値を入れてコールするとサウンドポートのビットをONにする。 リスト5.2 1ビットサウンドポートを利用してカセットテープの音声を再生する。 ;=================================================== ; List 5.2 Read from cassette tape ; Set music tape into tape-recorder ; and run this program. ; Then your MSX will replay it. ;=================================================== STMOTR EQU 00F3H RDPSG EQU 0096H CHGSNG EQU 0135H BREAKX EQU 00B7H ORG 0B000H START: LD A,1 ;motor on CALL STMOTR LBL01: LD A,14 ;register 14 CALL RDPSG ;read PSG AND 80H ;check CSAR CALL CHGSNG ;change SOUND PORT CALL BREAKX ;check Ctrl-STOP JR NC,LBL01 XOR A ;stop motor CALL STMOTR RET END (↑表示の都合で、全角スペースを使ってます。適宜半角にしてね。) サンプル音はただいま鋭意準備中(・∀・)ええ〜い♪ 上のリストでは取り込んだ音声データをすぐに1ビットサウンドポートに出力しているが、「音声取り込みプログラム」 と 「音声再生プログラム」に分けて、1ビットサンプリングデータをファイル渡しすれば、なんとなく「PCM録音・再生システム」っぽく見えてくるでしょ?ファイルのつくり方が問題だけどね。 というわけで、本日ここまで。 |
|
■ PCMとは何か? どうせ自分用のメモと言いながら、親切なぼくはPCMの解説から入る。 ウィキペディアによれば、 「パルス符号変調(パルスふごうへんちょう、PCM、英語: pulse code modulation)とは音声などのアナログ信号をパルス列に変換するパルス変調の一つである。」 だそうである。なんか、英語を日本語に換えただけの気がするなあ。 百聞は一見にしかず。右図をご覧いただきたい。 ヨコ方向が時間軸。タテ方向が音の振幅(音の大きさ)を示す。赤い滑らかなカーブは実際の音だと思ってほしい。いわゆるサイン・ウエーブである。自然界の音は、一般にこのように連続的に変化する。 しかし、デジタル機器は、このような連続的変化を扱うのが苦手なので、扱いやすい形に変換する。デコボコの階段状になったのがPCM化された波形である。 時間軸方向で区切るのが標本化回数(サンプリングレート)、そのときの振幅を示すのが量子化ビット数(図では0〜15の16段階なので4ビット)。 サンプリングレート・量子化ビット数とも多いほうが良質な再生結果が得られるが、そのためには高速な装置が必要となる。データ数も膨大となり、費用も高くなる。したがって、用途によって、おのずとサンプリングレートと量子化ビット数は決まってくる。 固定電話はサンプリングレート8kHz・量子化ビット数8ビット、音楽用CDは44.1kHz・16ビット、DVDは96or48kHz・24or20or16ビットが規格化されている。 サンプリングレートは、対象となる音源の周波数によって規定される。結論から言うと、対象周波数の2倍以上でないと再現できなくなる(ナイキスト・シャノンのサンプリング定理)。音楽用CDの場合、上限20kHzをターゲットにローパスフィルタの減衰率を勘案して44.1kHzが選択された。このサンプリングレートと量子化ビット数は先行して開発されたSONYのPCMマスターテープレコーダーに合わされた(共同開発社のフィリップスは44.0kHz又は44.5kHz・14ビットを主張→却下)。 ついでにいうと、CDの12cmというサイズはベートーヴェンの「第九交響曲」が入るサイズとして採用されたというのが定説であるが、これもそう簡単なハナシではなかったようである(くだくだしいので割愛。詳細は以下URL参照。ただし英文)。 もうひとつついでにいうと、DVDのサンプリングレート48kHzは、高音質化もさることながら、サンプリングレートの異なる音楽用CDへの録音を困難にするためでもあった。 いろいろとあるのですねえ(・∀・)♪ リンク:Shannon, Beethoven, and the Compact Disc |
|
いやはや、「3か月も更新がなければくたばったと思ってほしい」なんて書いていたら、ほんとにくたばりかけて、ようやく戻ってまいりました。
さて、どこから手をつければいいものやら? とりあえず、敬愛するmosakuさんからお題を横取り?して、「MSXでPCM」ってのを考えてみたいと思います。 ■ ターゲットマシン 何にしても、ターゲットマシンを選定しないといけません。 元々PCM搭載のturboRのは、今さらつまらんのでパス。 残る音源としては、 (1) 1bitサウンドポート (2) PSG (3) FM音源 ですが、(1)と(2)はどのMSXでも搭載しているので、このへんを中心に考えていきたいと思います。 過去データの発掘やら環境の再構築やらから始めないといけないので、 ぼちぼちいきまっさ〜(・∀・)♪ |
|
■DTMF送信の基礎実験 いつだったか、MSXエミュレータの外部へのデータ渡しにDTMFが使えないかと書いた気がする。 というわけで、おもむろに着手。まずは、音声発生プログラムを書く。 元ネタは、MSXマガジン1991年4月号の「ハードウエア事始め」掲載の「DTMFを活用しよう!」。 発声部分は、ほぼそのまま使用。ただし、原作では420及び425に相当する部分が「FOR I=0 TO 180:NEXT」というウエイトループになっており、本文で「turboRでは要調整」の旨、注記されていた。 ここをTIME関数に置き換え、turboRでも正常動作するようにした。 で、ちゃんと動作しているか検証するため、秋月のDTMFデコーダキットを用いた。 お〜、ちゃんと認識しているぞ! っと、ここで証拠写真を示したいところであるが、いざ写真を撮ろうとすると、デコーダキットがうまく動作しない。 「0」「D」「#」以外がちゃんと認識されない。 さっそくPICのプログラムを壊してしまったかな? 最近、どうもクラッシャー体質になってしまったようだ。 というわけで、証拠写真はないが、DTMF送信の基礎実験は成功としておこう。 ■DTMF通信の概略 DTMFの規格では、「012456789ABCD#*」の16文字の受送信が規定されているが、「#*」の部分を「EF」と読み替えれば、なんとなく16進データの送信に使えるように、見えてこないか? MSXPlayerの仮想FDに保存されているファイルを読み出し、DTMFにより外部に送信、外部のMSX実機で受信して元のファイルに復元する、てなことを考えている。 そうすれば、いったんFDにコピーして実機に持っていくという面倒な作業をしなくていいはずだ。 ただし、通信速度は思いっきり遅いけどね。 |
[ すべて表示 ]



