ここから本文です
Dr.KIKKIE(KIKI) MSX DeuxLaque
免責:記載誤りによる損害一切

MSXでPCM(3)

1ビットサウンドポートでいきなりつまづき中(・∀・;)
こんなのちょちょいのパッで片付くと思ったんだけどなあ。

エミュレータ環境を整えたPCはとっくに壊れてるしw
実機はあちこち不具合で、例えば「C」が入力できないとかw
1チップMSXはみつけたが、ACアダプターが見つからないw
そんなこんなで環境整備ばかりに時間がかかってます。
準備してから再スタートすべきだったと、これはいつもことですな。

一応言い訳しておくと、MSXのスロットに突っ込んで絵と音が出るボードとか、作りかけてるんですよ。
スロットひとつ塞いじゃうけどね。HB-F900とかの機種だと、画面が下向くしw

ブランクが長いと、ちょっとしたこともテキパキ進められないですなあ。BASICもアセンブラも見事に忘れてますわʅ(‾◡◝)ʃ
ま、ぼちぼち行きます。

この記事に

MSXでPCM(2)

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録音・再生システム」っぽく見えてくるでしょ?ファイルのつくり方が問題だけどね。
というわけで、本日ここまで。

この記事に

MSXでPCM(1)

イメージ 1
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

この記事に

MSXでPCM(0)

いやはや、「3か月も更新がなければくたばったと思ってほしい」なんて書いていたら、ほんとにくたばりかけて、ようやく戻ってまいりました。
さて、どこから手をつければいいものやら?
とりあえず、敬愛するmosakuさんからお題を横取り?して、「MSXでPCM」ってのを考えてみたいと思います。

ターゲットマシン
何にしても、ターゲットマシンを選定しないといけません。
元々PCM搭載のturboRのは、今さらつまらんのでパス。
残る音源としては、
 (1) 1bitサウンドポート
 (2) PSG
 (3) FM音源

ですが、(1)と(2)はどのMSXでも搭載しているので、このへんを中心に考えていきたいと思います。

過去データの発掘やら環境の再構築やらから始めないといけないので、
ぼちぼちいきまっさ〜(・∀・)♪

この記事に

PX-7、入手。

パイオニアPX-7、入手。
これに先立って、図書館でポケットバンクシリーズの一部を発見!
「マイコン新時代 必殺ビデオ活用法」でPX-7に興味を持ったのがきっかけ。
起動時に、拡張BASICを使用するかどうか選択でき、使用するとスーパーインポーズなどの機能が簡単に使えるようになる。
また、レーザーディスクのコントール端子もあり、ひょっとしたら他に転用できるかもしれない。
とにかく、「端子いっぱい機種」には、つい食指が動いてしまう今日この頃である。

この記事に

近況報告

いつの間にやら7月ですな。暑い、暑い。
最近はちと活動が停滞気味。暑さに弱いもんじゃけんねえ。
パソコン連続クラッシュにも参りました。
結局、Windows7ノートを新調したものの、MSXPlayerとかも
入れてないし、ArduinoIDEも入れてません。
もう少し涼しくならないと、この脳細胞がねえ。

この記事に

復旧作業といいつつ(2)

SP3までインストールできたものの、結局、システムクラッシュでメインマシンは放棄状態。
さらに、セカンドマシンもHDDクラッシュ。
このまま、サードマシンもフォースマシンもフィフスマシンもクラッシュしたらどうなるのか? って何台あるねん?

というわけで、壊滅的なインフラの故障対応に追われて、MSXをいじっているヒマがさっぱりない今日この頃である。
壊れているのは、お前じゃ? ほっとけ(^▽^)わ〜い

この記事に

DTMF

イメージ 1
■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にコピーして実機に持っていくという面倒な作業をしなくていいはずだ。
ただし、通信速度は思いっきり遅いけどね。

この記事に

復旧作業といいつつ

メインのノートパソコンの復旧に取り組んでいるところ。
といいつつ、壊れた200GBを手持ちの4GBに換装しようとするのが、どだい無理なハナシ。
それでも、ファイルを削りまくってXPをインストールしたが、SP2どまりで、SP3は遂に断念。
ページングファイルを削除しても、HDDの残容量は1MBの表示が・・・。
フロッピー1枚分程度ですがな。

無理を承知で始めた復旧作業。そもそも復旧ではなく、どこまでXPを詰め込めるかという、中国雑技団のようなトライに終わってしまった。
手段が目的化する典型例やね。はっはっは。わろてる場合か!

この記事に

HDDクラッシュ!

メインで使っていたノートパソコンの突然の昇天。
参ったなあ。
ほとんどのファイルは別のストレージに保存していたが、
MSXPlayerの仮想ディスクに保存していたファイルは消滅。
環境の再構築に余計な時間がかかってしまう。あ〜。

この記事に

[ すべて表示 ]

本文はここまでですこのページの先頭へ
みんなの更新記事