(57)【特許請求の範囲】
【請求項１】
文字コード列を入力する文字コード列入力手段と、
スケールデータを記憶するスケール記憶手段と、
入力された文字コード列のなかの特定要素である文字コードを基準データとして選択する基準データ選択手段と、
前記基準データに対して基準の音高を割り当てるとともに、入力された文字コード列の各文字コードを、前記基準データと前記基準の音高と前記スケール記憶手段とを用いてスケール音の音高に変換して音列を生成する音列生成手段と、
を有することを特徴とする音列合成装置。
【請求項２】
文字コード列を入力する文字コード列入力手段と、
スケールデータを記憶するスケール記憶手段と、
各音高に割り当てるべき音長データを記憶する音長データ記憶手段と、
入力された文字コード列から音列を生成する音列生成手段であって、
（ａ）入力された文字コード列の各文字コードを前記スケール記憶手段を用いてスケール音の音高に変換することにより、音列の音高列を生成する音高列生成手段と、
（ｂ）変換された音高を前記音長データ記憶手段を用いて音長に変換することにより、前記変換された各音高に対応する音長を取得する音長変換手段と、
から成る音列生成手段と、
を有することを特徴とする音列合成装置。
【請求項３】
文字コード列を入力する文字コード列入力手段と、
スケールデータを記憶するスケール記憶手段と、
各音高に割り当てるべき音長と休符長のデータを記憶する音長・休符長記憶手段と、
入力された文字コード列から音列を生成する音列生成手段であって、
（ａ）入力された文字コード列の各文字コードを前記スケール記憶手段を用いてスケール音の音高に変換することにより、音列の音高列を生成する音高列生成手段と、
（ｂ）変換された音高を前記音長・休符長記憶手段を用いて音長とそれに続く休符長に変換することにより、音列のリズムを生成するリズム生成手段と、
から成る音列生成手段と、
を有することを特徴とする音列合成装置。
【請求項４】
文字コード列を入力する文字コード列入力手段と、
スケールデータを記憶するスケール記憶手段と、
各音高に割り当てるべき音長データを記憶する音長データ記憶手段と、
各音高に割り当てるべきエンベロープ制御データを記憶するエンベロープ制御データ記憶手段と、
入力された文字コード列から音列を生成する音列生成手段であって、
（ａ）入力された文字コード列の各文字コードを前記スケール記憶手段を用いてスケール音の音高に変換することにより、音列の音高列を生成する音高列生成手段と、
（ｂ）変換された音高を前記音長データ記憶手段を用いて音長に変換することにより、前記変換された各音高に対応する音長を取得する音長変換手段と、
（ｃ）変換された音高を前記エンベロープ制御データ記憶手段を用いてエンベロープ制御データに変換することにより、前記変換された各音高に対応するエンベロープ制御データを取得するエンベロープ変換手段と、
（ｄ）変換された音高と、これに対応する音長及びエンベロープ制御データに従う波形を順次作成する波形作成手段と、
から成る音列生成手段と、
を有することを特徴とする音列合成装置。
【請求項５】
文字コード列を入力する文字コード列入力手段と、
スケールデータを記憶するスケール記憶手段と、
入力された文字コード列から音列を生成する音列生成手段であって、
（ａ）入力された文字コード列のなかの特定要素である文字コードを基準データとして選択する基準データ選択手段と、
（ｂ）前記基準データに対して基準の音高を割り当てる基準音高割当手段と、
（ｃ）入力された文字コード列の各文字コードと前記基準データとの差を算出する差算出手段と、
（ｄ）算出された差を前記スケール記憶手段を用いて変換して音程を算出する音程算出手段と、
（ｅ）前記基準音高と前記音程とから各文字コードの音高を決定することにより、音高列を生成する音高列生成手段と、
から成る音列生成手段と、
を有することを特徴とする音列合成装置。
【請求項６】
文字コード列を入力する文字コード列入力手段と、
スケールデータを記憶するスケール記憶手段と、
入力された文字コード列から音列を生成する音列生成手段であって、
（ａ）入力された文字コード列のなかの特定要素である文字コードを基準データとして選択する基準データ選択手段と、
（ｂ）前記基準データに対して基準の音高を割り当てる基準音高割当手段と、
（ｃ）入力された文字コード列の各文字コードと前記基準データとの差を算出する差算出手段と、
（ｄ）算出された差を前記スケール記憶手段を用いて変換して音程を算出する音程算出手段と、
（ｅ）前記基準音高と前記音程とから各文字コードの音高を決定することにより、音高列を生成する音高列生成手段と、
（ｆ）前記基準データ選択手段、基準音高割当手段、差算出手段、音程算出手段及び音高列生成手段による音列の生成動作を所定の回数繰り返し、繰り返しの都度、前記基準データ選択手段が選択する基準データを変更する繰り返し制御手段と、
から成る音列生成手段と、
を有することを特徴とする音列合成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、コンピュータ等を用いた音楽装置に関し、特に、音列を合成する音列合成装置に属する。
【０００２】
【従来の技術】
音列を合成（ｃｏｍｐｏｓｅ）する音列合成装置は既に知られている。
例えば、本件出願人に係る特開昭６３−２５０６９６号には、モチーフ、コード進行及びキー（調）を入力すると音列を自動的に合成する音列合成装置が開示されている。
しかしながら、この種の従来の音列合成装置は、使用者にある程度の音楽知識が必要であり、入力が複雑であるという問題がある。
【０００３】
【発明が解決しようとする課題】
したがって、この発明の目的は、音楽知識が全くなくても、きわめて簡単な入力だけで音列を自動合成する音列合成装置を提供することである。
【０００５】
【課題を解決するための手段】
この発明によれば、文字コード列を入力する文字コード列入力手段と、スケールデータを記憶するスケール記憶手段と、入力された文字コード列のなかの特定要素である文字コードを基準データとして選択する基準データ選択手段と、前記基準データに対して基準の音高を割り当てるとともに、入力された文字コード列の各文字コードを、前記基準データと前記基準の音高と前記スケール記憶手段とを用いてスケール音の音高に変換して音列を生成する音列生成手段と、を有することを特徴とする音列合成装置が提供される。
この構成によれば、入力文字コード列の特定要素を基準データとして選択し、この基準データに対して基準の音高を割り当て、入力文字コード列の各文字コードを基準データとの関係においてスケールの音高に変換しているので、文字コード列を入力するだけで、スケール音の音高列から成る音楽的な音列を得ることが容易になり、誰でも簡単にオリジナルメロディを得ることができる。
【０００６】
更に、この発明によれば、文字コード列を入力する文字コード列入力手段と、スケールデータを記憶するスケール記憶手段と、各音高に割り当てるべき音長データを記憶する音長データ記憶手段と、入力された文字コード列から音列を生成する音列生成手段であって、（ａ）入力された文字コード列の各文字コードを前記スケール記憶手段を用いてスケール音の音高に変換することにより、音列の音高列を生成する音高列生成手段と、（ｂ）変換された音高を前記音長データ記憶手段を用いて音長に変換することにより、前記変換された各音高に対応する音長を取得する音長変換手段と、から成る音列生成手段と、を有することを特徴とする音列合成装置が提供される。
この構成によれば、入力文字コードをスケール上の音高に変換し、変換した音高をそれに対応づけた音長に変換しているので、入力文字コード列からリズムをもった音列を簡単に得ることができる。
【０００７】
更に、この発明によれば、文字コード列を入力する文字コード列入力手段と、スケールデータを記憶するスケール記憶手段と、各音高に割り当てるべき音長と休符長のデータを記憶する音長・休符長記憶手段と、入力された文字コード列から音列を生成する音列生成手段であって、（ａ）入力された文字コード列の各文字コードを前記スケール記憶手段を用いてスケール音の音高に変換することにより、音列の音高列を生成する音高列生成手段と、（ｂ）変換された音高を前記音長・休符長記憶手段を用いて音長とそれに続く休符長に変換することにより、音列のリズムを生成するリズム生成手段と、から成る音列生成手段と、を有することを特徴とする音列合成装置が提供される。
この構成によれば、入力文字コードをスケール上の音高に変換し、変換した音高をそれに対応づけた音長とそれに続く休符長に変換しているので、入力文字コード列から、所望のリズムをもった音列を簡単に得ることができる。
【０００８】
更に、この発明によれば、文字コード列を入力する文字コード列入力手段と、スケールデータを記憶するスケール記憶手段と、各音高に割り当てるべき音長データを記憶する音長データ記憶手段と、各音高に割り当てるべきエンベロープ制御データを記憶するエンベロープ制御データ記憶手段と、入力された文字コード列から音列を生成する音列生成手段であって、（ａ）入力された文字コード列の各文字コードを前記スケール記憶手段を用いてスケール音の音高に変換することにより、音列の音高列を生成する音高列生成手段と、（ｂ）変換された音高を前記音長データ記憶手段を用いて音長に変換することにより、前記変換された各音高に対応する音長を取得する音長変換手段と、（ｃ）変換された音高を前記エンベロープ制御データ記憶手段を用いてエンベロープ制御データに変換することにより、前記変換された各音高に対応するエンベロープ制御データを取得するエンベロープ変換手段と、（ｄ）変換された音高と、これに対応する音長及びエンベロープ制御データに従う波形を順次作成する波形作成手段と、から成る音列生成手段と、を有することを特徴とする音列合成装置が提供される。
この構成によれば、入力文字コードをスケール上の音高に変換し、変換した音高をそれに対応する音長とエンベロープ制御データに変換し、変換した音高、音長及びエンベロープ制御データを用いて波形データを作成しているので入力文字コード列から音楽的な表現、リズムの付いた音列を得ることができる。
【０００９】
更に、この発明によれば、文字コード列を入力する文字コード列入力手段と、スケールデータを記憶するスケール記憶手段と、入力された文字コード列から音列を生成する音列生成手段であって、（ａ）入力された文字コード列のなかの特定要素である文字コードを基準データとして選択する基準データ選択手段と、（ｂ）前記基準データに対して基準の音高を割り当てる基準音高割当手段と、（ｃ）入力された文字コード列の各文字コードと前記基準データとの差を算出する差算出手段と、（ｄ）算出された差を前記スケール記憶手段を用いて変換して音程を算出する音程算出手段と、（ｅ）前記基準音高と前記音程とから各文字コードの音高を決定することにより、音高列を生成する音高列生成手段と、から成る音列生成手段と、を有することを特徴とする音列合成装置が提供される。
この構成によれば、入力文字コード列の各文字コードをスケール上の音高に変換する際に、入力文字コード列の特定要素を基準データとして選び、この基準データに基準の音高を割り当て、入力された各文字コードと基準データとの差を算出し、この差をスケール上の音程に変換し、この音程を基準音高と組み合わせて各文字コードの音高を決定しているので、入力文字コード列から音楽的な音列を得ることが容易になる。
【００１０】
この構成に加え、繰り返し制御手段を設け、この繰り返し制御手段にて基準データ選択手段、基準音高割当手段、差算出手段、音程算出手段及び音高列生成手段による、入力文字コード列から音列への変換動作を繰り返し、変換動作の都度、基準データを変更するように制御する。
このようにすれば、同じ入力文字コード列から、複数の異なる音列を簡単に得ることができる。
【００１１】
【発明の実施の形態】
以下、図面を参照してこの発明の実施の形態を説明する。
図１にこの発明による音列合成装置の機能ブロック図を示す。
文字コード列入力部１０は文字コード列を入力する。この発明に従い、音列生成部２０は入力された文字コード列から音列を生成する。
音列生成部２０は音高列生成部３０を有する。音高列生成部３０は、入力された文字コード列の各文字コードをスケールデータベース４０を用いてスケール上の音高に変換することにより音列の音高列を生成する。ここにスケールデータベースはスケールのピッチクラスセット（スケールデータ）を記憶するメモリである。
１つの簡単な例では、音高列生成部３０は文字コードの値または文字コード値に対してモジュロ演算等の演算をした値（例えば、文字コード値ｍｏｄ１２）をスケールの構成音番号とみることにより、スケールデータベースから該当する構成音番号のピッチクラスまたは音高を得る。
【００１２】
好ましい構成例では、音高列生成部３０は、基準データ選択部３１と差算出変形部３２を有する。基準データ選択部３１は、入力された文字コード列のなかの特定の要素（例えば特定番目、例えば最後に入力された文字コード）である文字コードを基準データとして選択し、この基準データに対して基準の音高を割り当てる。差算出・変形部は、入力された文字コード列の各文字コードと基準データとの差を算出し、この差をスケールデータベース４０を用いて変換して音程（基準の音高に対する音程）を求め、この音程と基準の音高とを合成して各文字コードの音高を決定する。
上記基準の音高はスケールの特定の構成音（例えば主音）に対応づけられる。したがってこの構成によれば、入力文字コード列の特定の要素が基準データとしてスケールの特定の構成音に対応づけられるため、調性上自然な音高列を得ることが容易になる。
【００１３】
好ましい構成例において、音列生成部２０は音高列生成部３０が生成した音高列から音列のリズムを生成するリズム生成部５０を有する。
リズム生成部５０は音高に対応してリズムデータを記憶するリズムデータベース６０を用いることにより、音高列をリズムに変換する。
一構成例において、リズムデータベース６０は、各音高に割り当てるべき音長と休符長のデータを記憶する音長・休符長データベース６１を有する。この場合、リズム生成部５０は、生成された音高列の各音高を音長・休符長データベース６１を用いて音長とそれに続く休符長に変換する。
なお、音長・休符長データベース６１の代りに、各音高に割り当てるべき音長データを記憶する音長データベースを用いることができる。
【００１４】
更にリズムデータベース６０は各音高に割り当てるべきエンベロープ制御データを記憶するエンベロープ制御データベース６２を有し得る。この場合、リズム生成部５０は生成された音高列（ピッチデータの列）の各音高を用いてエンベロープ制御データベース６２をルックアップして対応するエンベロープ制御データに変換する。
更に音列生成部２０は生成された音列の各音の波形を生成する波形生成部７０を有し得る。音高列生成部３０とリズム生成部５０とにより、各文字コードが音高、音長及びエンベロープ制御データに変換される場合において、波形生成部７０はこれらの変換情報（音高、音長、エンベロープ制御データ）に従う波形を生成する。
【００１５】
図２は本音列合成装置のハードウェア構成例を示すブロック図である。
ＣＰＵ１はＲＯＭ２に記憶されたプログラムに従ってシステムの各部を制御する。ＲＯＭ２はプログラムと固定データを記憶する。ＲＡＭ３はＣＰＵ１のワークメモリとして使用される。入力装置は文字（数字のみでもよく、数字を含む文字でもよいし、数字を含まない文字でもよい）と制御用のコードを入力する。楽音合成装置は作成された波形データからアナログの楽音信号を出力する。サウンドシステム６はアンプ、スピーカを含み、楽音信号を増幅して放音する。
【００１６】
図３は音列合成装置が使用するデータベースを示すものである。
スケールデータベースｓｃａｌｅ［  ］は複数のスケールのピッチクラスセットを記憶する。ここでは、１オクターブのなかのどの音（どのピッチクラスの音またはどの度数の音）がスケール音であるかどうかを“１”、“０”のデータで表現している。
音長データベースｄｕｒ［  ］は１オクターブ内の各音高に割り当てられるべき音長データを記憶する。
休符長データベースｒｅｓｔ［  ］は１オクターブ内の各音高に割り当てるべき休符長データを記憶する。
ホールド時間データベースｈｏｌｄ［  ］は１オクターブ内の各音高に割り当てるべきエンベロープ制御データとしてホールド時間データを記憶する。
【００１７】
なお図３の例では各データベースはとり得る音高の範囲を１オクターブに圧縮して表現しているがこれには限らず、例えば数オクターブにわたる音高のそれぞれに対応づけてデータをもたせるようにしてもよい。またスケールデータベースは各スケールの音名コード（例えばＣ＝“１”、Ｃ♯＝“２”）を記憶する構造でもよい。
また、図３のスケールデータベースｓｃａｌｅ［  ］において、記号“Ｃ”は音名、音高またはピッチクラスの意味としてとらえてもよいし、あるいはスケールの度数１（または１度の音程）としてみてもよい。これにより、ある基準音高、例えばＥ３（第３オクターブのＥ）をスケールの度数１のスケール音に対応づけた場合、例えば、記号“Ｇ”に対応するスケール音は基準音高Ｅ３に対して完全５度の音程をもつ音高Ｂ３として解釈される。
【００１８】
図４に音列合成装置の動作において使用する変数を示す。
文字コード列ｃｈａｒ［  ］は入力装置４から入力された文字コード列を表す。
波形データｗａｖｅ［  ］は各サンプリングポイントでの波形の振幅値を記憶する。
その他の変数として、データポインタｐｔｒ、ノート番号ｎｏｔｅ（スケール上の音高を表わす）、周波数ｆｒｅｑ、基準周波数ｂａｓｅｆ、基準データｂａｓｅｄ、円周率×２である２ｐｉ、サンプリング周波数ｆｓ、発音中の長さｌｅｎ、振幅定数ａｍｐ、エンベロープ定数ｅｎｖ、データのレンジｒａｎｇｅ、カウンタｃｎｔ、単位時間長ｔｉｍｅ＿ｕｎｉｔ、振幅変更定数ｒｅｌ、時定数ｋ、ノートオフセットｎｏｔｅ＿ｏｆｆｓｅｔ（例えば２４）等が使用される。
【００１９】
図５に本音列合成装置の全体動作を表わすメインルーチンのフローチャートを示す。
Ａ１で各種変数（ｂａｓｅｆ、２ｐｉ、ｔｉｍｅ＿ｕｎｉｔ等）を初期化する。
Ａ２で入力装置４をキースキャンし、ユーザーの入力操作に従って対応する処理を実行する。すなわち、文字コード列などの入力指示（Ａ３）に対しては、入力処理Ａ４を実行し、メロディ作成の指示入力Ａ５に対してはメロディ（音列）作成処理Ａ６を実行し、モニター（音列の再生）の指示入力Ａ６に対してはモニター処理Ａ８（楽音合成装置５を動作させて生成した音列を楽音として再生する処理）を実行する。なお、図５のフローには示していないが、スケールデータベースｓｃａｌｅ［  ］上のどのスケールをメロディ作成処理Ａ６で使用するか決めるスケール選択処理を加えることが好ましい。スケール選択処理は、入力装置４からスケールの種類を選択入力することで行われる。
【００２０】
図６に入力処理Ａ４のフローチャートを示す。
まずデータカウンタｄｃを“０”に初期化し（Ｂ１）、Ｂ２でキーをスキャンして操作キーコードｋｅｙ［  ］を読み取る。
操作キーが終了キー（例えばエンターキー）なら、変数ｃｈａｒ［ｄｃ］に終了コードｅｎｄをセットする（Ｂ３、Ｂ４）。操作キーが文字キーならばその文字コードｋｅｙ［ｋｅｙ  ＩＤ］をｃｈａｒ［ｄｃ］にセットし、データカウンタｄｃをインクリメントする（Ｂ５〜Ｂ７）。
簡単な構成例では文字キーとしてテンキー（０〜９の数値入力キー）を使用できる。あるいは、アルファベット等の文字キーを使用するようにしてもよい。
【００２１】
図７に第１の態様によるメロディ作成（メロディ作成（１））のフローチャートを示す。
Ｃ１でデータポインタｐｔｒを文字コード列の先頭である“０”に初期化する。
Ｃ２でスケールデータベースｓｃａｌｅ［  ］を用いて文字コードｃｈａｒ［ｐｔｒ］をノート番号に変換する。これは、スケールデータベースｓｃａｌｅ［  ］上の選択スケール（例えばメジャースケール）からｃｈａｒ［ｐｔｒ］番目のスケール音をさがし出すことによって行われる。例えば、ノート番号カウンタとスケール音カウンタを用い、ノート番号カウンタを所定値に初期化し、スケール音カウンタを“０”に初期化し、スケールの先頭データ（図３の“Ｃ”の位置のデータ）からスケールの終りのデータ（図３の“Ｂ”のデータ）に向けてスキャンし、その間、ノート番号カウンタを順次インクリメントし、スケール音を見つけたら、スケール音カウンタをインクリメントし、文字コードｃｈａｒ［ｐｔｒ］と比較する。なお、１オクターブ分のスケールをみてもｃｈａｒ［ｐｔｒ］番目のスケール音がみつからない場合には、スケールを再び先頭からサーチする処理を繰り返すことによりｃｈａｒ［ｐｔｒ］番目のスケール音をみつけ出して、対応するノート番号を得る。
【００２２】
Ｃ３でノート番号ｎｏｔｅに対応する周波数ｆｒｅｑを求める。周波数ｆｒｅｑは、
ｆｒｅｑ＝ｂａｓｅｆ×２(100×note/1200)
で定められる。ここにｂａｓｅｆはｎｏｔｅ＝０に対応する基準周波数である。ｆｒｅｑは演算で直接求めてもよいし、指数変換テーブルを用いて求めてもよい。
Ｃ４でｎｏｔｅの波形データを作成する。
Ｃ５でデータポインタｐｔｒをインクリメントする。
Ｃ６で処理終了（ｐｔｒ＝ｄｃ）でなければＣ２に戻る。
【００２３】
図８に波形データ作成Ｃ４のフローＤ１〜Ｄ４を示す。
波形データは、周期関数を用いて作成される。図８では周期関数としてｓｉｎを用いているが、他の任意の周期関数、例えば、矩形波や三角波でもよい。波形データ作成処理は周波数と音色情報に応じて波形信号を出力する音源装置で行うようにしてもよい。
Ｄ２〜Ｄ４のループで作成される波形データの数は、音長（秒）×ｆｓ（ｆｓはサンプリング周波数）で与えられる。図８には音長の求め方を示していないが、予め初期設定した値を用いてもよいし、あるいは、波形データ作成Ｃ４の前処理として乱数発生器等により音長データを得るようにしてもよい。あるいは、図２に示す音長データベースｄｕｒ［  ］からｎｏｔｅの音長ｄｕｒ［ｎｏｔｅ］を得るようにしてもよい。
【００２４】
図１７に第１態様のメロディ作成（１）（図７）の動作例を示す。メジャースケールの場合と全音音階（ホールトーンスケール）の場合を示してある。この動作例では入力される文字コードとして０〜９の数字コードを使用している。この場合、音列の音域があまり広くならず１オクターブか１オクターブ半程度に収まるので都合がよい。
このように第１態様の音列合成装置によれば、文字コードの列を入力するだけで音列（メロディ）が生成される。
【００２５】
第２態様の音列合成装置によるメロディ作成のフローをメロディ作成（２）として図９に示す。
図中、Ｅ１、Ｅ４〜Ｅ７は、メロディ作成（１）（図７）のフローのＣ１、Ｃ３〜Ｃ６に対応している。異なる点は、Ｅ２の基準データｂａｓｅｄを求める処理とＥ３のノート番号を求める処理である。
基準データを求める処理Ｅ２では、入力された文字コード列ｃｈａｒ［  ］のなかの特定の要素である文字コードを基準データｂａｓｅｄとして選択する。
ノート番号を求める処理Ｅ３では、この基準データに対して基準の音高ｎｏｔｅ＿ｏｆｆｓｅｔを割り当て、この基準の音高をスケールの特定の構成音（例えば主音）に対応づける。そして、入力文字コード列の各文字コードと基準データとの差を算出し、この差をスケールデータベースｓｃａｌｅ［  ］を用いて音程（基準音高に対する音程）に変換し、この音程を基準音高に加えて各文字コードの音高（ノート番号）を求める。
【００２６】
基準データを求める処理Ｅ２のフローの例を図１０にＦ１〜Ｆ４で示す。ここでは、入力文字コード列の最後の文字コード（エンドマークｅｎｄより１つ前にある文字コード）を基準データｂａｓｅｄとして選択している（Ｆ２、Ｆ４）。
ノート番号を求める処理Ｅ３のフローの例を図１１に示す。
まずＧ１でノート番号のカウンタｃｎｔに、基準データに割り当てる基準音高のノート番号ｎｏｔｅ＿ｏｆｆｓｅｔをセットし、スケール音のカウンタｓｃｎｔを“０”に初期化する。
【００２７】
入力文字コードｃｈａｒ［ｐｔｒ］が基準データｂａｓｅｄのときは（ｃｈａｒ［ｐｔｒ］＝ｂａｓｅｄ）、ノート番号ｎｏｔｅとして基準音高ｎｏｔｅ＿ｏｆｆｓｅｔ（例えば２４）を割り当てる（Ｇ２、Ｇ１４）。
入力文字コードの値ｃｈａｒ［ｐｔｒ］が基準データｂａｓｅｄより大きいとき（Ｇ３でＹＥＳのとき）は次のようにしてノート番号ｎｏｔｅを求める。
まずノート番号のカウンタｃｎｔをインクリメントし（Ｇ４）、スケールデータベースｓｃａｌｅ［  ］から、このノート番号に対応する音がスケール音かどうか、即ち、
ｓｃａｌｅ［ｓｃａｌｅ＿ｉｄ×１２＋（ｃｎｔ  ｍｏｄ１２）］＝１
かどうかチェックする（Ｇ５）。ここにｓｃａｌｅ＿ｉｄは選択されたスケールの番号である。
【００２８】
ｃｎｔに対応する音がスケール音ならスケール音カウンタをインクリメントする（Ｇ６）。
Ｇ７で入力文字コードと基準データとの差（ｃｈａｒ［ｐｔｒ］−ｂａｓｅｄ）を求め、スケール音カウンタｓｃｎｔの値がこの差の値に達したかどうかチェックする。
達してなければＧ４へ戻る。
【００２９】
達しているときは、そのときの（ｃｎｔ−ｎｏｔｅ＿ｏｆｆｓｅｔ）の値は、ｃｈａｒ［ｐｔｒ］に対して割り当てるべき音高（ノート番号）が基準音高ｎｏｔｅ＿ｏｆｆｓｅｔに対して有する音程を表わしている。したがってこの音程（ｃｎｔ−ｎｏｔｅ＿ｏｆｆｓｅｔ）を基準音高ｎｏｔｅ＿ｏｆｆｓｅｔに加えることにより、文字コードｃｈａｒ［ｐｔｒ］を変換した音高（ノート番号）が得られる。
ｎｏｔｅ＝ｎｏｔｅ＿ｏｆｆｓｅｔ＋ｃｎｔ−ｎｏｔｅ＿ｏｆｆｓｅｔ
（ｎｏｔｅ＝ｃｎｔとしてもよいが、（ｃｎｔ−ｎｏｔｅ＿ｏｆｆｓｅｔ）が基準音高に対する音程であることを示すためにこのようにした）。
【００３０】
このように、入力文字コード値ｃｈａｒ［ｐｔｒ］が基準データｂａｓｅｄより大きいときは、両者の差（ｃｈａｒ［ｐｔｒ］−ｂａｓｅｄ）を求め、この差をスケールデータベースの選択スケール上で変換して、音程（ｃｎｔ−ｎｏｔｅ＿ｏｆｆｓｅｔ）を求め、この音程に基準音高ｎｏｔｅ＿ｏｆｆｓｅｔを加えることによって文字コードｃｈａｒ［ｐｔｒ］の音高ｎｏｔｅを決定している。
入力文字コード値ｃｈａｒ［ｐｔｒ］が基準データｂａｓｅｄより小さいとき（Ｇ３でＮＯのとき）は次のようにして文字コードｃｈａｒ［ｐｔｒ］の音高ｎｏｔｅを決定する。
この場合は、Ｇ４のようにノート番号カウンタｃｎｔをインクリメントするのではなく、デクリメントする（Ｇ６）。
【００３１】
ｃｎｔに対応する音がスケール音かどうかをチェックし、スケール音ならスケール音カウンタｓｃｎｔをインクリメントする点（Ｇ１０、Ｇ１１）は、ｃｈａｒ［ｐｔｒ］＞ｂａｓｅｄの場合と同様である。
Ｇ１２では、ｓｃｎｔ＝ｂａｓｅｄ−ｃｈａｒ［ｐｔｒ］かどうか、即ち、基準データと文字コードｃｈａｒ［ｐｔｒ］の差を求め、この差にスケール音カウンタｓｃｎｔが達したかどうかチェックする。
達してなければＧ９へ戻る。
達していれば、そのときの−１×（ｎｏｔｅ＿ｏｆｆｓｅｔ−ｃｎｔ）の値が、音程、即ち、変換されるべき音高ｎｏｔｅが基準音高に対して有する音程を表わしている。
【００３２】
したがって、
ｎｏｔｅ＝ｎｏｔｅ＿ｏｆｆｓｅｔ＋（−１×（ｎｏｔｅ＿ｏｆｆｓｅｔ−ｃｎｔ））
により、文字コードｃｈａｒ［ｐｔｒ］に対する音高（ノート番号）ｎｏｔｅが決定される（Ｇ１３）。
したがって、入力文字コードｃｈａｒ［ｐｔｒ］が基準データｂａｓｅｄより小さいときも、差（ｂａｓｅｄ−ｃｈａｒ［ｐｔｒ］）を求め、この差をスケールデータベースの選択スケール上で変換して音程（ｃｎｔ−ｎｏｔｅ＿ｏｆｆｓｅｔ）を求め、この音程に基準音高ｎｏｔｅ＿ｏｆｆｓｅｔを加えて入力文字コードｃｈａｒ［ｐｔｒ］に対するノート番号ｎｏｔｅを決定している。
【００３３】
図１１のフローにおいては、基準データの音高である基準音高ｎｏｔｅ＿ｏｆｆｓｅｔをスケールデータベース上のスケールの主音ｃに対応づけている（ｎｏｔｅ＿ｏｆｆｓｅｔ＝１２の倍数にした場合）。即ち、Ｇ５の式においてｃｎｔ＝ｎｏｔｅ＿ｏｆｆｓｅｔ＝１２の倍数にしたとき、選択スケールｓｃａｌｅ＿ｉｄの最初のスケール音（主音）ｃが位置ぎめされる。
なお、基準音高ｎｏｔｅ＿ｏｆｆｓｅｔは１２の倍数でなくてもよく、それに対応するようにフローを変形することは容易である。即ち、基準データに割り当てるべき音高として任意の所望の音高を定めることができる。
【００３４】
第２態様の音列合成装置によれば、文字コード列を入力するだけでメロディ（音列）が生成される。更に、入力文字コード列の特定の要素（例えば最後の文字コード）を基準データとして、これをスケールの特定の構成音（例えば主音）として基準音高を割り当てて、入力文字コード列の変換音高列を基準音高によってスケール上で相対化して決定しているので、音楽的に自然な音高列を得ることが容易になる利点がある。
【００３５】
なお、図１１のフローでは、文字コードｃｈａｒ［ｐｔｒ］が基準データｂａｓｅｄより大きいときはカウンタｃｎｔをインクリメントして基準音高より高い音高を求め、基準データより小さいときはカウンタｃｎｔをデクリメントして基準音高より低い音高を求めているが、この逆でもよい。
第２態様の音列合成装置の動作例を図１８に示す。文字コードとしては０〜９の数字コードを使用した。最終文字コードは“２”で、これを基準データとしてその音高（基準音高）をＣ２（ノート番号２４）にした。スケールとしてはメジャースケールを使用した。
【００３６】
図１２に第３態様のメロディ作成のフローをメロディ作成（３）として示す。このフローＨ１〜Ｈ７は図９のメロディ作成（２）のフローＥ１〜Ｅ７に対応しているが、波形データ作成処理Ｈ５で入力文字コードから得た音高に対応づけた発音時間の処理を行っている点が異なる。
波形データ作成処理Ｈ５のフローチャートの一例を図１３に波形データ作成（２）として示す。
図１３のフローＩ１〜Ｉ８では、波形データ作成の際に、図３に示すような音長データベースｄｕｒ［  ］と休符長データベースｒｅｓｔ［  ］を使用する。ここに、参照符号１００に示すように、音長ｄｕｒとは音の発音中の時間であり休符長ｒｅｓｔとは発音後の休止時間である。
【００３７】
Ｉ４に示すｄｕｒ［ｎｏｔｅ］は音長データベースｄｕｒ［  ］から読み取った、ノート番号ｎｏｔｅのピッチクラスに対応づけた音長データを表わしている。ｄｕｒ［ｎｏｔｅ］×ｔｉｍｅ＿ｕｎｉｔが音長に対応する波形データの数である。発音中の波形データの値ｗａｖｅ［ｐｔｒ］は、周期関数としてｓｉｎを用いた場合は、既に述べたように、ｗａｖｅ［ｐｔｒ］＝ｓｉｎ（２ｐｉ×ｐｔｒ×ｆｒｅｑ／ｆｓ）で与えられる（Ｉ２）。
したがってＩ１とループＩ２〜Ｉ４で音が発音中のときの波形データを作成している。
【００３８】
一方、Ｉ８に示すｒｅｓｔ［ｎｏｔｅ］は休符長データベースｒｅｓｔ［  ］から読み取った、ノート番号ｎｏｔｅのピッチクラスに対応づけた休符長データを表わしている。休符長に相当する波形データの数はｒｅｓｔ［ｎｏｔｅ］×ｔｉｍｅ＿ｕｎｉｔで与えられる。ただし、休止中であるので波形データの値（振幅値）としては“０”を入れる（Ｉ６）。
したがって、Ｉ５とループＩ６〜Ｉ８で休止中の波形データを作成している。
【００３９】
波形データ作成処理Ｈ５のフローチャートの別の例を図１４に波形データ作成（３）として示す。
図１４のフローＪ１〜Ｊ１２では、波形データ作成の際に、図３に示すような音長データベースｄｕｒ［  ］、休符長データベースｒｅｓｔ［  ］及びホールド時間データベースｈｏｌｄ［  ］を使用する。
参照符号２００に示すように、ホールド時間ｈｏｌｄは発音中ｄｕｒにおいて波形のレベルがホールドされる時間である。ここではホールド後は波形のレベルが減衰して音がリリースされるようにしている。
Ｊ２とループＪ３〜Ｊ８で発音中の波形データを作成している。ホールド時間ｈｏｌｄ［ｎｏｔｅ］中の波形データの値は、
ｗａｖｅ［ｐｔｒ］＝ａｍｐ×ｓｉｎ（２ｐｉ×ｐｔｒ×ｆｒｅｑ／ｆｓ）
で算出する（Ｉ３）。
【００４０】
ホールド時間後の発音は、即ち、Ｊ５でｐｔｒ≧ｈｏｌｄ［ｎｏｔｅ］×ｔｉｍｅ＿ｕｎｉｔが成立し、Ｊ８でｐｔｒ＜ｄｕｒ［ｎｏｔｅ］×ｔｉｍｅ＿ｕｎｉｔのときは、Ｊ３で求めたｗａｖｅ［ｐｔｒ］に係数ｒｅｌを乗じて、減衰された波形データ値ｗａｖｅ［ｐｔｒ］を得る（Ｊ６）とともにｒｅｌ＝ｒｅｌ×Ｋにより係数ｒｅｌを更新する（Ｊ７）。
発音後の休止時間中の処理Ｊ９〜Ｊ１２は図１３の処理Ｉ５〜Ｉ８と同様である。
なお図１４ではエンベロープ制御データとして音高に対応づけたホールド時間データを使用しているが他のエンベロープ制御データを用いてもよい。
【００４１】
メロディ作成（３）を実行する第３態様の音列合成装置の動作例を図１９に示す。
入力文字コードとして０〜９の数字コードを使用し、スケールとしてメジャースケールを使用した。
このように第３態様の音列合成装置によれば、文字コードの列を入力するだけで音列（メロディ）を生成できる。更に、文字コード列の特定要素を基準データとしてスケール上に相対化して音高列を生成するとともに、生成した音高列を音高に対応するリズムデータベース（音長データベース、休符長データベース、エンベロープ制御（ホールド時間）データベース）によりリズムに変換しているので、音楽的に自然な音列を容易に得ることができる。
【００４２】
さて、入力文字コードのとり得る値の範囲（入力文字コードの種類の数）が大きいときは、入力文字コードから音高への変換を１対１対応で行うと、生成される音高列の音域が広くなりすぎる。このような場合、入力文字コードからスケール上の音高への変換を多対１対応で行うと音高列の音域を適当な範囲にコントロールできる。
この原理に従って音高（ノート番号）を求める処理のフローチャートを図１５に示す。
図１５のフローＫ１〜Ｋ１４を図１１のフローＧ１〜Ｇ１４と比べてみると、Ｋ７とＫ１２のところだけ違っていることがわかる。
【００４３】
すなわち、Ｋ７では、（ｃｈａｒ［ｐｔｒ］−ｂａｓｅｄ）／ｒａｎｇｅを求め、この値にスケール音カウンタｓｃｎｔが達しているかどうかチェックしており、Ｋ１２では（ｂａｓｅｄ−ｃｈａｒ［ｐｔｒ］）／ｒａｎｇｅを求め、この値にスケール音カウンタｓｃｎｔが達しているかどうかをチェックしている。
基準データｂａｓｅｄと文字コードｃｈａｒ［ｐｔｒ］との差をレンジデータｒａｎｇｅで圧縮することにより、生成される音高（ノート番号ｎｏｔｅ）の音域がコントロールされる。
（ｃｈａｒ［ｐｔｒ］−ｂａｓｅｄ）／ｒａｎｇｅまたは（ｂａｓｅｄ−ｃｈａｒ［ｐｔｒ］）／ｒａｎｇｅの圧縮演算の代りに、（ｃｈａｒ［ｐｔｒ］−ｂａｓｅｄ）ｍｏｄ  ＲＡＮＧＥまたは（ｂａｓｅｄ−ｃｈａｒ［ｐｔｒ］）ｍｏｄ  ＲＡＮＧＥのようなモジュロによる圧縮演算を行ってもよい。
【００４４】
なお、図１５のフローは、基準データｂａｓｅｄを用いる方式であるが、基準データを用いなくてもよい。その場合、例えば、ｃｈａｒ［ｐｔｒ］ｍｏｄ  ＲＡＮＧＥの値をスケール音カウンタｓｃｎｔと比較することによって文字コードｃｈａｒ［ｐｔｒ］を音高ｎｏｔｅに変換できる。
【００４５】
第４態様の音列合成装置によるメロディ作成のフローチャートをメロディ作成（４）として図１６に示す。
図１６のフローＬ１〜Ｌ８では、入力文字コード列から音列への変換を所定回数繰り返すようにし（Ｌ８参照）、変換の都度、基準データを変更している。即ち、基準データを求める処理Ｌ２では、実行の都度、カウンタｃｎｔの値に対応する入力文字コードを基準データとして選択することにより、基準データを変更している（例えばｃｎｔ＝０なら最後の入力文字コード、ｃｎｔ＝１なら最後より１つ前の入力文字コードを基準データとする）。
【００４６】
第４態様の音列合成装置によれば、上述した効果のほか、同じ入力文字列から複数の異なる音列を得ることができる利点がある。
以上で実施の形態の説明を終えるが、この発明の範囲内で種々の変形が可能である。
【００４７】
【発明の効果】
この発明によれば、音列合成装置の入力手段として文字コード列を入力する手段を用い、入力文字コード列をスケール記憶手段を介してスケール音の音高列に変換しているので、ユーザーに音楽知識は全く必要なく、きわめて簡単な入力操作から音列を合成することができる。
【図面の簡単な説明】
【図１】この発明による音列合成装置の機能ブロック図。
【図２】音列合成装置のハードウェア構成例を示すブロック図。
【図３】音列合成装置が使用するデータベースを示す図。
【図４】音列合成装置が使用する変数を示す図。
【図５】音列合成装置の全体動作を表わすメインルーチンのフローチャート。
【図６】入力処理のフローチャート。
【図７】メロディ作成（１）のフローチャート。
【図８】波形データ作成のフローチャート。
【図９】メロディ作成（２）のフローチャート。
【図１０】基準データ選択のフローチャート。
【図１１】ノート番号を求める処理のフローチャート。
【図１２】メロディ作成（３）のフローチャート。
【図１３】波形データ作成（２）のフローチャート。
【図１４】波形データ作成（３）のフローチャート。
【図１５】ノート番号を求める処理（２）のフローチャート。
【図１６】メロディ作成（４）のフローチャート。
【図１７】メロディ作成（１）の動作例を示す図。
【図１８】メロディ作成（２）の動作例を示す図。
【図１９】メロディ作成（３）の動作例を示す図。
【符号の説明】
１  ＣＰＵ
２  ＲＯＭ
４  入力装置
１０  文字コード列入力部
２０  音列生成部
３０  音高列生成部
３１  基準データ選択部
３２  差算出・変形部
４０  スケールデータベース
５０  リズム生成部
６０  リズムデータベース
６１  音長・休符長データベース
６２  エンベロープ制御データベース
７０  波形生成部
【図１】
0003651241.tif 000002
【図２】
0003651241.tif 000003
【図３】
0003651241.tif 000004
【図４】
0003651241.tif 000005
【図５】
0003651241.tif 000006
【図６】
0003651241.tif 000007
【図７】
0003651241.tif 000008
【図８】
0003651241.tif 000009
【図９】
0003651241.tif 000010
【図１０】
0003651241.tif 000011
【図１１】
0003651241.tif 000012
【図１２】
0003651241.tif 000013
【図１３】
0003651241.tif 000014
【図１４】
0003651241.tif 000015
【図１５】
0003651241.tif 000016
【図１６】
0003651241.tif 000017
【図１７】
0003651241.tif 000018
【図１８】
0003651241.tif 000019
【図１９】
0003651241.tif 000020