本発明の楽音生成装置を備える本発明の携帯端末装置を携帯電話機に適用した場合の実施の形態の構成例を図1に示す。
図1に示す携帯電話機1は、一般にリトラクタブルとされたアンテナ25を備えており、基地局2と無線回線により接続可能とされている。アンテナ25は変調・復調機能を有する通信部13に接続されている。中央処理装置(Central Processing Unit:CPU)10は、電話機能プログラムを実行することにより携帯電話機1の各部の動作を制御するシステム制御部であり、動作時の経過時間を示したり、特定の時間間隔でタイマ割込を発生するタイマを備えている。また、CPU10は後述するデータ変換処理等の楽音生成関連処理を行う。RAM11は基地局2を介して接続したダウンロードセンター等からダウンロードされた配信フォーマットとされた音楽コンテンツデータの格納エリアや、音楽コンテンツデータを変換した音源ハードウェア制御データの格納エリア、および、CPU10のワークエリア等が設定されるRAM(Random Access Memory)である。ROM12はCPU10が実行する送信や着信の各種電話機能プログラムや楽音生成関連処理等のプログラムや、プリセットされた音源ハードウェア制御データ等の各種データが格納されているROM(Read Only Memory)である。
また、通信部13は、アンテナ25で受信された信号の復調を行うと共に、送信する信号を変調してアンテナ25に供給している。通信部13で復調された受話信号は、音声処理部(コーダ/デコーダ)14において復号され、マイク21から入力された通話信号は音声処理部14において圧縮符号化される。音声処理部14は、音声を高能率圧縮符号化/復号化しており、例えばCELP(Code Excited LPC )系やADPCM(適応差分PCM符号化)方式のコーダ/デコーダとされている。音源ハードウェア15は、音声処理部14からの受話信号を受話用スピーカ22から放音したり、変換された音源ハードウェア制御データを再生することにより着信メロディ、保留音を生成して出力することができる。なお、着信メロディは着信用スピーカ23から放音され、保留音は受話信号とミキシングされて受話用スピーカ22から放音される。
また、音楽コンテンツデータのフォーマットは配信するに便利なMIDIフォーマットやSMAFフォーマットとされており、CPU10がこれらのフォーマットの音楽コンテンツデータを音源ハードウェア15に固有なフォーマットの音源ハードウェア制御データに変換することにより、再生可能としている。変換された音源ハードウェア制御データはRAM11に記憶することができる。音源ハードウェア15は音源ハードウェア制御データに基づいて楽音を再生しており、この際に、内部に所定量の音源ハードウェア制御データを一時記憶するFIFOが設けられている。このFIFOは一曲分の音源ハードウェア制御データが記憶できる記憶容量とされてもよいが、記憶容量が小さく一曲分の音源ハードウェア制御データを記憶できない場合は、FIFOに所定量の空きエリアが生じた際に、音源ハードウェア15がFIFOデータリクエスト信号をCPU10に与え、CPU10がRAM11あるいはROM12に記憶されている音源ハードウェア制御データの続きを読み出して音源ハードウェア15に転送するようにしてもよい。このようにすると、小さい容量のFIFOを用いても大きなデータ量とされる音源ハードウェア制御データの楽曲を再生することができるようになる。
さらに、インタフェース(I/F)16は、パーソナルコンピュータ等の外部機器20から音楽コンテンツデータ等をダウンロードするためのインタフェースである。入力部17は携帯電話機1に備えられた「0」から「9」のダイヤルボタンや各種ボタンから構成される入力手段である。表示部18は電話機能のメニューや、ダイヤルボタン等のボタンの操作に応じた表示がされる表示器である。バイブレータ19は、着信時に着信音に代えて携帯電話機1の本体を振動させることにより、着信をユーザに知らせるバイブレータである。なお、各機能ブロックはバス24を介してデータ等の授受を行っている。
次に、本発明の実施の形態にかかる携帯電話機1における楽音生成装置の構成を図2に示す。ただし、図2では、受話用スピーカ22,着信用スピーカ23およびそれに関連する構成を省略して示している。なお、図中のCPU10と音源ハードウェア15あるいはRAM11とは図示されていないがバス24を介してデータの授受を行っている。
図2に示す本発明の楽音生成装置において、RAM11には音楽コンテンツデータであるファイル化されたMIDIデータやSMAFデータ等が領域11aに格納されている。また、CPU10において処理に余裕があったり空き時間等がある時や、あるいは音楽コンテンツデータの再生指示があった場合に、CPU10はRAM11の領域11aから音楽コンテンツデータを読み出して音源ハードウェア制御データに変換する変換処理を実行し、変換後の音源ハードウェア制御データをRAM11の領域11bに格納している。領域11aには複数曲分の音楽コンテンツデータが記憶可能とされ、領域11bにも複数曲分の音源ハードウェア制御データが記憶可能とされている。
前述したようにCPU10は、RAM11の領域11aから音楽コンテンツデータを読み出して音源ハードウェア制御データに変換する変換処理を実行し、変換後の音源ハードウェア制御データをRAM11の領域11bに格納している。この変換処理は、CPU10における音源ハードウェア制御データ変換手段10bが実行するが、音源ハードウェア制御データ変換手段10bはソフトウェアで実現されている。CPU10において、音楽コンテンツデータを音源ハードウェア制御データに変換する際には、メモリコントローラ10aがRAM11の領域11aから変換すべき音楽コンテンツデータを先頭から順次読み出して、音源ハードウェア制御データ変換手段10bに供給する。音源ハードウェア制御データ変換手段10bは、供給された音楽コンテンツデータを解釈して逐次音源ハードウェア制御データに変換する。変換された音源ハードウェア制御データは、メモリコントローラ10aがRAM11の領域11bに順次書き込む。これにより、CPU10は音楽コンテンツデータを音源ハードウェア制御データに変換することができる。
なお、CPU10によるデータ変換処理を行いながら楽音の再生を行う場合は、メモリコントローラ10aは音源ハードウェア15のFIFO(First-In First-Out)31に変換された音源ハードウェア制御データfを書き込むようにする。
音源ハードウェア15は、所定量の音源ハードウェア制御データを格納することのできるFIFO31を備え、シーケンサ32はこのFIFO31から順次音源ハードウェア制御データを読み出している。FIFO31は音源ハードウェア制御データを、例えば32ワード分格納できる先入れ先出し方式の記憶手段であり、先に書き込まれた音源ハードウェア制御データから順次読み出されるようにされている。また、FIFO31から音源ハードウェア制御データが読み出されて設定された所定量の空きエリアがFIFO31に発生した際には、FIFO31はFIFOデータリクエスト信号eをCPU10のメモリコントローラ10aに送り、続く音源ハードウェア制御データfをFIFO31に転送するように要求している。これにより、小さい容量のFIFO31を用いても大きなデータ量とされる音源ハードウェア制御データの楽曲を再生することができるようになる。
音源ハードウェア15におけるシーケンサ32は、データデコード回路32bを備え、データデコード回路32bはFIFO31から読み出した音源ハードウェア制御データを、時間管理情報と音源制御レジスタライトデータとに分離している。この場合、時間管理情報に前置して時間管理情報識別アドレスが付加されている場合は、時間管理情報識別アドレスに続く例えば1バイトのデータを時間管理情報として分離する。時間管理情報識別アドレスおよび時間管理情報を除いたデータである音源制御レジスタライトデータは、楽音生成用のパラメータのデータでありレジスタライトコントローラ32cの制御の基で音源部33の音源制御レジスタ33aに書き込まれるようになる。レジスタライトコントローラ32cは、レジスタライト許可信号dが出力されたタイミングで音源制御レジスタライトデータを音源制御レジスタ33aに書き込むが、レジスタライト許可信号dは、後述するが時間管理情報のデュレーションの値やゲートタイムの値とカウンタ(タイマー)32aのカウント値が一致したタイミングで出力される。
シーケンサ32におけるカウンタ32aは基準時間単位とされる、例えば1ms毎に出力されるクロックを計数しており、この計数はCPU10から出力されるシーケンサスタート信号gが印加された際に開始される。また、シーケンサスタート信号gは、音源制御レジスタ33aのうちのシーケンサ32に備えられているレジスタ01hにデータ“01h”を書き込み、そのD0(start)を“1”にセットすることにより、シーケンサ開始を指示する。これにより、シーケンサ32はシーケンサ処理をスタートし、カウンタ32aが計数を開始すると、カウンタ32aはデータデコードスタート信号aをデータデコード回路32bに印加する。これを受けて、データデコード回路32bはFIFO31から音源ハードウェア制御データを読み出して、時間管理情報を分離する。分離された時間管理情報bはカウンタ32aへ送られる。そして、カウンタ32aにおいてカウント値が時間管理情報b以上となった際に、カウンタ32aはレジスタライト許可信号dをレジスタライトコントローラ32cに印加して、データデコード回路32bで分離された音源制御レジスタライトデータcを音源制御レジスタ33aに書き込む。これにより、音源部33においてその音源制御レジスタライトデータcに基づく楽音が生成されて出力されるようになる。次いで、データデコード回路32bはFIFO31から次の音源ハードウェア制御データを読み出す。
そして、データデコード回路32bはFIFO31から読み出した次の音源ハードウェア制御データから次の時間管理情報を分離して、上述した処理と同様の処理を繰り返し行う。すなわち、カウンタ32aにおいてカウント値が次の時間管理情報b以上となった際に、カウンタ32aはレジスタライト許可信号dをレジスタライトコントローラ32cに印加して、データデコード回路32bで分離された次の音源制御レジスタライトデータcを音源制御レジスタ33aに書き込む。これにより、音源部33において次の音源制御レジスタライトデータcに基づく楽音が生成されて出力される。次いでデータデコード回路32bは、FIFO31から次の次の音源ハードウェア制御データを読み出す。このようにFIFO31から順次音源ハードウェア制御データを読み出していくことにより、音源部33において楽音が再生されていくようになる。
次に、楽音生成装置に再生指示がされた際の図2に示す楽音生成装置の動作を説明する。
まず、SMAFフォーマットについて説明する。SMAFフォーマットのデータ構造を図3および図4に示す。図3(a)に示すようにSMAFは、チャンク(Chunk)構造とされており、コンテンツ情報チャンク(Contents Info Chunk)40、スコアトラックチャンク(Score Track Chunk)41、PCMオーディオトラックチャンク(PCM Audio Track Chunk)42等のチャンクから構成されている。コンテンツ情報チャンク40は、コンテンツの情報や定義を含むチャンクであり、スコアトラックチャンク41は、音源シーケンストラックを格納するチャンクであり、PCMオーディオトラックチャンク42は、ADPCMやMP3(MPEG audio layer 3),TwinVQ等の圧縮されたPCM系のオーディオ発音をイベント形式で格納するチャンクである。
スコアトラックチャンク41のデータ構造を図3(b)に示す。この図に示すように、スコアトラックチャンク41は、フォーマットタイプ(Format Type)、シーケンスタイプ(Sequence Type)等のデータと、セットアップデータチャンク(Setup Data Chunk)43、シーケンスデータチャンク(Sequence Data Chunk)44等のチャンクから構成されている。フォーマットタイプデータは、このチャンクの実フォーマットを定義するステータスであり、例えばハンディフォン・スタンダード等と定義することができる。シーケンスタイプデータは、2種類のシーケンスデータのいずれかのタイプを示しており、タイプにはストリームシーケンスタイプとサブシーケンスタイプとがある。セットアップデータチャンク43は、音色データやエフェクト設定等を格納するチャンクであり、シーケンスデータチャンク44は、実演奏データとされるシーケンスデータを格納するチャンクである。
次に、シーケンスデータチャンク44に格納されるシーケンスデータのデータ構造を図4に示す。この図に示すように、シーケンスデータは、1バイトのデュレーション(Duration)データと、2バイトあるいは3バイトとされるイベント(Event)データとが交互に配列されて構成されている。この場合、イベントデータの前には必ずデュレーションデータが存在するものとされている。デュレーションデータは、その前に配置されたイベントとその後に配置されたイベントとの時間間隔を表す時間情報である。また、イベントには、発音を制御するノートメッセージ(Note Message)、ボリュームやモジュレーション等をコントロールするコントロールメッセージ(Contorol Message)、メーカ独自の情報を送ることのできるエクスクルーシブメッセージ(Exclusive Message)等のイベントがある。さらに、ノートメッセージは、図示するように指定される発音チャンネルを示すチャンネルナンバ(Channel Number)、発音する音高を示すノートナンバ(Note Number)、発音期間を示すゲートタイム(Gatetime)の各データから構成される。
図4に示すデュレーションデータ1〜デュレーションデータ3とイベントデータ1〜イベントデータ3からなるシーケンスデータを時間軸上で示すと図5に示すように表される。例えば、イベント1,イベント2,イベント3をノートオンのノートメッセージとすると、デュレーション1に示す時間が経過した時点でイベント1による発音が開始される。また、イベント1による発音が開始されてからゲートタイム1に示す時間が経過した時点でイベント1による発音は停止される。そして、デュレーション1に示す時間が経過した時点から、さらにデュレーション2に示す時間が経過した時点でイベント2による発音が開始される。ついで、イベント2による発音が開始されてからゲートタイム2に示す時間が経過した時点でイベント2による発音は停止される。さらに、デュレーション2に示す時間が経過した時点から、デュレーション3に示す時間が経過した時点でイベント3による発音が開始される。ついで、イベント3による発音が開始されてからゲートタイム3に示す時間が経過した時点でイベント3による発音は停止される。以降は、図4に示すシーケンスデータをSMAFデータという。
図2に戻り、CPU10における音源ハードウェア制御データ変換手段10bにおいて、音楽コンテンツデータである例えばSMAFデータが音源ハードウェア制御データに変換される。ここで、変換された音源ハードウェア制御データは再生時に順次音源ハードウェア15に転送されて、音源部33は音源ハードウェア制御データに基づいて楽音を生成することになる。このため、音源ハードウェア制御データは音源部33における音源制御レジスタ33aのレジスタマップに対応するデータ構成とされている。ここで、一例とされるSMAFデータを変換した音源ハードウェア制御データの例を示すが、音源ハードウェア制御データにはデュレーションやゲートタイムに相当する時間管理情報が含まれているものの、時間管理情報は音源制御レジスタ33aには書き込まれない。そこで、音源ハードウェア制御データの時間管理情報を省略した音源制御レジスタマップ対応データを、変換前のSMAFデータに対応させて図6に示す。
図6において、SMAFデータのデュレーションデータ“00”とプログラムチェンジメッセージのイベント“00 30 47”は、インデックス“18h”とデータ“10h”に変換される。ただし、「h」は16進で表していることを示している。インデックスは、図7に示す音源制御レジスタ33aの音源制御レジスタマップに示されるレジスタのアドレスを示しており、インデックスで示されるアドレスのレジスタに続くデータが書き込まれるようにされている。この場合、各レジスタは1バイトの容量のレジスタとされており、インデックス“01h”でアドレスされる1本のレジスタ、インデックス“18h”〜“1Fh”でアドレスされる8本のレジスタ、インデックス“B0h”〜“BFh”でアドレスされる16本のレジスタ、インデックス“C0h”〜“CFh”でアドレスされる16本のレジスタ、インデックス“E0h”〜“EFh”でアドレスされる16本のレジスタを、音源制御レジスタ33aが有している。なお、インデックス“01h”でアドレスされるレジスタ01hだけは、図2に示すようにシーケンサ32内に備えられている。また、インデックスの長さは1バイトとされ、各レジスタは8ビット構成とされているため、データ長も1バイトで構成されている。
なお、インデックス“18h”〜“1Fh”でアドレスされる8本の各レジスタは、チャンネルnの音色ナンバと次のチャンネルn+1の音色ナンバ指定用のレジスタとされる。これにより、16チャンネル分の音色を指定することができる。また、インデックス“B0h”〜“BFh”でアドレスされる16本の各レジスタは、各鍵の音高周波数に比例した数値である10ビットとされるFナンバの内の下位8ビットが格納される。さらに、インデックス“C0h”〜“CFh”でアドレスされる16本の各レジスタは、D0,D1に残る上位2ビットのFナンバが格納され、D2,D3,D4に3ビットとされるオクターブ情報が格納され、D5にキーオン情報が格納される。これにより、16チャンネルの各チャンネルのFナンバおよびオクターブからなる音高と、キーオンとを指示することができる。さらにまた、インデックス“E0h”〜“EFh”でアドレスされる16本の各レジスタは、D0〜D4に5ビットとされるチャンネルボリューム情報が格納される。これにより、16チャンネルの各チャンネルのチャンネルボリューム値を指示することができる。
従って、インデックス“18h”とデータ“10h”とに変換されることにより、レジスタ18hにデータ“10h”が格納されることになり、これによりチャンネル1に音色ナンバ“0h”の音色が、チャンネル2に音色ナンバ“1h”の音色がそれぞれ指定されることになる。
また、次のSMAFデータのデュレーションデータ“00”とチャンネルボリュームメッセージのイベント“00 37 7F”は、インデックス“E0h”とデータ“1Fh”に変換される。変換されたデータは、レジスタE0hに格納されるデータ“1Fh”になり、データ“1Fh”によりチャンネル1のボリューム値として“1Fh”が指定されることになる。
さらに、次のSMAFデータのデュレーションデータ“00”とノートメッセージのイベント“2C 50”は、インデックス“B0h”とデータ“B2h”、および、インデックス“C0h”とデータ“32h”に変換される。変換されたデータは、レジスタB0hに格納されるデータ“B2h”と、レジスタC0hに格納されるデータ“32h”となり、データ“B2h”(2進で“10110010”)からなる1ビット目〜8ビット目と、データ“32h”(2進で“00110010”)のD0,D1からなる9ビット目、10ビット目により構成される10ビット“1010110010”によりチャンネル1のFナンバが指定される。また、データ“32h”のD2,D3,D4である“100”の3ビットでチャンネル1のオクターブが指定される。さらにまた、データ“32h”のD5である“1”によりチャンネル1にキーオンが指示されることになる。
さらに、次のSMAFデータのデュレーションデータ“5C”とノートメッセージのイベント“2B 20”は、インデックス“B0h”とデータ“8Bh”、および、インデックス“C0h”とデータ“32h”に変換される。変換されたデータは、レジスタB0hに格納されるデータ“8Bh”と、レジスタC0hに格納されるデータ“32h”となり、データ“8Bh”(2進で“10001011”)からなる1ビット目〜8ビット目と、データ“32h”(2進で“00110010”)のD0,D1からなる9ビット目、10ビット目により構成される10ビット“1010001011”によりチャンネル1のFナンバが指定される。また、データ“32h”のD2,D3,D4である“100”の3ビットでチャンネル1のオクターブが指定される。さらにまた、データ“32h”のD5である“1”によりチャンネル1にキーオンが指示されることになる。
SMAFデータと、これを変換した音源部制御レジスタマップ対応データは以上のように対応しており、続くデータも同様に変換されている。
なお、SMAFデータのノートメッセージのイベント“2C 50”やイベント“2B 20”は16進で表されており、その内の“50”“20”は発音期間であるゲートタイムデータである。すなわち、これらのノートメッセージによる発音は、基準時間が“50h”あるいは“20h”経過した際に発音を停止させなければならない。すなわち、発音開始から基準時間が“50h”あるいは“20h”経過した際にノートオフするために、デュレーションデータが“50h”あるいは“20h”とされていると共にキーオン/キーオフ情報が“0”とされたキーオフを指示するノートメッセージが必要となる。
このようなノートメッセージは、図6には示されていないがデータ変換の際に、変換前のSMAFデータを解釈して音源ハードウェア制御データ変換手段10bにより自動的に生成される。そこで、この説明を行うために時間管理情報を含む音源ハードウェア制御データの第1のデータ構成を図8に示し、図6に示すSMAFデータを変換した第1のデータ構成の音源ハードウェア制御データのデータ例を図9に示し、図9に示す音源ハードウェア制御データをデータ組毎に整理して図10に示す。
第1のデータ構成の音源ハードウェア制御データは図8に示すデータ構成とされている。この第1のデータ構成では、時間管理情報識別アドレスと時間管理情報とが組のデータとされ、時間管理情報識別アドレスは、時間管理情報に前置するものとされている。すなわち、時間管理情報識別アドレスを検出した際に、後続するデータが時間管理情報であることが示される。この時間管理情報に続いて、図6で説明したようにインデックスとデータとで組とされたデータが1組以上配置される。インデックスは、前述したように音源制御レジスタ33aに備えられている各レジスタのアドレスを示す情報であり、後続するデータはそのアドレスで示されるレジスタに書き込まれるデータとされている。そして、レジスタに書き込まれるタイミングが前置する時間管理情報で示されている。音源ハードウェア制御データ変換手段10bでは、SMAFデータを図8に示すデータ構成の音源ハードウェア制御データに変換している。
音源ハードウェア制御データ変換手段10bにより、図6に示すSMAFデータを解釈して変換した音源ハードウェア制御データが図9に示されている。図9に示す音源ハードウェア制御データにおいては、時間管理情報に加えてシーケンサ終了データも付加されている。すなわち、先頭データは時間管理情報識別アドレスとして定義されている“FFh”とされ、続いてデュレーションデータである時間管理情報“00h”が続いている。その後に続くデータは、前述したとおりのインデックス“18h”とデータ“10h”との組からなるデータ、インデックス“E0h”とデータ“1Fh”とからなる組のデータ、インデックス“B0h”とデータ“B2h”、および、インデックス“C0h”とデータ“32h”とからなる組のデータと続くようになる。これにより、チャンネル1およびチャンネル2の音色およびチャンネル1のボリュームが指定されると共に、チャンネル1のキーオンと音高が指示される。
次に続くデータは、図6には示されていないがチャンネル1で発音中の楽音を発音停止させるデータである。なお、前述したチャンネル1の発音開始のタイミングは前置された時間管理情報“00h”のタイミングとされている。そして、ゲートタイムが経過したタイミングで発音停止させるので、発音停止させるデータの時間管理情報はゲートタイムに相当するデータ値となる。すなわち、時間管理情報識別アドレスである“FFh”と時間管理情報“50h”との組のデータと、その後に続く、インデックス“B0h”とデータ“B2h”、および、インデックス“C0h”とデータ“12h”とからなる組のデータにより発音停止させるデータが構成される。このデータにより、“50h”基準時間経過した際に、レジスタB0hにデータ“B2h”が格納され、レジスタC0hにデータ“12h”が格納される。これにより、データ“B2h”(2進で“10110010”)からなる1ビット目〜8ビット目と、データ“12h”(2進で“00010010”)のD0,D1である“10”の9ビット目、10ビット目からなる10ビット“1010110010”によりチャンネル1のFナンバが指定される。また、データ“12h”のD2,D3,D4である“100”の3ビットでチャンネル1のオクターブがが指定される。さらにまた、データ“12h”のD5である“0”によりチャンネル1にキーオフが指示される。これにより、指定されたオクターブとFナンバとからなるチャンネル1の楽音が“50h”基準時間経過した際に発音停止されるようになる。
以降に続くデータも、前述した説明と同様にして音源制御レジスタ33aに書き込まれる。そして、音源ハードウェア制御データの最後には、時間管理情報識別アドレスである“FFh”と時間管理情報“01h”の組からなるデータに続いて、インデックス“01h”とデータ“00h”(2進で“00000000”)との組からなるデータが付加されている。この場合、データ“00h”は、直前のイベントから”01h”の基準時間が経過したタイミングで音源制御レジスタ33aのうちのシーケンサ32に備えられているレジスタ01hにセットされる。これにより、図7に示すレジスタ01hのD0(start)が“0”となり、シーケンサ32にシーケンサ終了が指示されるようになる。すなわち、インデックス“01h”とデータ“00h”とでシーケンサ終了データが構成される。
次に、音源ハードウェア制御データ変換手段10bにより、SMAFデータを解釈して変換した第1の構成の音源ハードウェア制御データをデータ組毎に整理して図10に示している。この図に示すように、組とされるデータは時間管理情報識別アドレスと時間管理情報の組、および、インデックスとデータとの組とされる。このように変換された音源ハードウェア制御データが再生される楽曲として指定された際の図2に示す本発明の楽音生成装置の動作を、図2および図10を参照して以下に説明する。ただし、音源ハードウェア制御データはCPU10において再生に先立って変換されてRAM11の領域11bに記憶されているものとする。
CPU10におけるメモリコントローラ10aは、RAM11の領域11bから指示された楽曲に対応する図10に示す音源ハードウェア制御データfを、例えば32バイト分読み出して音源ハードウェア15におけるFIFO31に転送する。同時に、CPU10はシーケンサスタート信号gをシーケンサ32のカウンタ32aに供給する。
また、シーケンサスタート信号gは、音源制御レジスタ33aの一部のレジスタであるレジスタ01hにデータ“01h”を書き込み、そのD0(start)を“1”にセットすることにより、シーケンサ開始を指示する。これにより、シーケンサ32はシーケンサ処理をスタートし、シーケンサスタート信号gを受けたカウンタ32aは、基準時間単位とされるクロックの計数を開始すると共に、データデコード回路32bにデータデコードスタート信号aを印加する。これを受けて、データデコード回路32bはFIFO31から1バイトずつデータを読み出す。この場合、読み出したデータが時間管理情報識別アドレス“FFh”であった場合は、さらに1バイトのデータを読み出すが、図10に示すように時間管理情報識別アドレスに続くデータは時間管理情報であるので、その時間管理情報bをカウンタ32aにセットする。
さらに、データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたインデックス“18h”と続いて読み出されたデータ“10h”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“18h”をアドレスとするレジスタ18hにデータ“10h”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタ18hにデータ“10h”を書き込む。レジスタ18hは、チャンネル1とチャンネル2の音色ナンバを指定するレジスタであるので、これにより、音源部33で生成される楽音のチャンネル1とチャンネル2の音色が指定される。
さらに続いて、データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたインデックス“E0h”と続いて読み出されたデータ“1Fh”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“E0h”をアドレスとするレジスタE0hにデータ“1Fh”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタE0hにデータ“1Fh”を書き込む。レジスタE0hは、チャンネル1のチャンネルボリュームを指定するレジスタであるので、これにより、音源部33で生成される楽音のチャンネル1のチャンネルボリュームが指定される。
さらに続いて、データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたインデックス“B0h”と続いて読み出されたデータ“B2h”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“B0h”をアドレスとするレジスタB0hにデータ“B2h”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタB0hにデータ“B2h”を書き込む。レジスタB0hは、チャンネル1のFナンバの下位8ビットを指定するレジスタである。
さらに続いて、データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたインデックス“C0h”と続いて読み出されたデータ“32h”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“C0h”をアドレスとするレジスタC0hにデータ“32h”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタC0hにデータ“32h”を書き込む。レジスタC0hは、チャンネル1のFナンバの上位2ビットとオクターブを指定すると共に、チャンネル1のキーオン/キーオフを指示するレジスタであり、キーオン/キーオフとして“1”(D5=1)がセットされる。これにより、チャンネル1のキーオンが指示されて、音源制御レジスタ33aにセットされているオクターブおよびFナンバの音高、ボリュームおよび音色の楽音がチャンネル1で生成開始される。
さらに続いて、データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたデータは時間管理情報識別アドレス“FFh”であるので、時間管理情報識別アドレス“FFh”に続く時間管理情報“50h”を時間管理情報bとしてカウンタ32aにセットする。次いで、データデコード回路32bはFIFO31から続くデータを読み出す。読み出されたデータは、インデックス“B0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“B2h”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“B0h”をアドレスとするレジスタB0hにデータ“B2h”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“50h”とされているので、カウンタ32aの計数値が50h進むまで待機される。
次いで、データデコード回路32bはFIFO31から続くデータを読み出す。読み出されたデータは、インデックス“C0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“12h”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“C0h”をアドレスとするレジスタC0hにデータ“12h”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“50h”とされているので、カウンタ32aの計数値が50h進むまで待機される。そして、カウンタ32aの計数値が進み50h時間経過した時刻50hのタイミングで、カウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタB0hにデータ“B2h”を書き込むと共に、レジスタC0hにデータ“12h”を書き込む。レジスタB0hは、チャンネル1のFナンバの下位8ビットを指定するレジスタであり、レジスタC0hは、チャンネル1のFナンバの上位2ビットとオクターブを指定すると共に、そのD5によりチャンネル1のキーオン/キーオフを指示するレジスタであり、キーオン/キーオフとして“0”(D5=0)がセットされる。これにより、指定されたオクターブとFナンバの音高で音源部33で生成されていたチャンネル1の楽音のキーオフが指示されて、楽音の生成が停止される。
また、カウンタ32aの計数値が50h以上になると、データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたデータは時間管理情報識別アドレス“FFh”であるので、時間管理情報識別アドレス“FFh”に続く時間管理情報“0Ch”を時間管理情報bとしてカウンタ32aにセットする。次いで、データデコード回路32bはFIFO31から続くデータを読み出す。読み出されたデータは、インデックス“B0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“8Bh”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“B0h”をアドレスとするレジスタB0hにデータ“8Bh”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“0Ch”とされているので、カウンタ32aの計数値が0Ch進むまで待機される。
次いで、データデコード回路32bはFIFO31から続くデータを読み出す。読み出されたデータは、インデックス“C0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“32h”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“C0h”をアドレスとするレジスタC0hにデータ“32h”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“0Ch”とされているので、カウンタ32aの計数値が0Ch進むまで待機される。そして、カウンタ32aの計数値が進み時刻50hから0Ch時間経過した時刻5Ch(=50h+0Ch)のタイミングで、カウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタB0hにデータ“8Bh”を書き込むと共に、レジスタC0hにデータ“32h”を書き込む。レジスタB0hは、チャンネル1のFナンバの下位8ビットを指定するレジスタであり、レジスタC0hは、チャンネル1のFナンバの上位2ビットとオクターブを指定すると共に、チャンネル1のキーオン/キーオフを指示するレジスタであり、キーオン/キーオフとして“1”(D5=1)がセットされる。これにより、チャンネル1のキーオンが指示されて、音源制御レジスタ33aにセットされているオクターブおよびFナンバで指定される音高、ボリュームおよび音色の楽音がチャンネル1で生成される。
さらに続いて、データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたデータは時間管理情報識別アドレス“FFh”であるので、時間管理情報識別アドレス“FFh”に続く時間管理情報“20h”を時間管理情報bとしてカウンタ32aにセットする。次いで、データデコード回路32bはFIFO31から続くデータを読み出す。読み出されたデータは、インデックス“B0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“8Bh”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“B0h”をアドレスとするレジスタB0hにデータ“8Bh”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“20h”とされているので、カウンタ32aの計数値が20h進むまで待機される。
次いで、データデコード回路32bはFIFO31から続くデータを読み出す。読み出されたデータは、インデックス“C0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“12h”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“C0h”をアドレスとするレジスタC0hにデータ“12h”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“20h”とされているので、カウンタ32aの計数値が20h進むまで待機される。そして、カウンタ32aの計数値が進み20h時間経過した時刻7Ch(=5Ch+20h)のタイミングで、カウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタB0hにデータ“8Bh”を書き込むと共に、レジスタC0hにデータ“12h”を書き込む。レジスタB0hは、チャンネル1のFナンバの下位8ビットを指定するレジスタであり、レジスタC0hは、チャンネル1のFナンバの上位2ビットとオクターブを指定すると共に、チャンネル1のキーオン/キーオフを指示するレジスタであり、キーオン/キーオフとして“0”(D5=0)がセットされる。これにより、音源部33で生成されていたオクターブとFナンバで指定された音高のチャンネル1の楽音のキーオフが指示されて、楽音の生成が停止される。
以下、順次1バイトずつデータが読み出されて、同様の処理が行われる。そして、最後にFIFO31からはインデックス“01h”と続くデータ“00h”が読み出される。また、これらのデータに前置して時間管理情報識別アドレス“FFh”と時間管理情報“01h”とがFIFO31から読み出される。この時間管理情報“01h”は、時間管理情報bとしてカウンタ32aにセットされ、FIFO31から続いて読み出されたインデックス“01h”は音源制御レジスタライトデータcとしてレジスタライトコントローラ32cに送られる。さらに、データデコード回路32bはFIFO31から続いて読み出されたデータ“00h”をレジスタライトコントローラ32cに送る。レジスタライトコントローラ32cは、インデックス“01h”をアドレスとするレジスタ01hにデータ“00h”(2進で“00000000”)を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“01h”とされているので、カウンタ32aの計数値が01h進むまで待機される。そして、カウンタ32aの計数値が1つ進み01h時間経過したタイミングで、カウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのうちのシーケンサ32に備えられているレジスタ01hにデータ“00h”を書き込む。レジスタ01hのD0はシーケンサスタート/ストップをシーケンサ32に指示するレジスタとされており、この場合シーケンサスタート/ストップとして“0”(D0=0)がセットされる。これにより、シーケンサ終了とされ、シーケンサ32はシーケンス処理を終了する。このように、インデックス“01h”とデータ“00h”からなる組のデータは、シーケンサ終了データである。
以上の説明において、音源制御レジスタ33aへ各データが書き込まれるタイミングを図11に示す。
図11において横軸は時間とされているが、基準時間単位は1msとされて時間値は16進で表している。このため、時間単位をhmsとして示している。まず、カウンタ32aが計数を開始する時刻0hmsにおいて時間管理情報が“00h”とされるデータが音源制御レジスタ33aに書き込まれる。この場合、書き込まれるデータは、図10に示すインデックス“FFh”ないしデータ“32h”からなる5組の音源制御レジスタライトデータAとされる。そして、50hms時間経過して時刻50hmsになると、時間管理情報“00h”の次の時間管理情報“50h”に続くデータが音源制御レジスタ33aに書き込まれる。この場合、書き込まれるデータは、図10に示すインデックス“B0h”ないしデータ“12h”からなる2組の音源制御レジスタライトデータBとされる。
さらに、0Chms時間経過して時刻5Chmsになると、時間管理情報“50h”の次の時間管理情報“0Ch”に続くデータが音源制御レジスタ33aに書き込まれる。この場合、書き込まれるデータは、図10に示すインデックス“B0h”ないしデータ“32h”からなる2組の音源制御レジスタライトデータCとされる。さらにまた、20hms時間経過して時刻7Chmsになると、時間管理情報“0Ch”の次の時間管理情報“20h”に続くデータが音源制御レジスタ33aに書き込まれる。この場合、書き込まれるデータは、図10に示すインデックス“B0h”ないしデータ“12h”からなる2組の音源制御レジスタライトデータDとされる。さらにまた、0Dhms時間経過して時刻89hmsになると、時間管理情報“20h”の次の時間管理情報“0Dh”に続くデータが音源制御レジスタ33aに書き込まれる。この場合、書き込まれるデータは、図10に示すインデックス“B3h”ないしデータ“32h”からなる4組の音源制御レジスタライトデータEとされる。
以降のデータは図示されていないが同様にして音源制御レジスタ33aに書き込まれるようになる。そして、最後にインデックス“01h”とデータ“00h”からなるシーケンサ終了データが、前述したように音源制御レジスタ33aのうちのシーケンサ32に備えられたレジスタ01hに書き込まれるようになる。この場合、カウンタ32aの計数も停止されるようになる。なお、その後に再生指示がされた場合は、カウンタ32aはクリアされて新たにカウントを開始するようになる。
このように、音源制御レジスタ33aには、時間管理情報に続くデータが次の時間管理情報が表れるまで順次書き込まれるようになる。そして、図11に示すタイミングで音源制御レジスタ33aに楽音を生成するパラメータが書き込まれるので、音源部33において生成される楽音の生成タイミングは前記図5に示すとおりとなる。
次に、音源ハードウェア制御データ変換手段10bが変換した音源ハードウェア制御データの第2のデータ構成の例を図12に示し、その具体的な図6に対応する第2の構成の音源ハードウェア制御データのデータ例を図13に示し、図13に示す第2の構成の音源ハードウェア制御データを組とされるデータ組毎に整理して図14に示している。
第2のデータ構成では図12に示すように、音源ハードウェア制御データは時間管理情報とインデックスとデータとを1組とするデータ構成とされている。すなわち、データに前置してインデックスが配置され、インデックスに前置して時間管理情報が配置された構成とされている。インデックスは、前述したように音源制御レジスタ33aに備えられている各レジスタのアドレスを示す1バイトの情報であり、後続する1バイトのデータはそのアドレスで示されるレジスタに書き込まれるデータとされている。そして、レジスタに書き込まれるタイミングが1バイトあるいは2バイトの時間管理情報で示される。時間管理情報が2バイトとされる場合は、最初の1バイトのMSBが“1”とされる。また、第1の構成と異なり、第2の構成では時間管理情報はインデックスに必ず前置して配置される。このように、第2の構成の音源ハードウェア制御データでは3バイトあるいは4バイトを1組とするデータとされ、組の先頭には時間管理情報が配置される。
音源ハードウェア制御データ変換手段10bにより、図6に示すSMAFデータを解釈して第2のデータ構成の音源ハードウェア制御データに変換した例を図13に示す。第2のデータ構成の音源ハードウェア制御データは、図12に示すように時間管理情報、インデックス、データとを1組として構成されており、図13に示す第2のデータ構成の音源ハードウェア制御データを組毎に整理して図14に示している。以下、これらの図と図2を参照しながら第2のデータ構成の音源ハードウェア制御データを再生する説明をする。ただし、第2の構成の音源ハードウェア制御データはCPU10において再生に先立って変換されてRAM11の領域11bに記憶されているものとする。
CPU10におけるメモリコントローラ10aは、RAM11の領域11bから指示された図10に示す楽曲の第2の構成の音源ハードウェア制御データfを、例えば32バイト分読み出して音源ハードウェア15におけるFIFO31に転送する。同時に、CPU10はシーケンサスタート信号gをシーケンサ32のカウンタ32aに供給する。
また、シーケンサスタート信号gは、音源制御レジスタ33aの一部のレジスタであるレジスタ01hにデータ“01h”を書き込み、そのD0(start)を“1”にセットすることにより、シーケンサ開始を指示する。これにより、シーケンサ32はシーケンサ処理をスタートし、シーケンサスタート信号gを受けたカウンタ32aは、基準時間単位とされるクロックの計数を開始すると共に、データデコード回路32bにデータデコードスタート信号aを印加する。これを受けて、データデコード回路32bはFIFO31から1バイトずつデータを読み出す。この場合、読み出した先頭のデータは時間管理情報であり、このデータ“00h”を時間管理情報bとしてカウンタ32aにセットする。この場合、時間管理情報のMSBは“0”であるのでこの組の全体のデータ量は3バイトとなる。
さらに、データデコード回路32bはFIFO31から続く組のデータを読み出すが、読み出した先頭のデータは時間管理情報であり、このデータ“00h”を時間管理情報bとしてカウンタ32aにセットする。この場合、時間管理情報のMSBは“0”であるのでこの組の全体のデータ量も3バイトとなる。読み出されたインデックス“18h”と続いて読み出されたデータ“10h”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“18h”をアドレスとするレジスタ18hにデータ“10h”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタ18hにデータ“10h”を書き込む。レジスタ18hは、チャンネル1とチャンネル2の音色ナンバを指定するレジスタであるので、これにより、音源部33で生成される楽音のチャンネル1とチャンネル2の音色が指定される。
さらに続いて、データデコード回路32bはFIFO31から続く組のデータを読み出すが、読み出した先頭のデータは時間管理情報であり、このデータ“00h”を時間管理情報bとしてカウンタ32aにセットする。この場合、時間管理情報のMSBは“0”であるのでこの組の全体のデータ量も3バイトとなる。読み出されたインデックス“E0h”と続いて読み出されたデータ“1Fh”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“E0h”をアドレスとするレジスタE0hにデータ“1Fh”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタE0hにデータ“1Fh”を書き込む。レジスタE0hは、チャンネル1のチャンネルボリュームを指定するレジスタであるので、これにより、音源部33で生成される楽音のチャンネル1のチャンネルボリュームが指定される。
さらに続いて、データデコード回路32bはFIFO31から続く組のデータを読み出すが、読み出した先頭のデータは時間管理情報であり、このデータ“00h”を時間管理情報bとしてカウンタ32aにセットする。この場合、時間管理情報のMSBは“0”であるのでこの組の全体のデータ量も3バイトとなる。読み出されたインデックス“B0h”と続いて読み出されたデータ“B2h”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“B0h”をアドレスとするレジスタB0hにデータ“B2h”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタB0hにデータ“B2h”を書き込む。レジスタB0hは、チャンネル1のFナンバの下位8ビットを指定するレジスタである。
さらに続いて、データデコード回路32bはFIFO31から続く組のデータを読み出すが、読み出した先頭のデータは時間管理情報であり、このデータ“00h”を時間管理情報bとしてカウンタ32aにセットする。この場合、時間管理情報のMSBは“0”であるのでこの組の全体のデータ量も3バイトとなる。読み出されたインデックス“C0h”と続いて読み出されたデータ“32h”も音源制御レジスタライトデータであるので、レジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“C0h”をアドレスとするレジスタC0hにデータ“32h”を書き込む準備を行う。この場合も、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加され、レジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタC0hにデータ“32h”を書き込む。レジスタC0hは、チャンネル1のFナンバの上位2ビットとオクターブを指定すると共に、チャンネル1のキーオン/キーオフを指示するレジスタであり、キーオン/キーオフとして“1”(D5=1)がセットされる。これにより、チャンネル1のキーオンが指示されて、音源制御レジスタ33aにセットされているオクターブおよびFナンバの音高、ボリュームおよび音色の楽音がチャンネル1で生成開始される。
さらに続いて、データデコード回路32bはFIFO31から続く組のデータを読み出すが、読み出した先頭のデータは時間管理情報であり、このデータ“50h”を時間管理情報bとしてカウンタ32aにセットする。この場合、時間管理情報のMSBは“0”であるのでこの組の全体のデータ量は3バイトとなる。次いで、データデコード回路32bはFIFO31から続くデータを読み出す。読み出されたデータは、インデックス“B0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“B2h”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“B0h”をアドレスとするレジスタB0hにデータ“B2h”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“50h”とされているので、カウンタ32aの計数値が50h進むまで待機される。
そして、カウンタ32aの計数値が進み50h時間経過した時刻50hのタイミングで、カウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタB0hにデータ“B2h”を書き込む。レジスタB0hは、チャンネル1のFナンバの下位8ビットを指定するレジスタである。
次いで、データデコード回路32bはFIFO31から続く組のデータを読み出す。読み出した先頭のデータは時間管理情報であり、このデータ“00h”を時間管理情報bとしてカウンタ32aにセットする。この場合、時間管理情報のMSBは“0”であるのでこの組の全体のデータ量は3バイトとなる。読み出されたデータは、インデックス“C0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“12h”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“C0h”をアドレスとするレジスタC0hにデータ“12h”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“00h”とされているので、即時にカウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタC0hにデータ“12h”を書き込む。レジスタC0hは、チャンネル1のFナンバの上位2ビットとオクターブを指定すると共に、チャンネル1のキーオン/キーオフを指示するレジスタであり、キーオン/キーオフとして“0”(D5=0)がセットされる。これにより、2組のデータデ指定されたオクターブとFナンバの音高で音源部33で生成されていたチャンネル1の楽音のキーオフが指示されて、楽音の生成が停止される。
なお、このキーオフを指示する時間管理情報“50h”は、SMAFデータのゲートタイムに対応している。
以下、同様にして組毎のデータが読み出される毎に、音源制御レジスタ33aにデータが書き込まれるようになる。そして、データデコード回路32bがFIFO31から続く組のデータを読み出した際に、読み出した先頭のデータである時間管理情報が“80h”であったとする。この場合、時間管理情報のMSBは“1”であるのでこの組の時間管理情報は2バイトで表されることになる。そこで、続く時間管理情報”32h”を読み出して、読み出されたデータ“80h 32h”を時間管理情報bとしてカウンタ32aにセットする。この場合の全体のデータ量は4バイトとなる。データデコード回路32bはFIFO31から続くデータを読み出すが、読み出されたデータは、インデックス“C0h”であり音源制御レジスタライトデータであるので、続いて読み出されたデータ“32h”と共にレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“C0h”をアドレスとするレジスタC0hにデータ“32h”を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“80h 32h”とされているので、カウンタ32aの計数値が(80h 32h)進むまで待機される。
そして、カウンタ32aの計数値が進み(80h 32h)時間経過したタイミングで、カウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのレジスタC0hにデータ“32h”を書き込む。レジスタC0hは、チャンネル1のFナンバの上位2ビットとオクターブを指定すると共に、チャンネル1のキーオン/キーオフを指示するレジスタであり、キーオン/キーオフとして“1”(D5=1)がセットされる。
以下、順次1バイトずつデータが読み出されて、同様の処理が行われる。そして、最後にFIFO31からは時間管理情報“01h”とインデックス“01h”とデータ“00h”からなる組が読み出される。この時間管理情報“01h”は、時間管理情報bとしてカウンタ32aにセットされ、FIFO31から続いて読み出されたインデックス“01h”は音源制御レジスタライトデータcとしてレジスタライトコントローラ32cに送られる。さらに、データデコード回路32bはFIFO31から続いて読み出されたデータ“00h”をレジスタライトコントローラ32cに送られる。レジスタライトコントローラ32cは、インデックス“01h”をアドレスとするレジスタ01hにデータ“00h”(2進で“00000000”)を書き込む準備を行う。この場合、カウンタ32aにセットされている時間管理情報は“01h”とされているので、カウンタ32aの計数値が01h進むまで待機される。そして、カウンタ32aの計数値が1つ進み01h時間経過したタイミングで、カウンタ32aからレジスタライト許可信号dがレジスタライトコントローラ32cに印加される。これを受けてレジスタライトコントローラ32cは、音源制御レジスタ33aのうちのシーケンサ32に備えられているレジスタ01hにデータ“00h”を書き込む。レジスタ01hのD0はシーケンサスタート/ストップをシーケンサ32に指示するレジスタとされており、この場合シーケンサスタート/ストップとして“0”(D0=0)がセットされる。これにより、シーケンサ終了とされ、シーケンサ32はシーケンス処理を終了する。このように、インデックス“01h”とデータ“00h”からなる組のデータは、シーケンサ終了データである。
次に、第1の構成の音源制御レジスタデータを再生する際に音源ハードウェア15のシーケンサ32で実行される再生処理のフローチャートを図15に示す。
図15に示すフローチャートにおいて、シーケンサスタート信号gがCPU10からシーケンサ32へ印加されると再生処理がスタートされ、ステップS1にてデータデコード回路32bはFIFO31から先頭の1バイトのデータを読み込むようにする。次いで、ステップS2にて読み込んだデータが時間管理情報識別アドレスか否かがデータデコード回路32bで判断される。当該データがFFhとされており、時間管理情報識別アドレスの場合はYESと判断されてステップS3に進み、データデコード回路32bはFIFO31からさらに続く1バイトのデータを読み込むようにする。ここで読み込まれたデータは時間管理情報となるので、そのデータはカウンタ32aにセットされる。そして、ステップS4にてカウンタ32aにセットされた時間管理情報で示される時間だけ経過したか否かが判断される。経過していない場合は経過するまで待機されて、経過したと判断された際にステップS5に進む。なお、時間の経過はカウンタ32aの計数がセットされた時間管理情報の値以上となった際に経過したと判断する。
ステップS5にてデータデコード回路32bはFIFO31からさらに続く1バイトのデータを読み込むようにする。次いで、ステップS6にて読み込まれたデータが時間管理情報識別アドレスか否かがデータデコード回路32bで判断される。ここで、読み込まれたデータが時間管理情報識別アドレス(FFh)でないと判断されると、ステップS7へ進み読み込まれたデータが音源制御レジスタ33aへ送られる。ただし、このデータはインデックスであり、音源制御レジスタ33aに用意されているレジスタを指定するアドレスとなる。次いで、ステップS8にてデータデコード回路32bはFIFO31からさらに続く1バイトのデータを読み込むが、このデータはステップS7で送られたインデックスと組となるデータであり、ステップS9にてそのインデックスで指定された音源制御レジスタ33aのレジスタにデータライトされる。例えば、再生スタート時において最初に音源制御レジスタ33aに送られるのは、図9および図10に示す例ではインデックス18hとデータ“10h”とからなるデータとなる。
次いで、ステップS5およびステップS8にて読み込まれた2バイトのデータがシーケンサ終了データか否かが判断される。ここで、シーケンサ終了データは図9および図10に示すようにインデックス01hとデータ“00h”とからなるデータとされる。そこで、読み込まれたデータがインデックス01hとデータ“00h”との組のデータの場合は、シーケンサ終了データと判断されて再生処理は終了する。また、シーケンサ終了データでないと判断されると、ステップS5に戻りデータデコード回路32bはFIFO31からさらに続く1バイトのデータを読み込むようにする。次いで、ステップS6にて読み込まれたデータが時間管理情報識別アドレスか否かがデータデコード回路32bで判断される。ここで、読み込まれたデータが時間管理情報識別アドレス(FFh)と判断されると、ステップS3に戻りデータデコード回路32bはFIFO31からさらに続く1バイトのデータを読み込むようにする。ここで読み込まれたデータは時間管理情報となるので、そのデータはカウンタ32aにセットされる。そして、ステップS4にてカウンタ32aにセットされた時間管理情報で示される時間だけ経過したか否かが判断される。経過していない場合は経過するまで待機されて、経過したと判断された際にステップS5に進む。
以降、同様の処理が行われ、ステップS10にて読み込まれたデータがシーケンサ終了データと判断されると再生処理は終了する。この場合には、その前のステップであるステップS7およびステップS9によりシーケンサ終了データが音源制御レジスタ33aに書き込まれることになる。したがって、この際にはシーケンサ32において再生処理が終了される。なお、ステップS10からステップS5へ戻る処理が行われることにより、時間管理情報識別アドレスが読み込まれるまでに読み込まれた複数のデータを、1つの時間管理情報により音源制御レジスタ33aに送ることができる。これらの複数のデータを送ることにより、音源部33のキーオン/キーオフ、発音する音高、ボリュームや音色等が制御されるようになる。また、ステップS2にて読み込んだデータが時間管理情報識別アドレスでないとデータデコード回路32bで判断された場合は、第1の構成の音源制御レジスタデータではないと判断されて再生処理は終了する。さらに、フローチャートには示されていないが、FIFO31からのデータ読み込みエラー等が発生した場合にも再生処理は終了する。
次に、第2の構成の音源制御レジスタデータを再生する際に音源ハードウェア15のシーケンサ32で実行される再生処理のフローチャートを図16に示す。
図16に示すフローチャートにおいて、シーケンサスタート信号gがCPU10からシーケンサ32へ印加されると再生処理がスタートされ、ステップS21にてデータデコード回路32bはFIFO31から先頭の1バイトのデータを読み込むようにする。図12に示すように先頭のデータは時間管理情報であるので、そのデータのMSBが“1”か否かがステップS22にて判断される。ここで、読み込まれたデータのMSBが“1”と判断されると、時間管理情報は2バイト構成と判断されて、ステップS23に進んでデータデコード回路32bはFIFO31から続く1バイトのデータを読み込むようにする。読み込まれた2バイト構成の時間管理情報はカウンタ32aにセットされる。また、読み込まれたデータのMSBが“1”とステップS22で判断されない場合は、読み込まれた1バイトとされる時間管理情報がカウンタ32aにセットされる。そして、ステップS24にてカウンタ32aにセットされた時間管理情報で示される時間だけ経過したか否かが判断される。経過していない場合は経過するまで待機されて、経過したと判断された際にステップS25に進む。なお、時間の経過はカウンタ32aの計数がセットされた時間管理情報の値以上となった際に経過したと判断する。
ステップS25にてデータデコード回路32bはFIFO31からさらに続く2バイトのデータを読み込むようにする。ここで、読み込まれた2バイトのデータは時間管理情報に続くデータであり図12に示すようにインデックスとデータとされるから、ステップS26にて読み込まれた2バイトのデータが音源制御レジスタ33aへ送られる。この場合、インデックスで指定された音源制御レジスタ33aのレジスタにインデックスに続くデータがデータライトされる。例えば、再生スタート時において最初に音源制御レジスタ33aに送られるのは、図13および図14に示す例ではインデックス18hとデータ“10h”とからなるデータとなる。
次いで、ステップS25にて読み込まれた2バイトのデータがシーケンサ終了データか否かがステップS27にて判断される。ここで、シーケンサ終了データは図13および図14に示すようにインデックス01hとデータ“00h”からなるデータとされる。そこで、読み込まれたデータの組がインデックス01hとデータ“00h”との組のデータの場合は、シーケンサ終了データと判断されて再生処理は終了する。また、シーケンサ終了データでないと判断されると、ステップS21に戻り上述した処理が繰り返し行われる。
これにより、3バイトあるいは4バイトを組とするデータが順次読み出され、そのうちのインデックスとデータとが順次音源制御レジスタ33aへ送られて、該当するレジスタにデータが書き込まれるようになる。これにより、音源部33は音源制御レジスタ33aに書き込まれたデータに基づいて楽音を生成していくようになる。なお、ステップS27にて読み込まれたデータがシーケンサ終了データと判断されると再生処理は終了するが、この場合には、その前のステップであるステップS26によりシーケンサ終了データが音源制御レジスタ33aに書き込まれていることになる。したがって、この際にはシーケンサ32において再生処理が終了される。
以上説明したように、音源ハードウェア15におけるシーケンサ32における再生処理では、時間管理と、データを音源制御レジスタ33aに送る処理とを行うことになる。そして、時間管理は時間管理情報を分離してカウンタ32aにセットし、セットされた時間管理情報とカウンタ32aとの計数値を比較監視することにより行っている。このため、時間管理を行うハードウェアを簡易な構成とすることができ、その回路規模を小さくすることができる。また、データを音源制御レジスタ33aに送るのは、カウンタ32aとの計数値が時間管理情報の値以上となった際に出力されるレジスタライト許可信号dを受けることにより行えばよいので、そのハードウェアも簡易な構成とすることができる。これにより、シーケンサ32の回路規模を小さくすることができる。
なお、シーケンサスタート信号gによりカウンタ32aは計数を開始すると共に、シーケンサスタート信号gにより音源制御レジスタ33aの一部のレジスタであるレジスタ01hのD0(start)に“1”をセットするようにしている。この場合、シーケンサスタート信号gをレベル信号として、シーケンサスタート信号gのレベルに応じてカウンタ32aの計数をスタートさせると共に、レジスタ01hのD0(start)に“1”をセットするようにしてもよい。また、シーケンサスタート信号gに、インデックス“01h”とデータ“01h”からなるデータを含ませておいて、このデータによりレジスタ01hのD0(start)に“1”をセットするようにしてもよい。
次に、本発明の実施の形態にかかる携帯電話機1において、曲の任意の位置から再生することのできる本発明の他の実施の形態にかかる楽音生成装置の構成を図17に示す。
図17に示す本発明の楽音生成装置では、曲を再生する際の演奏開始位置を示す演奏開始ポイントデータを格納しているレジスタ領域11cがRAM11に設けられている。この構成において、前述した図2に示す本発明の楽音生成装置と異なる構成とされている。そこで、この構成についてのみ以下に説明するものとする。
RAM11におけるレジスタ領域11cには、曲を再生する際の演奏開始位置を示す演奏開始ポイントデータが格納されている。この演奏開始ポイントデータは、ユーザが任意に設定することができるようにされている。設定する際には、着信メロディあるいは保留音として選択されている曲において、どの位置から再生するかを携帯電話機1に用意されたメニューから設定する。この際に、演奏を開始するに適した位置にマークを曲の音楽コンテンツデータ中あるいは音楽コンテンツデータを変換した音源ハードウェア制御データ中に複数挿入しておき、いずれかのマークの位置をスタートポイントとして選択することにより、演奏開始位置を設定するようにしてもよい。マークを挿入する位置は、例えば曲のイントロ、メイン、フィルイン、サビ、エンディング等の先頭とされる。そして、CPU10は、音源ハードウェア制御データ変換手段10bにおいて、選択されている曲の音楽コンテンツデータを音源ハードウェア制御データに変換する。変換された音源ハードウェア制御データはRAM11における領域11bに格納される。
ここで、再生が指示されると、CPU10はRAM11におけるレジスタ領域11cに格納されている演奏開始ポイントデータを読み出して、演奏開始ポイントデータに対応する位置からの音源ハードウェア制御データをRAM11における領域11bから読み出し、順次音源ハードウェア15に転送する。音源部33は転送された音源ハードウェア制御データに基づいて演奏開始ポイントデータで示される位置からの楽音を生成することになる。なお、音楽コンテンツデータの先頭部分に音色データ、テンポデータやボリュームデータ等のセットアップデータが存在する際には、セットアップデータも音源ハードウェア制御データに変換してRAM11における領域11bに格納しておく。そして、再生が指示された際には、最初にセットアップデータに対応する音源ハードウェア制御データを領域11bから読み出して音源ハードウェア15に転送し、続いて演奏開始ポイントデータで示される位置からの音源ハードウェア制御データを領域11bから読み出して順次音源ハードウェア15に転送するようにする。これにより、曲を中途から再生するようにしても曲に設定されている音色、テンポ、音量とされた楽音が再生されるようになる。
ここで、着信ボタン等が操作されて再生ストップの指示がされた場合は、RAM11におけるレジスタ領域11cに格納する演奏開始ポイントデータとして、次回にその曲を再生する際に再生ストップされた位置から再生できるように再生終了の位置情報を格納する。この場合、演奏開始ポイントデータは、実際に再生を終了した曲の位置から後方において最初に検出されたマークの位置であるスタートポイントとすると、演奏開始した際に好適な位置から再生することができるようになる。なお、再生ストップの指示は、携帯電話機1において入力部17の着信ボタンの操作、保留解除の操作、あるいは、通信回線が切断された際に行われることになる。
上記したように、レジスタ領域11cに格納される演奏開始ポイントデータとして、音楽コンテンツデータを変換した音源ハードウェア制御データにおける演奏開始位置のアドレスデータとしている。これにより、演奏開始位置が変更される毎に、演奏開始位置からの音楽コンテンツデータを音源ハードウェア制御データに変換する必要をなくすことができる。
さらに、携帯電話機1がリセットされた場合にはレジスタ領域11cに格納される演奏開始ポイントデータは初期化される。さらに、着信メロディの曲が変更された際にもレジスタ領域11cに格納される演奏開始ポイントデータは初期化される。
次に、本発明の実施の形態にかかる携帯電話機1における楽音生成装置の変形例の構成を図18に示す。図18に示す楽音生成装置においては、変換された音源ハードウェア制御データの量を低減することが可能な構成とされており、この構成において、前述した図2に示す本発明の楽音生成装置と異なる構成とされている。そこで、この構成についてのみ以下に説明するものとする。
図18に示す本発明の楽音生成装置の変形例において、RAM11には音楽コンテンツデータであるファイル化されたMIDIデータやSMAFデータ等が領域11aに格納されている。また、CPU10において処理に余裕があったり空き時間等がある時や、あるいは音楽コンテンツデータの再生指示があった場合に、CPU10はRAM11の領域11aから音楽コンテンツデータを読み出して音源ハードウェア制御データに変換する変換処理を実行し、変換後の音源ハードウェア制御データをRAM11の領域11bに格納している。領域11aには複数曲分の音楽コンテンツデータが記憶可能とされ、領域11bにも複数曲分の音源ハードウェア制御データが記憶可能とされている。
ここで、図18に示す本発明の楽音生成装置の変形例において、一例とされるSMAFデータを変換した音源ハードウェア制御データ(第3の例)を図19に示す。図19に示されるように、音源ハードウェア制御データはデュレーションやゲートタイムに相当する時間管理情報と、音源制御レジスタライトデータから構成されている。そして、音源制御レジスタライトデータを構成しているインデックスは、前述したように音源制御レジスタ33aに備えられている各レジスタのアドレスを示す情報であり、後続するデータはそのアドレスで示されるレジスタに書き込まれるデータとされている。図18に示す本発明の楽音生成装置の変形例において、特徴とされるのは図19における音源ハードウェア制御データにおける2行目に示されているように、インデックスが複数バイト(図示する例では、2バイト)で表される場合があること、および、データが複数バイト(図示する例では、3バイト)で表される場合があること、さらに、3行目に示されているように時間管理情報が複数バイト(図示する例では、2バイト)で表される場合があることである。
ここで、時間管理情報を複数バイトで表すことができるようにしているのは、イベントとイベントの時間間隔を示すデュレーションデータや、発音期間を示すゲートタイムデータの範囲を広げるためである。例えば、時間管理情報を1バイトとすると0〜255までの範囲しか表すことができず、単位時間を1msとすると0〜255msの時間までしか表すことができない。そこで、時間管理情報を2バイトとすると、0〜65535(216−1)まで表すことができ、単位時間を1msとすると0〜65535msの時間まで表すことができるようになる。ただし、図18に示す本発明の楽音生成装置の変形例においては、各バイトのMSBを用いて後続するバイトがあるか否かを示すようにしていることから、各バイトで使用できるビット数はそれぞれ下位7ビットであり、0〜16383(214−1)までの範囲を表すことができるようになる。そして、時間管理情報を最大3バイトまでとすると、0〜16383msを超える時間を表すことができるようになる。
また、インデックスを複数バイトで表すことができるようにしているのは、次の理由による。図18に示す本発明の楽音生成装置の変形例においては、各バイトのMSBを用いて後続するバイトがあるか否かを示すようにしていることから、各バイトで使用できるビット数は1バイト中の下位7ビットとなる。すると、図7に示すように音源制御レジスタ33aのインデックスとしてはインデックス“EFh”まで必要であるにもかかわらず、下位7ビットの1バイトでは“7Fh”までしか表すことができない。そこで、インデックスを2バイトで表すようにして、例えばインデックス“6Fh 81h”とすると、MSBが“1”のバイトを上位バイトとしてそれぞれのバイトのMSBを除いて結合することにより、インデックス“EFh”を表すことができるようになる。なお、図18に示す本発明の楽音生成装置の変形例の仕様では、余裕を見てインデックスは最大3バイトまでとされている。
さらに、データを複数バイトで表すことができるようにしているのは、時間管理情報が同値とされているタイミングにおいて同種のイベントが複数チャンネル分生起した場合に、複数イベントに対応する音源制御レジスタライトデータを1行で表すことができるようにするためである。なお、音源制御レジスタ33aにおいて同種のイベントにおけるデータが書き込まれるレジスタのアドレスは、図7に示す音源制御レジスタマップに示されているように連続するアドレスとされており、これを利用して複数イベントに対応する音源制御レジスタライトデータを1行で表すことができるようにしている。
複数イベントに対応する音源制御レジスタライトデータを1行で表す具体例を図20を参照して次に説明する。
図20は、SMAFデータと、SMAFデータを変換した音源ハードウェア制御データとを対比して示しており、SMAFデータの1行目のデュレーションデータ“00”と「チャンネル番号0」におけるチャンネルボリュームメッセージのイベント“00 37 7F”は、時間管理情報“80h”、インデックス“60h 81h”とデータ“9Fh”に変換されている。また、SMAFデータの2行目のデュレーションデータ“00”と「チャンネル番号1」におけるチャンネルボリュームメッセージのイベント“00 77 55”は、時間管理情報“80h”、インデックス“61h 81h”とデータ“95h”に変換されている。さらに、SMAFデータの3行目のデュレーションデータ“00”と「チャンネル番号2」におけるチャンネルボリュームメッセージのイベント“00 F7 28”は、時間管理情報“80h”、インデックス“62h 81h”とデータ“85h”に変換されている。さらにまた、SMAFデータの4行目のデュレーションデータ“00”と「チャンネル番号3」におけるチャンネルボリュームメッセージのイベント“00 F7 28”は、時間管理情報“80h”、インデックス“63h 81h”とデータ“8Ah”に変換されている。
なお、インデックス“60h 81h”はインデックス“E0h”で表され、インデックス“61h 81h”はインデックス“E1h”で表され、インデックス“62h 81h”はインデックス“E2h”で表され、インデックス“63h 81h”はインデックス“E3h”で表されるが、その理由を次に説明する。図18に示す本発明の楽音生成装置の変形例においては、インデックスデータを1バイトあるいは2バイトないし3バイトの複数バイトで表すことができ、この場合は、前述したように各バイトにおける有効ビットは下位7ビットとされている。そして、インデックスデータにおける先頭バイトのMSBが“0”とされている場合はさらに上位のインデックスバイトが続くことを意味しており、そのMSBが“1”とされている場合は最上位のインデックスバイトであることを意味している。
すなわち、図20に示すインデックスデータにおける先頭のバイトは“60h”であり、そのMSBは“0”であることからさらに上位のインデックスバイトが続いていることになる。これに続くインデックスバイトは“81h”であり、そのMSBは“1”であることから当該インデックスバイトが最上位バイトとされている。このように、インデックスバイトが複数バイトとされている場合は下位のバイトから到来することになる。そして、上位のバイトから並べ直したインデックスデータは“81h 61h”となり、このインデックスデータから生成されるインデックス(レジスタのアドレス)はそれぞれのバイトの下位7ビットで表されるため、それを2進数で示すと“00 0000 1110 0000”となり、有意のビットは下位8ビットとなる。そこで、下位8ビットを16進数で示すと“E0h”となる。このように、インデックスデータ“60h 81h”はインデックス“E0h”を意味しており、同様にして、インデックス“61h 81h”はインデックス“E1h”で表され、インデックス“62h 81h”はインデックス“E2h”で表され、インデックス“63h 81h”はインデックス“E3h”で表されるのである。
これらのインデックスに対応するイベントは、連続するチャンネルのチャンネルボリュームメッセージであって対応するレジスタのアドレスが連続していることから、図20に示すように連続するインデックスとされており、さらに、時間管理情報も同値“80h”とされている。なお、時間管理情報データも複数バイトで表すことができ、時間管理情報データのバイトのMSBが“0”とされている場合はさらに上位の時間管理情報バイトが続くことを意味しており、そのMSBが“1”とされている場合は最上位の時間管理情報バイトを意味している。そして、各バイトにおける有効ビットは下位7ビットとされている。すなわち、図20に示す1行目から4行目までの時間管理情報データは“80h”とされており最上位バイトであって、この時間管理情報データから生成される時間管理情報は下位7ビットからなる“00h”となる。この時間管理情報は、シーケンサ32におけるタイマー32aに設定される。
図20に示すように連続するインデックスとされていると共に、時間管理情報も同値とされている場合は、対応するデータを連続して配置することにより、複数行で示されるSMAFデータを1行の音源ハードウェア制御データで表すことができる。すなわち、図20の矢印下部に示すように、図20におけるSMAFの1行目から4行目は、時間管理情報データ“80h”、インデックスデータ“60h 81h”とデータ“1Fh 15h 05h 8Ah”と、1行の音源ハードウェア制御データに変換することができる。この場合、インデックスは連続するインデックスの先頭のインデックスとされ、続くデータは、最終データを除いてそれぞれのデータにおける有効な下位7ビットのデータに変換される。すなわち、先頭のデータ“9Fh”はデータ“1Fh”に、2番目のデータ“95h”はデータ“15h”に、3番目のデータ“85h”はデータ“05h”に変換され、4番目のデータ“8Ah”はそのままとされる。これは、MSBを“1”として、4番目のデータ“8Ah”はそのデータが最終データバイトであることを示すためにそのままとされる。ただし、4番目のデータ値はMSBを除いた“0Ah”となる。このように時間管理情報が同値でインデックスが連続する場合は、複数行のSMAFデータを1行の音源ハードウェア制御データで表すことができるため、音源ハードウェア制御データの量を低減することが可能となる。
次に、図21ないし図24に示すフローチャートを参照しながら図18に示す本発明の楽音生成装置の変形例の動作を説明する。
図21に示す再生スタート処理のフローチャートにおいて、シーケンサスタート信号gがCPU10からシーケンサ32へ印加されるとカウンタ32aからデータデコード回路32bにデータデコードスタート信号が出力され、再生スタート処理が開始される。これにより、ステップS30にて後述する時間管理情報部処理が行われる。この時間管理情報部処理は、データデコード回路32bが実行する処理であり、FIFO31から1バイトずつ読み込んだ時間管理情報データに基づいて時間管理情報を生成して、カウンタ32aに生成された時間管理情報をセットしている。この実施の形態の場合では、時間管理情報データは1バイトないし3バイトから構成されるものとしている。そして、ステップS31にてカウンタ32aにセットされた時間管理情報で示される時間だけ経過したか否かが判断される。経過していない場合は経過するまで待機されて、経過したと判断された際にステップS32に進む。なお、時間の経過はカウンタ32aの計数がセットされた時間管理情報の値以上となった際に経過したと判断され、経過した際にはカウンタ32aからレジスタライトコントローラ32cにレジスタライト許可信号dが出力される。
ステップS32では、後述するアドレス部処理が行われる。このアドレス部処理は、データデコード回路32bおよびアドレスコントローラ32dが実行する処理であり、FIFO31から1バイトずつ読み込んだインデックスデータに基づいて、後続するデータを音源制御レジスタ33aに書き込むレジスタのアドレスを生成するように、アドレスコントローラ32dを制御している。この実施の形態の場合では、インデックスデータは1バイトないし3バイトから構成されるものとしている。
ステップS32においてアドレスが生成されると、ステップS33に進んで後述するデータ部処理が行われる。このデータ部処理は、データデコード回路32bおよびアドレスコントローラ32d、レジスタライトコントローラ32cが実行する処理であり、FIFO31から1バイトずつ読み込んだデータを音源制御レジスタ33aに書き込むようにしている。この実施の形態の場合では、データは1バイトないし3バイトから構成されるものとしている。そして、音源制御レジスタ33aに書き込まれるデータは楽音発生用のデータであり、この楽音発生用のデータを用いて音源部33が楽音を生成するようになる。このデータ部処理は、ステップS31の後に実行されるため、音源制御レジスタ33aには時間管理情報で示す時間に達した際に楽音発生用のデータが書き込まれることになるから、楽音は時間管理情報で示す時間になった時に発生されるようになる。
ステップS33のデータ部処理が終了すると、ステップS30に戻りステップS30ないしステップS33の処理が繰り返し行われ、これにより、FIFO31からSMAFデータを変換した音源ハードウェア制御データが順次読み出されていくようになり、音源部33において自動演奏されていくようになる。
次に、再生スタート処理におけるステップS30の時間管理情報部処理の詳細を図22に示すフローチャートを参照しながら説明する。
図22に示す時間管理情報部処理において、処理がスタートされるとステップS40にてデータデコード回路32bはFIFO31から1バイトの音源ハードウェア制御データを読み込むようにする。ここでは、読み込まれた音源ハードウェア制御データが、その先頭のデータである時間管理情報データあるいはMSBが“1”であるデータに続く時間管理情報データであるとする。次いで、ステップS41にて読み込まれた1バイトの時間管理情報データにおけるMSBが“1”か否かが判定される。ここで、MSBが“0”と判定された場合は続く上位の時間管理情報データバイトがあることから、ステップS42に進んで読み込まれた1バイトの時間管理情報データが時間管理情報1バイト目用テンポラリレジスタに書き込まれる。そして、ステップS43にてデータデコード回路32bはFIFO31から続く1バイトの時間管理情報データを読み込むようにする。
次いで、ステップS44にて読み込まれた2バイト目の時間管理情報データにおけるMSBが“1”か否かが判定される。ここで、MSBが“0”と判定された場合はさらに続く上位の時間管理情報データバイトがあることから、ステップS45に進んで読み込まれた2バイト目の時間管理情報データが時間管理情報2バイト目用テンポラリレジスタに書き込まれる。そして、ステップS46にてデータデコード回路32bはFIFO31からさらに続く1バイトの時間管理情報データを読み込むようにする。次いで、ステップS47にて読み込まれた1バイトの時間管理情報データにおけるMSBが“1”か否かが判定される。ここで、MSBが“0”と判定された場合はさらに続く上位の時間管理情報データバイトがあることを意味しているが、変形例における仕様では最大3バイトとされているため、MSBが“0”と判定された場合はエラーとなる。そこで、MSBが“0”と判定された場合は、エラー処理後に再生スタート処理のステップS31にリターンするようになる。
また、ステップS41にてMSBが“1”と判定された場合は、読み込まれた1バイト目の時間管理情報データが最上位のバイトとなることから、ステップS48にて読み込まれた1バイト目の下位7ビットから時間管理情報が生成されて、生成された時間管理情報がタイマー32aにセットされる。次いで、ステップS49にて全てのテンポラリレジスタがクリアされて、再生スタート処理のステップS31にリターンするようになる。
さらに、ステップS44にてMSBが“1”と判定された場合は、ステップS43で読み込まれた2バイト目の時間管理情報データが最上位のバイトとなることから、この2バイト目の時間管理情報データをステップS48にて上位バイト、時間管理情報1バイト目用テンポラリレジスタに書き込まれている1バイト目の時間管理情報データを下位バイトとして、各バイトの内の下位7ビットから時間管理情報が生成される。生成された時間管理情報は、タイマー32aにセットされる。次いで、ステップS49にて全てのテンポラリレジスタがクリアされて、再生スタート処理のステップS31にリターンするようになる。
さらにまた、ステップS47にてMSBが“1”と判定された場合は、ステップS46にて読み込まれた3バイト目の時間管理情報データが最上位のバイトとなることから、この3バイト目の時間管理情報データを最上位バイト、時間管理情報2バイト目用テンポラリレジスタに書き込まれている2バイト目の時間管理情報データを中位バイト、時間管理情報1バイト目用テンポラリレジスタに書き込まれている1バイト目の時間管理情報データを下位バイトとして、ステップS48にて各バイトの内の下位7ビットから時間管理情報が生成される。生成された時間管理情報は、タイマー32aにセットされる。次いで、ステップS49にて全てのテンポラリレジスタがクリアされて、再生スタート処理のステップS31にリターンするようになる。
このような時間管理情報部処理を、具体例を挙げて説明すると、例えば時間管理情報データのデータ列が“03h 37h 81h”であったとする。すると、FIFO31から最初に読み込まれた1バイトのデータ“03h”のMSBは“0”となるから、ステップS42にて読み込まれたデータ“03h”が時間管理情報1バイト目用テンポラリレジスタに書き込まれる。さらに、FIFO31から読み込まれた続く1バイトのデータ“37h”のMSBも“0”となるから、ステップS45にてデータ“37h”が時間管理情報2バイト目用テンポラリレジスタに書き込まれる。さらにまた、FIFO31から読み込まれたさらに続く1バイトのデータ“81h”のMSBは“1”となるから、読み込まれたデータ“81h”が最上位バイトとされる。そこで、ステップS48にてデータ“81h”を最上位バイト、時間管理情報2バイト目用テンポラリレジスタに書き込まれているデータ“37h”を中位バイト、時間管理情報1バイト目用テンポラリレジスタに書き込まれているデータ“03h”を最下位バイトとしてそれぞれのバイトの下位7ビットを結合すると、“00h 5Bh 83h”が生成される。生成された時間管理情報“00h 5Bh 83h”は、カウンタ32aにセットされる。
次に、再生スタート処理におけるステップS32のアドレス部処理の詳細を図23に示すフローチャートを参照しながら説明する。
図23に示すアドレス部処理において、処理がスタートされるとステップS50にてデータデコード回路32bはFIFO31から1バイトの音源ハードウェア制御データを読み込むようにする。読み込まれた音源ハードウェア制御データは、時間管理情報データに後続するデータであるからインデックスデータである。次いで、ステップS51にて読み込まれた1バイトのインデックスデータにおけるMSBが“1”か否かが判定される。ここで、MSBが“0”と判定された場合は続く上位のインデックスデータバイトがあることから、ステップS52に進んで読み込まれた1バイトのインデックスデータがアドレス1バイト目用テンポラリレジスタに書き込まれる。そして、ステップS53にてデータデコード回路32bはFIFO31から続く2バイト目のインデックスデータを読み込むようにする。
次いで、ステップS54にて読み込まれた2バイト目のインデックスデータにおけるMSBが“1”か否かが判定される。ここで、MSBが“0”と判定された場合はさらに続く上位のインデックスデータバイトがあることから、ステップS55に進んで読み込まれた2バイト目のインデックスデータがインデックス2バイト目用テンポラリレジスタに書き込まれる。そして、ステップS56にてデータデコード回路32bはFIFO31からさらに続く3バイト目のインデックスデータを読み込むようにする。次いで、ステップS57にて読み込まれた3バイト目のインデックスデータにおけるMSBが“1”か否かが判定される。ここで、MSBが“0”と判定された場合はさらに続く上位のインデックスデータバイトがあることを意味しているが、変形例における仕様ではインデックスデータは最大3バイトとされているため、MSBが“0”と判定された場合はエラーとなる。そこで、MSBが“0”と判定された場合は、エラー処理後に再生スタート処理のステップS33にリターンするようになる。
また、ステップS51にてMSBが“1”と判定された場合は、読み込まれた1バイト目の時間管理情報データが最上位のバイトとなることから、ステップS58にて読み込まれた1バイト目のインデックスデータがアドレスコントローラ32dに転送されて、アドレスコントローラ32dにおいて転送されたインデックスデータの下位7ビットから音源制御レジスタ33aにおけるレジスタのアドレスが生成される。このアドレスは音源制御レジスタ33aに供給され、レジスタライトコントローラ32cから供給されたデータがそのアドレスのレジスタに書き込まれるようになる。次いで、ステップS59にて全てのテンポラリレジスタがクリアされて、再生スタート処理のステップS33にリターンするようになる。
さらに、ステップS54にてMSBが“1”と判定された場合は、ステップS53にて読み込まれた2バイト目のインデックスデータが最上位のバイトとなることから、この2バイト目の上位バイトのインデックスデータと、インデックス1バイト目用テンポラリレジスタに書き込まれている1バイト目の下位バイトのインデックスデータとが、ステップS58にてアドレスコントローラ32dに転送される。そして、アドレスコントローラ32dにおいて転送された2バイトのインデックスデータの各バイトの下位7ビットから音源制御レジスタ33aにおけるレジスタのアドレスが生成される。このアドレスは音源制御レジスタ33aに供給され、レジスタライトコントローラ32cから供給されたデータがそのアドレスのレジスタに書き込まれるようになる。次いで、ステップS59にて全てのテンポラリレジスタがクリアされて、再生スタート処理のステップS33にリターンするようになる。
さらにまた、ステップS57にてMSBが“1”と判定された場合は、ステップS56にて読み込まれた3バイト目のインデックスデータが最上位のバイトとなることから、この3バイト目の最上位バイトのインデックスデータと、インデックス2バイト目用テンポラリレジスタに書き込まれている2バイト目の中位バイトのインデックスデータと、インデックス1バイト目用テンポラリレジスタに書き込まれている1バイト目の最下位のインデックスデータとが、ステップS58にてアドレスコントローラ32dに転送される。そして、アドレスコントローラ32dにおいて転送された3バイトのインデックスデータの各バイトの下位7ビットから音源制御レジスタ33aにおけるレジスタのアドレスが生成される。このアドレスは音源制御レジスタ33aに供給され、レジスタライトコントローラ32cから供給されたデータがそのアドレスのレジスタに書き込まれるようになる。次いで、ステップS59にて全てのテンポラリレジスタがクリアされて、再生スタート処理のステップS33にリターンするようになる。
次に、再生スタート処理におけるステップS33のデータ部処理の詳細を図24に示すフローチャートを参照しながら説明する。
図24に示すデータ部処理において、処理がスタートされるとステップS60にてデータデコード回路32bはFIFO31から1バイトの音源ハードウェア制御データを読み込むようにする。読み込まれた音源ハードウェア制御データは、インデックスデータに後続する楽音生成用のデータであるからステップS61にてレジスタライトコントローラ32cに供給される。レジスタライトコントローラ32cは、レジスタライト許可信号dがカウンタ32aから出力されたタイミングで供給されたデータを音源制御レジスタ33aに書き込む。この場合、ステップS32におけるアドレス部処理によりアドレスコントローラ32dは、データを書き込むべきレジスタのアドレスを音源制御レジスタ33aに供給している。また、レジスタライト許可信号dは、再生スタート処理におけるステップS31の処理において、既にレジスタライト許可信号dがカウンタ32aから出力されていることから、直ちにアドレスコントローラ32dから出力されているアドレスのレジスタにそのデータが書き込まれるようになる。
次いで、ステップS62にて読み込まれた1バイトのデータにおけるMSBが“1”か否かがデータデコード回路32bにおいて判定される。ここで、MSBが“0”と判定された場合は続くデータバイトがあることから、ステップS63に進んでデータデコード回路32bはアドレスコントローラ32dに現在のアドレスを1だけインクリメントさせる指示を行う。アドレスコントローラ32dは指示を受けて現在のアドレスを1だけインクリメントして、インクリメントしたアドレスを音源制御レジスタ33aに印加する。これは、前述したように複数バイトのデータとされている場合は、それぞれのデータの時間管理情報が同値でインデックスすなわちアドレスが連続しているからである。ステップS63の処理が終了すると、ステップS60に戻りデータデコード回路32bはFIFO31から続く1バイトのデータを読み込む。読み込まれたデータは、ステップS61にてレジスタライトコントローラ32cに供給され、既にレジスタライト許可信号dがカウンタ32aから出力されていることから、レジスタライトコントローラ32cは供給された続くデータを、音源制御レジスタ33aにおけるインクリメントされたアドレスのレジスタに直ちに書き込む。
次いで、ステップS62にて続いて読み込まれた1バイトのデータにおけるMSBが“1”か否かがデータデコード回路32bにおいて判定される。ここで、MSBが“0”と判定された場合はさらに続くデータバイトがあることから、ステップS63に進んでデータデコード回路32bはアドレスコントローラ32dに現在のアドレスをさらに1だけインクリメントさせる指示を行う。アドレスコントローラ32dは指示を受けて現在のアドレスをさらに1だけインクリメントして、インクリメントしたアドレスを音源制御レジスタ33aに印加する。ステップS63の処理が終了すると、ステップS60に戻りデータデコード回路32bはFIFO31からさらに続く1バイトのデータを読み込む。読み込まれたデータは、ステップS61にてレジスタライトコントローラ32cに供給され、既にレジスタライト許可信号dがカウンタ32aから出力されていることから、レジスタライトコントローラ32cは供給された続くデータを、音源制御レジスタ33aにおけるさらにインクリメントされたアドレスのレジスタに直ちに書き込む。次いで、ステップS62にて続いて読み込まれた1バイトのデータにおけるMSBが“1”か否かがデータデコード回路32bにおいて判定される。ここで、MSBが“1”と判定された場合は読み込まれたデータが最終のデータとなることから、再生スタート処理におけるステップS30にリターンする。また、MSBが“0”と判定された場合はさらに続くデータバイトがあることから、上記したようにステップS63ないしステップS62の処理がMSBが“1”と判定されるまで繰り返し実行されるようになる。これにより、複数イベントに対応する音源制御レジスタライトデータが1行で表わされている場合でも、それぞれの楽音生成用のデータを対応するレジスタに書き込めるようになる。
ところで、FIFO31から読み出した1バイトのデータにおけるMSBはフラグとして使用している。そこで、FIFO31から読み出した1バイトのデータが書き込まれたレジスタの値に応じた上述した処理を行う際に、レジスタにおけるMSBをマスクあるいは無視して下位7ビットに着目して処理するようにしてもよい。
上述したように、図18に示す本発明の楽音生成装置の変形例においては、音源ハードウェア制御データ変換手段10bがRAM11の領域11aに格納されている音楽コンテンツデータを音源ハードウェア制御データに変換する変換処理を実行するが、この際に、図20に例示したように時間管理情報が同値とされてインデックスが連続した値となる場合は、複数イベントに対応する音源制御レジスタライトデータを1行で表すように変換処理を行っている。
ここで、再生が指示されると、CPU10は再生指示された楽曲に対応する音源ハードウェア制御データをRAM11における領域11bから読み出し、順次音源ハードウェア15に転送する。音源部33は転送された音源ハードウェア制御データに基づいて楽音を生成するようになる。なお、音楽コンテンツデータの先頭部分に音色データ、テンポデータやボリュームデータ等のセットアップデータが存在する際には、セットアップデータも音源ハードウェア制御データに変換してRAM11における領域11bに格納しておく。そして、再生が指示された際には、最初にセットアップデータに対応する音源ハードウェア制御データを領域11bから読み出して音源ハードウェア15に転送し、続いて音源ハードウェア制御データを領域11bから読み出して順次音源ハードウェア15に転送するようにする。
音源ハードウェア15では、FIFO31を介して取り込んだ音源ハードウェア制御データをデータデコード回路32bによりデコードして分離した時間管理情報データから時間管理情報を生成してカウンタ32aにセットする。この時間管理情報の生成処理は図22に示す時間管理情報部処理により実行されるため、時間管理情報データが複数バイトから構成されていても時間管理情報を生成することができる。また、データデコード回路32bは時間管理情報データに後続するインデックスデータに基づいて、さらに後続するデータを書き込む音源制御レジスタ33aにおけるレジスタのアドレスを生成するようにアドレスコントローラ32dを制御している。このアドレスの生成処理は図23に示すアドレス部処理により実行されるため、インデックスデータが複数バイトから構成されていてもアドレスを生成することができる。
さらに、データデコード回路32bはインデックスデータに後続する楽音生成用のデータを、レジスタライトコントローラ32cに供給し、レジスタライトコントローラはカウンタ32aにセットされた時間管理情報に対応する時刻で出力されるレジスタライト許可信号dのタイミングで、音源制御レジスタ33aに供給されたデータを、アドレスコントローラ32dから指示されているアドレス位置に書き込む。これにより、音源部33では書き込まれた楽音生成用のデータに基づいて楽音を生成するようになる。なお、データを音源制御レジスタ33aに書き込む処理は、図24に示すデータ部処理により実行されるため、データが複数バイトから構成されている場合は、書き込むレジスタを示すアドレスが1ずつインクリメントされながら、それぞれのバイトのデータが音源制御レジスタ33aの該当するレジスタに順次書き込まれるようになる。
上記説明したように、本発明の楽音生成装置を本発明にかかる携帯端末装置である携帯電話機に適用した際には、携帯電話機1に基地局2を介してダウンロードセンター等から新たな音楽コンテンツデータをダウンロードした際に、ダウンロードした音楽コンテンツデータを前記したように音源ハードウェア制御データに変換して再生することができる。また、携帯電話機1に着信があった際に、着信メロディとして予め指定されている楽曲に対応する音源ハードウェア制御データをRAM11から読み出して再生することにより、着信メロディを放音することができる。この場合、任意の開始位置からの着信メロディを再生して放音することができる
1 携帯電話機、10 CPU、10a メモリコントローラ、10b 音源ハードウェア制御データ変換手段、11 RAM、11a 領域、11b 領域、11c レジスタ領域、12 ROM、13 通信部、14 音声処理部、15 音源ハードウェア、16 インタフェース、17 入力部、18 表示部、19 バイブレータ、20 外部機器、21 マイク、22 受話用スピーカ、23 着信用スピーカ、24 バス、25 アンテナ、32 シーケンサ、32a カウンタ、32b データデコード回路、32c レジスタライトコントローラ、32d アドレスコントローラ、33 音源部、33a 音源制御レジスタ、40 コンテンツ情報チャンク、41 スコアトラックチャンク、42 オーディオトラックチャンク、43 セットアップデータチャンク、44 シーケンスデータチャンク、110 CPU、111 音楽コンテンツデータ、115 音源ハードウェア、132 シーケンサ、132a ハードウェア固有制御データ変換部、132b 時間管理部、133 音源部、210 CPU、210a ハードウェア固有制御データ変換手段、210b 時間管理手段、211 SMAFデータ、215 音源ハードウェア、232 シーケンサ機能手段、233 音源部