(57)【要約】【課題】  楽曲の作曲が容易に行えるように支援しつつ、その作曲を行った実感がより得られるようにするための技術を提供する。【解決手段】  ゲートルーレットの開始が指示されると（ステップＳＢ２：ＹＥＳ）、ステップＳＢ３〜ＳＢ６の処理を実行することにより、音符の種類（発音時間）を自動的に選択する。ピッチルーレットの開始が指示された（ステップＳＢ８：ＹＥＳ）場合も同様に、ステップＳＢ９〜ＳＢ１２の処理を実行することにより、音符のピッチを自動的に選択する。それにより、ユーザーが作曲を行うのを支援する。【選択図】      図５
2006084855.tif 000002
【特許請求の範囲】
【請求項１】
楽曲の演奏内容を示す音符の並びである音符列を生成することにより行われる作曲を支援する装置であって、
前記音符列を構成させる音符単位に、該音符の種類、及び該音符の楽譜上の配置に相当する発音条件をユーザーの指示に応じて自動的、且つ個別に選択する音符選択手段と、
前記音符選択手段が自動的に個別に選択した種類、及び発音条件で指定される音符を有する前記音符列を生成する音符列生成手段と、
を具備することを特徴とする作曲支援装置。
【請求項２】
前記音符選択手段は、前記音符の種類、及び前記発音条件のうち少なくとも一方の選択候補を提示させ、該提示させた選択候補のなかから一つをユーザーの指示に応じて自動的に選択する、
ことを特徴とする請求項１記載の作曲支援装置。
【請求項３】
前記音符選択手段による選択の対象となる選択候補は変更できる、
ことを特徴とする請求項２記載の作曲支援装置。
【請求項４】
楽曲の演奏内容を示す音符の並びである音符列を生成することにより行われる作曲を支援する作曲支援装置に実行させるプログラムであって、
前記音符列を構成させる音符単位に、該音符の種類、及び該音符の楽譜上の配置に相当する発音条件をユーザーの指示に応じて自動的、且つ個別に選択する音符選択手段と、
前記音符選択手段が自動的に個別に選択した種類、及び発音条件で指定される音符を有する前記音符列を生成する音符列生成手段と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽曲の演奏内容を示す音符の並びである音符列を生成することにより行われる作曲を支援するための技術に関する。
【背景技術】
【０００２】
現在では、例えば特許文献１に記載されたように、作曲を自動的に行う自動作曲装置が創案されている。そのような自動作曲装置を利用することにより、音楽の専門知識が少ないような人（以降、便宜的に「初心者」と呼ぶ）でも作曲を楽しむことができる。
【０００３】
上記自動作曲装置では、楽曲の演奏内容を示す音符の並びである音符列を自動的に生成するために、ユーザーである初心者にとっては非常に利便性が高いものとなっている。しかし、その高い利便性のために、自身が作曲を行ったという実感は得にくいのが実情となっている。このことから、その実感をより得られるようにすることも重要であると考えられる。
【０００４】
作曲を支援する作曲支援装置としては、例えば特許文献２に記載されたものがある。その特許文献２に記載された従来の作曲支援装置では、テーブル上に置かれた音符カードの２次元情報を取得することにより、音符カードの配置の仕方によって作曲が行えるようになっている。しかし、初心者の大部分は、音符カードの配置をどのように決定すれば良いか分からないのが実情である。このことから、作曲を行った実感が得られるようにするだけでなく、その作曲が容易に行えるように支援することも重要であると考えられる。
【特許文献１】特開昭６２−１８７８７６号公報
【特許文献２】特開２００２−１９６７５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の課題は、楽曲の作曲が容易に行えるように支援しつつ、その作曲を行った実感がより得られるようにするための技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明の作曲支援装置は、楽曲の演奏内容を示す音符の並びである音符列を生成することにより行われる作曲を支援することを前提とし、音符列を構成させる音符単位に、該音符の種類、及び該音符の楽譜上の配置に相当する発音条件をユーザーの指示に応じて自動的、且つ個別に選択する音符選択手段と、音符選択手段が自動的に個別に選択した種類、及び発音条件で指定される音符を有する音符列を生成する音符列生成手段と、を具備する。
【０００７】
なお、上記音符選択手段は、音符の種類、及び発音条件のうち少なくとも一方の選択候補を提示させ、該提示させた選択候補のなかから一つをユーザーの指示に応じて自動的に選択する、ことが望ましい。また、音符選択手段による選択の対象となる選択候補は変更できる、ことが望ましい。
【０００８】
本発明のプログラムは、上記作曲支援装置が具備する手段を実現させるための機能を搭載している。
【発明の効果】
【０００９】
本発明は、楽曲の演奏内容を示す音符の並びである音符列を構成させる音符単位に、その音符の種類、及びその音符の楽譜上の配置に相当する発音条件をユーザーの指示に応じて自動的、且つ個別に選択し、自動的に個別に選択した種類、及び発音条件で指定される音符を有する音符列を生成することにより、楽曲の作曲を支援する。
【００１０】
ユーザーの指示に応じて音符単位に、その音符の種類、及びその発音条件を自動的、且つ個別に選択するようにしたことにより、ユーザーにとっては自身が作曲を行っている実感が持てるようになる。それらを自動的に選択することにより、音楽の専門知識が乏しいものでも作曲を容易に行えるようになる。これらの結果、ユーザーにとっては、楽曲の作曲が容易に行えるように支援されるとともに、その作曲を行った実感がより得られることとなる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
＜第１の実施の形態＞
図１は、第１の実施の形態による作曲支援装置の構成を説明する図である。
【００１２】
その作曲支援装置は、図１に示すように、装置全体の制御を行うＣＰＵ１０１と、そのＣＰＵ１０１がワークに用いるＲＡＭ１０２と、ＣＰＵ１０１が実行するプログラムや各種制御用データを格納したＲＯＭ１０３と、例えば各種キー等の操作子を有するキーボードやポインティングデバイス等である入力装置１０４と、例えば液晶表示装置である表示装置１０５と、ＭＩＤＩデータの入出力を行えるＭＩＤＩインターフェース（Ｉ／Ｆ）１０６と、を備えて構成されている。
【００１３】
上述したような構成の作曲支援装置は、例えばパーソナルコンピュータ（ＰＣ）、或いはＰＤＡといったデータ処理装置である。その作曲支援装置は、後述するような動作を行わせるプログラム（アプリケーション・プログラム。以降「アプリケーション」と略記）をＣＰＵ１０１に実行させることで実現される。ここでは便宜的に、そのアプリケーションはＲＯＭ１０３に格納されていることとする。
【００１４】
そのアプリケーションは、起動されると、例えば図９に示すような楽曲データ作成画面を表示装置１０５に表示させる。その画面には、上部に五線譜（楽譜）が配置され、その下方に、図中、四分音符や八分音符等のシンボル（の画像）を有する円盤（ゲートタイム用ルーレット）、及び図中「ド」や「レ」といった音名を示すシンボル（の画像）を有する円盤（ピッチ用ルーレット）が配置されている。各円盤（ルーレット）の下方には、「スタート」「ストップ」の２つのボタンが配置されている。ボタンとしては他に、音符列（楽曲データ）として加える音符の作成を指示するための「作成」ボタン、作成した音符の確定を指示するための「確定」ボタン、作成された音符列の再生を指示するための「再生」ボタン、その停止を指示するための「停止」ボタン、及びアプリケーションの終了を指示するための「終了」ボタン、が配置されている。
【００１５】
ゲートタイム用ルーレットは、音符の種類選択用であり、ピッチ用ルーレットは、音符の音高（ピッチ（ノート番号））選択用である。各ルーレットは、対応する「スタート」ボタンのクリックにより回転しているように表示される。その後の「ストップ」ボタンのクリックにより、ルーレット上に配置されたシンボルのなかで自動的にシンボルを選択し、選択したシンボルが選択位置となるようにルーレットを停止させる。図９では、ゲートタイム用ルーレットでは四分音符、ピッチ用ルーレットでは音名「レ」がそれぞれ選択位置に位置している。そのようにして、本実施の形態では、音符列に加える音符の種類、及びその音符の音高をそれぞれ別のルーレットによりユーザーに自動的に選択させるようにしている。
【００１６】
音符の種類、及びその音符の音高はそれぞれ別個に自動的に選択されるが、その選択を行わせるためにユーザーは「スタート」「ストップ」ボタンを操作しなければならない。その操作を行うことにより、ユーザーにとっては自身が音符の種類やその音高を決定しているような感覚を持てるようになる。作曲自体は、その操作を順次していくことで行うことができる。これらのことから、音楽の専門知識のない人でも楽曲の作曲は容易に行うことができ、その作曲を行った実感も得られることとなる。ルーレット上に選択候補となる内容を示すシンボルを配置したことは、選択候補のなかの一つを自身が選択しているような感覚をより与えるように作用する。
【００１７】
以降は、図２、及び図３に示す各説明図、及び図４〜図８に示す各種処理のフローチャートを参照しつつ、作曲支援装置の動作について詳細に説明する。
図４は、作曲支援処理のフローチャートである。始めに図４を参照して、その作曲支援処理について詳細に説明する。その支援処理は、ＣＰＵ１０１がＲＯＭ１０３に格納されたアプリケーションを実行することで実現される。
【００１８】
そのアプリケーションは起動されると、先ず、ステップＳＡ１で変数初期化を行う。続くステップＳＡ２では、図９に示すような楽曲データ作成画面を生成して表示装置１０５に表示させる。その後に移行するステップＳＡ３では、作成指示がされたか否か判定する。ユーザーが入力装置１０４を操作して「作成」ボタンをクリックした場合、その入力装置１０４から送出される信号の解析によってそのことが判明することから、判定はＹＥＳとなり、ステップＳＡ４で楽曲データ作成処理を実行した後、ステップＳＡ５に移行する。そうでない場合には、判定はＮＯとなって次にそのステップＳＡ５に移行する。
【００１９】
ステップＳＡ５では、再生指示がされたか否か判定する。ユーザーが入力装置１０４を操作して「再生」ボタンをクリックした場合、同様にしてそのことが判明することから、判定はＹＥＳとなってステップＳＡ６に移行する。そうでない場合には、判定はＮＯとなってステップＳＡ９に移行する。
【００２０】
ステップＳＡ６では、ユーザーが作曲した楽曲を対象にした再生処理を実行する。続くステップＳＡ７では、ユーザーが「停止」ボタンをクリックするか、或いは楽曲の再生が終了するのを待つ。そのボタンがクリックされるか、或いは再生が終了すると、判定はＹＥＳとなり、再生処理用に起動させた楽曲再生用のルーチン（プログラム）をステップＳＡ８で停止させてからステップＳＡ９に移行する。
【００２１】
ステップＳＡ９では、終了指示がされたか否か判定する。「終了」ボタンをユーザーがクリックした場合、判定はＹＥＳとなり、ここで一連の処理を終了する。そうでない場合には、判定はＮＯとなって上記ステップＳＡ３に戻る。それにより、次に行うユーザーの指示に備える。
【００２２】
図５は、上記ステップＳＡ４として実行される楽曲データ作成処理のフローチャートである。次に図５を参照して、その作成処理について詳細に説明する。その作成処理は、上記ルーレットを用いた１音符分の楽曲データの作成を支援するための処理である。
【００２３】
その作成処理の説明を開始する前に、その処理内で参照、或いは生成されるデータについて具体的に説明する。
始めに、楽曲データについて説明する。
【００２４】
その楽曲データは、楽曲の演奏内容を音符単位で示すデータ（以降「音符データ」と呼ぶ）の集合体として構成されている。図２（ａ）中に括弧を付して表記の「Ｎｏｔｅ」はその音符データを表している。括弧内の数値は、音符データを指定するインデックス（値）である。以降、インデックスが判明している音符データには「Ｎｏｔｅ」、及びそれに続けて括弧内にインデックスを示す数値、或いは変数のシンボルを表記したものを付して例えば「音符データＮｏｔｅ［０］」といったように記載し、そのインデックスが判明していない音符データには単に「Ｎｏｔｅ」を付して記載することとする。これは他でも同様である。
【００２５】
その音符データＮｏｔｅは、「ｉＴｉｍｅ」と表記の発音開始ティック（時刻）、「ｉＧａｔｅ」と表記のゲートタイム（発音継続時間）、「Ｐｉｔｃｈ」と表記のピッチ（ノート番号）、「Ｖｅｌ」と表記の音量を示すベロシティ（値）、及び「ｐＮｅｘｔ」と表記の次に処理対象となる音符データＮｏｔｅのインデックス、の各データを備えた構成となっている。
【００２６】
図１に示すＲＡＭ１０２は、例えば不図示のバッテリによって不揮発性化されており、楽曲データはそのＲＡＭ１０２に確保された領域に格納されている。その領域に、楽曲データ作成処理を実行することで音符データＮｏｔｅが１つ追加される。
【００２７】
図３は、ＲＯＭ１０３に格納されたリストデータの構成を説明する図である。次に図３を参照して、そのリストデータについて具体的に説明する。
本実施の形態では、音符の種類（ゲートタイム）、及びその音高をそれぞれルーレットで自動的に選択するようにしている。リストデータは、選択候補のなかから一つを選択できるように用意したものである。そのリストデータは、図３（ａ）に示すゲートタイム用、図３（ｂ）に示すピッチ用に分けて用意している。
【００２８】
図３（ａ）に示すゲートタイム用のリストデータは、選択候補毎に用意されたデータ（以降「候補データ」と呼ぶ）から構成されている。図中、括弧を付して表記の「ＲｌｉＧ」はその候補データを表している。その候補データＲｌｉＧは、「ｉＩＤ」と表記のルーレット番号、及び「ＩＧａｔｅ」と表記のゲートタイム、の各データを備えている。候補データＲｌｉＧの総数は定数ｎＧａｔｅとして用意されている。図３（ｂ）に示すピッチ用のリストデータも同様にして、候補データＲｌｔＰ毎に、「ｉＩＤ」と表記のルーレット番号、及び「ＩＰｉｔｃｈ」と表記のピッチ、の各データを備えている。候補データＲｌｉＰの総数から１を引いた値は定数ｎＰｉｔｃｈとして用意されている。
【００２９】
上記リストデータを参照した候補の選択は、乱数を発生させ、その乱数の値からルーレット番号を求め、そのルーレット番号を持つ候補データに格納されたデータ（データＩＧａｔｅ、或いはＩＰｉｔｃｈ）を選択結果とすることで行われる。
【００３０】
図５の説明に戻る。
先ず、ステップＳＢ１では、変数ｐＮｏｔｅｔｍｐに、音符データＮｏｔｅを格納する空き位置（楽曲データ格納用に確保した領域内のエリア）を示す値を代入、変数ｐＮｏｔｅＬａｓｔに、最後の音符データＮｏｔｅが格納された位置を示す値を代入する。続くステップＳＢ２では、ゲートタイム用ルーレットの開始が指示されたか否か判定する。そのルーレット用の「スタート」ボタンをユーザーがクリックしなかった場合、判定はＮＯとなってステップＳＢ８に移行する。そうでない場合には、判定はＹＥＳとなってステップＳＢ３に移行する。
【００３１】
ステップＳＢ３では、ルーレットが回転しているような描画を行う。次のステップＳＢ４では、ルーレットの終了が指示されたか否か判定する。そのルーレット用の「ストップ」ボタンをユーザーがクリックしていない場合、判定はＮＯとなってステップＳＢ３に戻る。それにより、回転している様子を表現するための描画を継続させる。一方、そうでない場合には、判定はＹＥＳとなってステップＳＢ５に移行する。
【００３２】
ステップＳＢ５では、乱数を発生させ、ゲートタイム用のリストデータを構成する候補データＲｌｔＧの総数である定数ｎＧａｔｅでその乱数の値を割って得られる余りを変数ｉｄｘに代入する。次に移行するステップＳＢ６では、変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅのデータＩＧａｔｅ（図中「Ｎｏｔｅ［ｐＮｏｔｅｔｍｐ］．ＩＧａｔｅ」と表記。以降、その表記法も併せて用いる。これは他でも同様である）として、候補データＲｌｔＧのなかでデータｉＩＤとして変数ｉｄｘの値を格納した候補ＲｌｔＧが持つデータＩＧａｔｅを設定する。その後、ステップＳＢ８に移行する。
【００３３】
ステップＳＢ８では、ピッチ用ルーレットの開始が指示されたか否か判定する。そのルーレット用の「スタート」ボタンをユーザーがクリックしなかった場合、判定はＮＯとなってステップＳＢ１３に移行する。そうでない場合には、判定はＹＥＳとなってステップＳＢ９に移行する。
【００３４】
ステップＳＢ９〜ＳＢ１２では、上記ステップＳＢ３〜ＳＢ６と同様の処理が行われる。このことから、ここでは詳細な説明は省略することとする。ステップＳＢ１３には、ステップＳＢ１２の処理の実行後に移行する。
【００３５】
ステップＳＢ１３では、確定処理が指示されたか否か判定する。「確定」ボタンをユーザーがクリックしなかった場合、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップＳＢ１４に移行し、変数ｐＮｏｔｅｔｍｐの値で指定されるエリアにデータＩＧａｔｅ、ｉＰｉｔｃｈが共に格納されているか否か判定する。それらのうちの少なくとも一つが格納されていない場合、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップＳＢ１５に移行し、変数ｐＮｏｔｅＬａｓｔの値で指定されるエリアに、データｐＮｅｘｔとして変数ｐＮｏｔｅｔｍｐの値、変数ｐＮｏｔｅｔｍｐの値で指定されるエリアに、データＩＴｉｍｅとして、変数ｐＮｏｔｅＬａｓｔの値で指定されるエリアに格納されたデータＩＴｉｍｅの値にそのエリアのデータＩＧａｔｅの値を加算して得られる値（＝直前に発音される楽音の発音終了ティック）を格納する。一連の処理はその後に終了する。
【００３６】
データＩＴｉｍｅが格納されていないエリアは、空いていると見なすようにしている。それにより、音符列に新たに追加する音符の種類、及びピッチは何れも、「確定」ボタンをクリックしない限り、何度も修正を行えるようにさせている。
【００３７】
次に図４に示す作成支援処理内でステップＳＡ６として実行される再生処理について、図６に示すそのフローチャートを参照して詳細に説明する。
その再生処理では、図２（ｂ）に示すように、ＲＡＭ１０２に再生中データを格納する領域を確保し、発音中の楽音を管理するようにしている。ここでも、括弧を付して表記の「ＯｎＢｕｆ」は音符データと呼ぶことにする。その音符データＯｎＢｕｆは、「ＩＴｉｍｅ」と表記の発音開始ティック、「ＩＯｆｆＴｉｍｅ」と表記の消音時間（発音終了時刻）、「Ｐｉｔｃｈ」と表記のノート番号、及び「ＰＮｏｔｅ」と表記の楽曲データ中で対応する音符データＮｏｔｅのインデックス値、の各データから構成される。
【００３８】
先ず、ステップＳＣ１では、変数初期化を行う。次のステップＳＣ２では、変数ｐＮｏｔｅＰｒｏｇに、再生開始する音符データＮｏｔｅのインデックス値を代入する。その後は、ステップＳＣ３で変数ＩＢａｓｅＴｉｍｅに現在時刻（を示す値）を代入してからステップＳＣ４に移行する。
【００３９】
ステップＳＣ４では、変数ｐＮｏｔｅＰｒｏｇの値で指定される音符データＮｏｔｅ［「ｐＮｏｔｅＰｒｏｇ］が存在するか、或いは発音中の楽音が存在するか否か判定する。再生の対象となる音符データＮｏｔｅが存在するか、或いは発音中の楽音が存在する場合、判定はＹＥＳとなってステップＳＣ５に移行する。そうでない場合には、判定はＮＯとなり、ここで一連の処理を終了する。
【００４０】
ステップＳＣ５では、変数ＩＮｏｗＴｉｍｅに現在時刻を代入する。その後は、ステップＳＣ６で消音タイミングとなった楽音を消音させるノートオフ処理、ステップＳＣ７で発音開始タイミングとなった楽音を発音させるノートオン処理、ステップＳＣ８で再生の進行を楽譜上で通知するための楽譜表示処理をそれぞれ実行してから上記ステップＳＣ４に戻る。
【００４１】
以降は、上記再生処理内で実行されるサブルーチン処理について詳細に説明する。
図７は、上記ステップＳＣ７として実行されるノートオン処理のフローチャートである。最初に図７を参照して、そのノートオン処理について詳細に説明する。
【００４２】
先ず、ステップＳＤ１では、変数ｐＮｏｔｅＰｒｏｇの値で指定される音符データＮｏｔｅが存在しないか否か判定する。その音符データＮｏｔｅが存在しない場合、変数ｐＮｏｔｅＰｒｏｇの値で指定されるエリアにはデータが存在しない（ＮＵＬＬ）であることから、判定はＹＥＳとなり、ここで一連の処理を終了する。そうでない場合には、判定はＮＯとなってステップＳＤ２に移行する。
【００４３】
ステップＳＤ２では、変数ｐＮｏｔｅＰｒｏｇの値で指定される音符データＮｏｔｅ中のデータＩＴｉｍｅの値が変数ＩＮｏｗＴｉｍｅの値以上か否か判定する。その音符データＮｏｔｅによる楽音の発音を開始すべきタイミングが来ていない場合、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップＳＤ３に移行する。
【００４４】
ステップＳＤ３では、その音符データＮｏｔｅが示す楽音の発音を指示するためのＭＩＤＩデータを生成して、Ｉ／Ｆ１０６から出力させる。その後は、ステップＳＤ４で変数ｉに０を代入してからステップＳＤ５に移行して、変数ｉの値で指定される音符データＯｎＢｕｆが存在しないか否か判定する。再生中データにその音符データＯｎＢｕｆが存在する場合、判定はＮＯとなり、ステップＳＤ６で変数ｉの値をインクリメントしてから再度、ステップＳＤ５で判定を行う。そうでない場合には、判定はＹＥＳとなってステップＳＤ７に移行する。
【００４５】
ステップＳＤ７では、変数ｉの値で指定されるエリアに、変数ｐＮｏｔｅＰｒｏｇの値で指定される音符データＮｏｔｅのデータＩＴｉｍｅをデータＩＴｉｍｅとして、その音符データＮｏｔｅのデータＩＴｉｍｅの値にデータＩＧａｔｅの値を加算した値をデータＩＯｆｆＴｉｍｅとして、その音符データＮｏｔｅのデータＰｉｔｃｈをデータＰｉｔｃｈとして、変数ｐＮｏｔｅＰｒｏｇの値をデータｐＮｏｔｅとして、それぞれ代入する。そのようにして、変数ｉの値で指定される音符データＯｎＢｕｆの各データを格納した後にステップＳＤ８に移行して、変数ｐＮｏｔｅＰｒｏｇに、その値で指定される音符データＮｏｔｅのデータｐＮｅｘｔの値を代入する。一連の処理はその後に終了する。
【００４６】
図８は、図６に示す再生処理内でステップＳＣ６として実行されるノートオフ処理のフローチャートである。最後に図８を参照して、そのノートオフ処理について詳細に説明する。
【００４７】
先ず、ステップＳＥ１では、変数ｉに０を代入する。次のステップＳＥ２では、変数ｉの値で指定される音符データＯｎＢｕｆが存在するか否か判定する。その音符データＯｎＢｕｆが存在する場合、判定はＹＥＳとなってステップＳＥ３に移行する。そうでない場合には、判定はＮＯとなり、ここで一連の処理を終了する。
【００４８】
ステップＳＥ３では、その音符データＯｎＢｕｆのデータＩＯｆｆＴｉｍｅの値が変数ＩＮｏｗＴｉｍｅの値未満か否か判定する。その音符データＯｎＢｕｆで発音を管理する楽音の消音タイミングが来ていない場合、判定はＮＯとなり、ステップＳＥ４で変数ｉをインクリメントしてから再度、ステップＳＥ２の処理を実行する。そうでない場合には、判定はＹＥＳとなってステップＳＥ５に移行し、その音符データＯｎＢｕｆで発音を管理する楽音の消音を指示するＭＩＤＩデータをＩ／Ｆ部１０６から出力させ、更にステップＳＥ６において、その音符データＯｎＢｕｆより大きい変数ｉの値で指定されるそれ以降の音符データＯｎＢｕｆが存在する想定で全て１つずつ前に詰める処理を行った後、ステップＳＥ４に移行する。その前に詰める処理を行うことにより、変数ｉの値で指定される音符データＯｎＢｕｆは消去される。
＜第２の実施の形態＞
上記第１の実施の形態では、図３に示す各リストデータとしては固定のものを利用している。これに対し、第２の実施の形態は、そのリストデータの内容を変更できるようにさせたものである。
【００４９】
第２の実施の形態における作曲支援装置の構成は、基本的に第１の実施の形態におけるそれと同じである。動作も大部分は同じか、或いは基本的に同じである。このことから、第１の実施の形態で付した符号をそのまま用いて、第１の実施の形態から異なる部分についてのみ説明する。
【００５０】
第２の実施の形態では、図３に示す各リストデータのオリジナルをＲＯＭ１０３からＲＡＭ１０２に確保した領域にコピーし、そのコピーしたリストデータに対して変更を加えるようにしている。音符の種類やピッチの選択は、そのように変更が加えられるリストデータを参照して行うようにしている。それにより、リストデータの変更を通して、作曲される楽曲の演奏内容を変化させられるようにすることにより、作曲を行っている実感をより持てるようにさせている。
【００５１】
図１０は、リストデータ変更処理のフローチャートである。
その変更処理は、例えば図４に示す作成支援処理内でステップＳＡ５、或いはＳＡ８の処理から移行して実行され、その実行後はステップＳＡ９に移行するようになっている処理である。その変更処理の実行のために、図９に示す楽曲データ作成画面には、例えばゲートタイム用のリストデータの変更を要求するための「ゲートリストの変更」ボタン、及びピッチ用のリストデータの変更を要求するための「ピッチリストの変更」ボタンが更に配置されている。
【００５２】
先ず、ステップＳＦ１では、「ゲートリストの変更」ボタンがクリックされたか否か判定する。そのボタンをユーザーがクリックしなかった場合、判定はＮＯとなってステップＳＦ１１に移行し、そうでない場合には、判定はＹＥＳとなってステップＳＦ２に移行する。
【００５３】
ステップＳＦ２では、変数ｉに０を代入する。次のステップＳＦ３では、変数ｉの値が定数ｎＧａｔｅより小さいか否か判定する。その値が定数ｎＧａｔｅより小さい場合判定はＹＥＳとなり、ステップＳＦ４で変数ｉｐに、発生させた欄ステップの値を５で割った余りを代入し、ステップＳＦ５で変数ｉの値で指定される候補データＰｌｔＧのデータＩＧａｔｅとして、分解能（４分音符の発音時間）ＩＤｉｖに４を掛けた値を、２を変数ｉｐの値乗にした値で割って得られる値（＝ＩＤｉｖ×４／２ip）を新たに設定し、更にステップＳＦ６で変数ｊに０を代入してからステップＳＦ７に移行する。
【００５４】
ステップＳＦ７では、変数ｊの値が変数ｉの値未満か否か判定する。変数ｊの値が変数ｉの値未満であった場合、判定はＹＥＳとなってステップＳＦ８に移行する。そうでない場合には、判定はＮＯとなり、ステップＳＦ１０で変数ｉの値をインクリメントした後、上記ステップＳＦ３に戻る。
【００５５】
ステップＳＦ８では、変数ｉ、ｊの各値でそれぞれ指定される候補データＲｌｔＧのデータＩＧａｔｅが一致しないか否か判定する。それらのデータＩＧａｔｅが一致していた場合、判定はＮＯとなって上記ステップＳＦ４に戻り、同じデータＩＧａｔｅを持つ候補データＲｌｔＧは不要として、データＩＧａｔｅの再設定を行う。そうでない場合には、判定はＹＥＳとなり、ステップＳＦ９で変数ｊの値をインクリメントした後、上記ステップＳＦ７に戻る。
【００５６】
このようにして、ゲートタイム用リストデータの変更は、同じデータＩＧａｔｅを持つ候補データＲｌｔＧが生じないように行われる。それにより、変更によって演奏内容を変化させられる範囲が変化しないようにさせている。
【００５７】
上記ステップＳＦ１の判定がＮＯとなって移行するステップＳＦ１１では、「ピッチリストの変更」ボタンがクリックされたか否か判定する。そのボタンをユーザーがクリックしなかった場合、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップＳＦ１２に移行する。
【００５８】
ステップＳＦ１２〜ＳＦ２０で実行される処理の内容は、上記ステップＳＦ２〜ＳＦ１０のそれと基本的に同じである。このことから、それらについての詳細な説明は省略する。
＜第３の実施の形態＞
上記第１の実施の形態では、音符の種類、及びそのピッチは共に自動的に選択させるようになっている。これに対し、第３の実施の形態は、それらをユーザーが自ら選択することも行えるようにさせたものである。その選択も行えるようにしたことにより、ユーザーは自身の考えをより反映させた作曲がより容易に行えるようになる。
【００５９】
第３の実施の形態における作曲支援装置の構成は、基本的に第１の実施の形態におけるそれと同じである。動作も大部分は同じか、或いは基本的に同じである。このことから、第１の実施の形態で付した符号をそのまま用いて、第１の実施の形態から異なる部分についてのみ説明する。
【００６０】
第３の実施の形態では、図４に示す作曲支援処理内でステップＳＡ４として実行される楽曲データ作成処理が第１の実施の形態から異なっている。このことから、第３の実施の形態における楽曲データ作成処理について、図１１に示すそのフローチャートを参照して詳細に説明する。
【００６１】
先ず、ステップＳＧ１では、変数ｐＮｏｔｅｔｍｐに、音符データＮｏｔｅを格納する空き位置（楽曲データ格納用に確保した領域内のエリア）を示す値を代入、変数ｐＮｏｔｅＬａｓｔに、最後の音符データＮｏｔｅが格納された位置を示す値を代入する。続くステップＳＧ２では、ゲートタイム用ルーレットの開始が指示されたか否か判定する。そのルーレット用の「スタート」ボタンをユーザーがクリックしなかった場合、判定はＮＯとなってステップＳＧ１０に移行する。そうでない場合には、判定はＹＥＳとなってステップＳＧ３に移行する。
【００６２】
ステップＳＧ３では、例えば上に配置したシンボルの位置は変えないか、或いは殆ど変えない状態でルーレットが回転しているような描画を行う。次のステップＳＧ４では、ルーレットの終了が指示されたか否か判定する。そのルーレット用の「ストップ」ボタンをユーザーがクリックしていない場合、判定はＮＯとなってステップＳＧ７に移行する。そうでない場合には、判定はＹＥＳとなってステップＳＧ５に移行する。
【００６３】
ステップＳＧ５では、乱数を発生させ、その乱数の値を定数ｎＧａｔｅで割って得られる余りを変数ｉｄｘに代入する。次に移行するステップＳＧ６では、変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅのデータＩＧａｔｅとして、候補データＲｌｔＧのなかでデータｉＩＤとして変数ｉｄｘの値を格納した候補ＲｌｔＧが持つデータＩＧａｔｅを設定する。その後、ステップＳＧ１０に移行する。
【００６４】
一方、ステップＳＧ７では、リストの直接指定がされたか否か判定する。例えばルーレット上のシンボルをクリックしなかったような場合、判定はＮＯとなって上記ステップＳＧ３に戻る。そうでない場合には、判定はＹＥＳとなり、ステップＳＧ８で変数ｉｄｘにシンボルに割り当てられたルーレット番号（ｉｎｄｅｘ）を代入し、ステップＳＧ９で変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅのデータＩＧａｔｅとして、候補データＲｌｔＧのなかでデータｉＩＤとして変数ｉｄｘの値を格納した候補ＲｌｔＧが持つデータＩＧａｔｅを設定する。その後、ステップＳＧ１０に移行する。
【００６５】
ステップＳＧ１０では、ピッチ用ルーレットの開始が指示されたか否か判定する。そのルーレット用の「スタート」ボタンをユーザーがクリックしなかった場合、判定はＮＯとなってステップＳＧ１８に移行する。そうでない場合には、判定はＹＥＳとなってステップＳＧ１１に移行する。
【００６６】
ステップＳＧ１１〜ＳＧ１７では、上記ステップＳＧ３〜ＳＧ９と同様の処理が行われる。ステップＳＧ１８〜ＳＧ２０では、上記ステップＳＢ１３〜ＳＢ１５と同じ処理が行われる。このことから、ここではそれらの詳細な説明は省略することとする。ステップＳＧ１８には、ステップＳＧ１４、或いはＳＧ１７の処理の実行後に移行する。
＜第４の実施の形態＞
上記第１の実施の形態では、音符列を構成する音符を先頭から順次、決定していくことで作曲を行うようになっている。これに対し、第４の実施の形態は、作成された音符列の所望の位置に音符を任意に挿入できるようにさせたものである。その挿入が任意に行えるようにしたことにより、ユーザーにとっては利便性がより向上し、自身の考えをより反映させた作曲がより容易に行えるようになる。
【００６７】
第４の実施の形態における作曲支援装置の構成は、基本的に第１の実施の形態におけるそれと同じである。動作も大部分は同じか、或いは基本的に同じである。このことから、第１の実施の形態で付した符号をそのまま用いて、第１の実施の形態から異なる部分についてのみ説明する。
【００６８】
第４の実施の形態では、図４に示す作曲支援処理内でステップＳＡ４として実行される楽曲データ作成処理が第１の実施の形態から異なっている。このことから、第４の実施の形態における楽曲データ作成処理について、図１２に示すそのフローチャートを参照して詳細に説明する。
【００６９】
先ず、ステップＳＨ１では、変数ｐＮｏｔｅＰｏｉｎｔに、ユーザーが楽譜上のクリック操作等を行って指定した位置に対応する、楽曲データの音符データＮｏｔｅを指定するインデックス値を代入する。続くステップＳＨ２では、モードの確認を行う。そのモードとして上書きモードが設定されていた場合、その旨が判定されてステップＳＨ３に移行し、変数ｐＮｏｔｅｔｍｐに変数ｐＮｏｔｅＰｏｉｎｔの値を代入してからステップＳＨ７に移行する。そのモードとして挿入モードが設定されていた場合には、その旨が判定されてステップＳＨ４に移行する。なお、上記モードの設定は、特に詳細な説明は省略するが、例えば図９に示す楽曲データ作成画面に新たに配置されたモード設定用のボタンを操作して行うようになっている。
【００７０】
ステップＳＨ４では、変数ｐＮｏｔｅｔｍｐに、音符データＮｏｔｅを格納する空き位置（楽曲データ格納用に確保した領域内のエリア）を示す値を代入、変数ｐＮｏｔｅＬａｓｔに、変数ｐＮｏｔｅＰｏｉｎｔの前の値（データｐＮｅｘｔが変数ｐＮｏｔｅＰｏｉｎｔの値となっている音符データＮｏｔｅを指定するインデックス値）を代入する。次のステップＳＨ５では、変数ｐＮｏｔｅＬａｓｔの値で指定される音符データＮｏｔｅのデータｐＮｅｘｔとして変数ｐＮｏｔｅｔｍｐの値を設定し、変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅのデータｐＮｅｘｔとして変数ｐＮｏｔｅＰｏｉｎｔの値を設定する。その後はステップＳＨ６において、変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅのデータＩＴｉｍｅとして変数ｐＮｏｔｅＰｏｉｎｔの値で指定される音符データＮｏｔｅのデータＩＴｉｍｅを設定した後、ステップＳＨ７に移行する。
【００７１】
ステップＳＨ７〜ＳＨ１２の処理は、図５に示すステップＳＢ２〜ＳＢ１４と基本的には同じである。このことから、それらステップの処理についての詳細な説明は省略し、ステップＳＨ１２の判定がＹＥＳとなって移行するステップＳＨ１３以降の処理について詳細に説明する。
【００７２】
ステップＳＨ１３では、変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅのデータｐＮｅｘｔがＮＵＬＬでないか否か判定する。その音符データＮｏｔｅが最後のものであった場合、データｐＮｅｘｔはＮＵＬＬであることから、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップＳＨ１４に移行する。
【００７３】
ステップＳＨ１４では、変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅのデータｐＮｅｘｔをインデックス値とする音符データＮｏｔｅのデータＩＴｉｍｅとして、変数ｐＮｏｔｅｔｍｐの値で指定される音符データＮｏｔｅにおけるデータＩＴｉｍｅの値とデータＩＧａｔｅの値を加算した値を設定する。次のステップＳＨ１５では、変数ｐＮｏｔｅｔｍｐに、その値で指定される音符データＮｏｔｅのデータｐＮｅｘｔの値を代入する。その代入後はステップＳＨ１３に戻る。
【００７４】
上音符列（楽曲データ）中に新たに音符（音符データＮｏｔｅ）を挿入する場合、モードが上書きモードであっても、その音符のゲートタイムが前の音符のそれと同じであるとは限らない。このことから、本実施の形態では、ステップＳＨ１３〜ＳＨ１５で形成される処理ループをステップＳＨ１３の判定がＮＯとなるまで繰り返し実行することにより、モードの種類に係わらず、音符を挿入した位置より後にある音符の発音開始ティックは全て更新するようにしている。
【００７５】
なお、本実施の形態（第１〜第４の実施の形態）では、音符の種類（ゲートタイム）、及びそのピッチ（楽譜における上下方向の配置）を自動選択の対象としているが、それ以外のもの、例えば音量、発音開始タイミング（楽譜における横方向の配置）などもその対象としても良い。選択候補（選択肢）は、既に作成された他の部分の演奏内容を考慮して動的に変化させるようにしても良い。このようなことを含め、様々な変形を行うことができる。
【００７６】
上述したような作曲支援装置を実現させるようなプログラムは、ＣＤ−ＲＯＭ、ＤＶＤ、或いは着脱自在なフラッシュメモリ等の記録媒体に記録させて配布しても良い。公衆網等の通信ネットワークを介して、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザーはプログラムを取得してデータ処理装置にロードすることにより、その装置に本発明を適用させることができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。
【図面の簡単な説明】
【００７７】
【図１】第１の実施の形態による作曲支援装置の構成を説明する図である。
【図２】第１の実施の形態による作曲支援装置のＲＡＭに格納されるデータの構成を説明する図である。
【図３】第１の実施の形態による作曲支援装置のＲＯＭに格納されたリストデータの構成を説明する図である。
【図４】作曲支援処理のフローチャートである。
【図５】楽曲データ作成処理のフローチャートである。
【図６】再生処理のフローチャートである。
【図７】ノートオン処理のフローチャートである。
【図８】ノートオフ処理のフローチャートである。
【図９】楽曲データ作成画面を説明する図である。
【図１０】リストデータ変更処理のフローチャートである。
【図１１】楽曲データ作成処理のフローチャートである（第３の実施の形態）。
【図１２】楽曲データ作成処理のフローチャートである（第４の実施の形態）。
【符号の説明】
【００７８】
１０１    ＣＰＵ
１０２    ＲＡＭ
１０３    ＲＯＭ
１０４    入力装置
１０５    表示装置
【図１】
2006084855.tif 000003
【図２】
2006084855.tif 000004
【図３】
2006084855.tif 000005
【図４】
2006084855.tif 000006
【図５】
2006084855.tif 000007
【図６】
2006084855.tif 000008
【図７】
2006084855.tif 000009
【図８】
2006084855.tif 000010
【図９】
2006084855.tif 000011
【図１０】
2006084855.tif 000012
【図１１】
2006084855.tif 000013
【図１２】
2006084855.tif 000014