(57)【要約】      （修正有）【課題】動作データの変更通知を、メモリ消費量を発散することなく変更の順番を保持し、高速に行えるようにする。【解決手段】パラメータ変更通知バッファ90が動作データに対応する複数の記録要素91を備え、各記録要素91が、対応する動作データの直前に変更された動作データの識別子を格納する第１ポインタ92と、対応する動作データの次に変更された動作データの識別子を格納する第２ポインタ93とを有する。変更通知バッファ90に対する１番目の変更記録のとき、該当する記録要素の第１ポインタ92に「最初」を格納し、それ以降は、変更された動作データの記録要素の第１ポインタ92に、変更操作の直前に変更された動作データの識別子を格納し、第２ポインタ93に「最後」示す情報を格納し、且つ、今回の変更操作の直前に変更された記録要素の第２ポインタ93に今回変更された動作データの識別子を格納する。【選択図】図１０
2013153261.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ固有の識別子が付与された複数の動作データを記憶する動作データ記憶部と、
前記動作データの変更操作を受け付ける操作部と、
前記動作データのそれぞれに対応する複数の記録要素を備え、動作データ毎の変更有無とその変更順序とを変更記録として記録する変更通知バッファであって、前記記録要素が、それぞれ、対応する動作データの直前に変更された動作データの識別子を格納する第１ポインタと、対応する動作データの次に変更された動作データの識別子を格納する第２ポインタとを有するものと、
前記操作部により動作データが変更されたときに、前記変更通知バッファに変更記録を書き込む変更通知バッファ更新部であって、
今回の変更操作が変更通知バッファに対する１番目の変更記録のときには、今回変更された動作データに対応する記録要素の第１ポインタに、当該動作データが現時点で最初に変更された動作データであることを示す情報を格納し、
前記１番目の変更記録以降は、
今回変更された動作データに対応する記録要素の第１ポインタに、今回の変更操作の直前に変更された動作データの識別子を格納し、
今回変更された動作データに対応する記録要素の第２ポインタに当該動作データが現時点で最後に変更された動作データであることを示す情報を格納し、且つ、
今回の変更操作の直前に変更された動作データに対応する記録要素の第２ポインタに今回変更された動作データの識別子を格納する変更通知バッファ更新部
を備えることを特徴とするデジタルオーディオミキサ。
【請求項２】
前記変更通知バッファ更新部が、今回変更された動作データに対応する記録要素に既に変更記録が書き込まれているとき、
今回変更された動作データの次に変更された動作データに対応する記録要素の第１ポインタに今回変更された動作データの直前に変更された動作データの識別子を格納し、
今回変更された動作データの直前に変更された動作データに対応する記録要素の第２ポインタに今回変更された動作データの次に変更された動作データの識別子を格納し、
当該動作データが現時点で最後に変更された動作データであることを示す情報を格納している第２ポインタに今回変更された動作データの識別子を格納し、
今回変更された動作データに対応する記録要素の第１ポインタに今回の変更操作の直前に変更された動作データの識別子を格納し、且つ、
今回変更された動作データに対応する記録要素の第２ポインタに当該動作データが現時点で最後に変更された動作データであることを示す情報を格納する
ことを特徴とする請求項１に記載のデジタルオーディオミキサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル信号処理によりオーディオ信号を処理するデジタルオーディオミキサにおいて、デジタル信号処理の動作を制御する動作データが変更されたときに、その変更を通知する技術に関する。
【背景技術】
【０００２】
従来、複数の制御装置と複数の音響装置とをイーサネット（登録商標）等のネットワークで接続してなるリモート制御システムにおいて、複数の制御装置から、各音響装置の動作を制御（リモート制御）したり、動作状況の監視（リモート監視）したりできることが知られる。このようなリモート制御システムについては、例えば特許文献１及び特許文献２に記載されている。
【０００３】
かかるリモート制御システムにおいて、制御装置のユーザがパラメータ値（動作データ）を変更したときには、システム内の別の装置へ、そのパラメータ値の変更を通知できるようになっている。変更通知の仕組みには、パラメータ値が変更されたときに即座に通知が行われること（すなわち即時性）、通知先の処理状況等の都合によって、変更通知の取りこぼしが起きないものであること（すなわち非同期性）及び変更通知のために用意すべきメモリ消費量が少ないことが要求される。
【０００４】
上記の要求のうち即時性はイベントフラグ起床により比較的容易に実現できる。非同期性に関しては、変更通知の取りこぼしが起きないように、通知元にて変更内容を保存しておくことにより実現できる。保存すべき変更内容には、どのパラメータが変更されたのか（パラメータ毎の変更有無）、変更の順序がある。
【０００５】
従来技術による変更内容の保存方法の一例として、ＦＩＦＯ（first in first out）バッファを適用する方法が考えられる。この場合は、変更順序が失われることはないが、パラメータ値の変更イベントが大量に発生したときにバッファが溢れてしまい、通知の取りこぼしが発生してしまうという問題がある。
【０００６】
また、従来技術による変更内容の保存方法として、パラメータ毎にダーティフラグを用意する方法が考えられる。しかし、その場合、ダーティフラグ用のメモリによってメモリ使用量が発散する可能性がある。また、パラメータ変更順序が失われてしまうという欠点がある。加えて、変更されたパラメータを検索する処理の速度が遅いという欠点もある。
【０００７】
更に別の、従来技術による変更内容の保存方法として、パラメータ値記憶用メモリと同じ内容のパラメータ値記憶用メモリを用意しておき、メモリ比較によりパラメータ値変更有無が分かるようにする方法が考えられる。しかし、この方法では変更箇所の検索が遅いこと、また、検索順序が分からなくなることといった欠点がある。加えて、１つのパラメータ値を連続して変更した結果、変更前の値に戻った場合に、変更操作があったという事実を見落とす危険性がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−２１８９３７号公報
【特許文献２】特開２００９−２１８９４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
この発明は、上記の点に鑑みてなされたもので、パラメータ値（動作データ）の変更通知において、メモリ消費量が発散することなく変更の順番が保持でき、変更通知に必要な処理を全て高速に行うことができるようにしたデジタルオーディオミキサを提供することを目的とする。
【課題を解決するための手段】
【００１０】
この発明は、それぞれ固有の識別子が付与された複数の動作データを記憶する動作データ記憶部と、前記動作データの変更操作を受け付ける操作部と、前記動作データのそれぞれに対応する複数の記録要素を備え、動作データ毎の変更有無とその変更順序とを変更記録として記録する変更通知バッファであって、前記記録要素が、それぞれ、対応する動作データの直前に変更された動作データの識別子を格納する第１ポインタと、対応する動作データの次に変更された動作データの識別子を格納する第２ポインタとを有するものと、前記操作部により動作データが変更されたときに、前記変更通知バッファに変更記録を書き込む変更通知バッファ更新部であって、今回の変更操作が変更通知バッファに対する１番目の変更記録のときには、今回変更された動作データに対応する記録要素の第１ポインタに、当該動作データが現時点で最初に変更された動作データであることを示す情報を格納し、前記１番目の変更記録以降は、今回変更された動作データに対応する記録要素の第１ポインタに、今回の変更操作の直前に変更された動作データの識別子を格納し、今回変更された動作データに対応する記録要素の第２ポインタに当該動作データが現時点で最後に変更された動作データであることを示す情報を格納し、且つ、今回の変更操作の直前に変更された動作データに対応する記録要素の第２ポインタに今回変更された動作データの識別子を格納する変更通知バッファ更新部を備えることを特徴とするデジタルオーディオミキサである。
【発明の効果】
【００１１】
本発明によれば、パラメータ変更通知バッファが動作データに対応する複数の記録要素を備え、各記録要素が、対応する動作データの直前に変更された動作データの識別子を格納する第１ポインタと、対応する動作データの次に変更された動作データの識別子を格納する第２ポインタとを有する構成により、動作データ毎の変更有無と、その変更順を示す双方向リストとのハイブリットデータ構造を実現し、メモリ消費量が発散することなく変更の順番が保持できるようになる。また、変更通知に必要な処理を全て高速に行うことができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施例であるデジタルオーディオミキサのハードウェア構成を説明するブロック図。
【図２】図１のミキサが実行するミキシングアルゴリズムの概要を説明するブロック図。
【図３】入力チャンネルの信号処理構成例を示すブロック図。
【図４】出力チャンネルの信号処理構成例を示すブロック図。
【図５】（ａ）はカレントメモリのメモリ構成を示すブロック図、（ｂ）は複数のパラメータ値のデータ構成を示す階層構造を説明するツリー図、（ｃ）は階層構造の具体例を説明するツリー図。
【図６】スナップショットメモリの構成を示すブロック図。
【図７】スナップショットデータリコール時のコピー/互換性確保処理を示すフローチャート。
【図８】互換性確保動作の具体例を説明するブロック図。
【図９】パラメータのデータサイズ変更に関する互換性確保処理を示すフローチャート。
【図１０】パラメータ変更通知バッファの構成を示すブロック図。
【図１１】パラメータ値変更時のパラメータ変更通知バッファ書き込み処理のフローチャート。
【図１２】（ａ）〜（ｄ）は、パラメータ変更通知バッファ書き込み動作の一例であって、リスト最後尾へ追加する動作を説明するブロック図。
【図１３】パラメータ変更通知バッファ書き込み動作の別の例であって、リストのつなぎ直し動作を説明するブロック図。
【図１４】本発明のデジタルオーディオミキサを含むミキシングシステムの構成を示すブロック図。
【発明を実施するための形態】
【００１３】
以下に、本発明の一実施形態として、本発明に係る編集装置を適用したデジタルオーディオミキサについて、添付図面を参照して、説明する。
【００１４】
図１において、デジタルオーディオミキサ１は、ＣＰＵ１０（Central Processing Unit、中央処理装置）、ＲＯＭ（Read Only Memory、リードオンリーメモリ）１１、ＲＡＭ１２（Random Access Memory、ランダムアクセスメモリ）、表示インターフェース１３（表示Ｉ／Ｆ）、操作検出インターフェース１４（検出Ｉ／Ｆ）、通信インターフェース１５（通信Ｉ／Ｆ）、信号処理部１６（ＤＳＰ（Digital Signal Processing）部）、効果処理部１７（ＥＦＸ）、アナログデジタル変換部１８（ＡＤ変換部）、デジタルアナログ変換部１９（ＤＡ変換部）、デジタル・デジタル変換部２０（ＤＤ変換部）を備える。
【００１５】
ＣＰＵ１０、ＲＯＭ１１、ＲＡＭ１２、表示Ｉ／Ｆ１３、検出Ｉ／Ｆ１４、通信Ｉ／Ｆ１５、ＤＳＰ部１６及びＥＦＸ１７は、通信バス２１を介して接続されており、ＣＰＵ１０と各部１１〜１７との間で各種制御信号を通信できる。また、ＤＳＰ部１６、ＥＦＸ１７、ＡＤ変換部１８、ＤＡ変換部１９及びＤＤ変換部２０は音声バス２２を介して互いに接続さており、各部１６〜２０の間でデジタルオーディオ信号を通信できる。
【００１６】
ＣＰＵ１０は、ＲＯＭ１１又はＲＡＭ１２に記憶されたプログラムを実行して、デジタルミキサ１の全体動作を制御する。ＲＯＭ１１は、ＣＰＵ１０が実行する各種のプログラムや各種のデータなどを格納した不揮発性メモリである。ＲＡＭ１２は、ＣＰＵ１０が実行するプログラムのロード領域やワーク領域に使用する揮発性メモリである。ＲＯＭ１１又はＲＡＭ１２には、ミキサ１の音響信号処理の動作を制御するための複数のパラメータの現在のパラメータ値（動作データ）を記憶するカレントメモリが設けられている。
【００１７】
表示器２は、ＣＰＵ１０から通信バス２１を介して与えられた表示制御信号に基づく各種情報を、各種画像や文字列等により表示する。操作部３は、操作パネル上に配置された操作子群である。操作部３は、検出Ｉ／Ｆ１４を介して通信バス２１に接続されている。ユーザによる操作部３の操作が検出Ｉ／Ｆ１４により検出され、検出信号がバス２１を介してＣＰＵ１０に供給される。ユーザは、操作部３を操作して当該操作に該当するパラメータの値を調整できる。ＣＵＰ１０は、操作部３の操作に応じて、カレントメモリのパラメータ値を更新し、その更新結果をＤＳＰ部１６、ＥＦＸ１７の信号処理動作、或いは、表示器２の表示に反映する。
【００１８】
また、通信入出力部４（通信Ｉ／Ｏ）は、通信Ｉ／Ｆ１５を介して通信バス２１に接続されている。通信Ｉ／Ｏ４は、例えばＵＳＢ（Universal Serial Bus）端子のような、他の周辺機器と接続するための汎用インターフェースである。ユーザは、通信Ｉ／Ｏ４を介して周辺機器（例えば、ミキサ１をリモート制御するコンピュータ等）をミキサ１に接続できる。
【００１９】
ＡＤ変換部１８は、アナログオーディオ信号を外部から入力する複数の入力ポートを含み、各入力ポートから入力されたアナログオーディオ信号をデジタルオーディオ信号に変換して音声バス２２に出力する。ＤＡ変換部１９は、アナログオーディオ信号を外部機器へ出力する複数の出力ポートを含み、音声バス２２から供給されたデジタルオーディオ信号をアナログオーディオ信号に変換して出力ポートから出力する。ＤＤ変換部２０は、外部機器とミキサ１の間でデジタルオーディオ信号を入出力する複数の入出力ポートを有し、デジタル変換（フォーマット変換）したデジタルオーディオ信号を、外部機器とミキサ１の間で入出力する。
【００２０】
ＤＳＰ部１６及びＥＦＸ１７は、それぞれ１つのＤＳＰ（Digital Signal Processor）で構成してもよいし、バスで相互接続された複数のＤＳＰで構成し、複数のＤＳＰで信号処理を分散処理するようにしてもよい。ＤＳＰ部１６は、ＣＰＵ１０の指示に基づいて各種のマイクロプログラムを実行することにより、音声バス２２から供給された１又は複数チャンネルのオーディオ信号に対するデジタル信号処理を行い、処理後の１又は複数チャンネルのオーディオ信号を音声バス２２へ出力する。ＤＳＰ部１６が実行するデジタル信号処理は、オーディオ信号のルーティングや音響信号処理である。音響信号処理は、音特性（音量レベルや音質）の調整や複数のオーディオ信号を混合するミキシング処理等である。また、ＥＦＸ１７は、ＣＰＵ１０の指示に基づいて各種のマイクロプログラムを実行することにより、音声バス２２から供給されたオーディオ信号に対して、例えばディレイやリバーブ等の効果処理を行い、処理後のオーディオ信号を音声バス２２へ出力する。
【００２１】
図２は、主にＤＳＰ部１６及びＥＦＸ１７により実行される音響信号処理の構成（ミキシングアルゴリズム）の概要を説明するブロック図である。入力パッチ２３は、ユーザによる入力パッチ設定に基づいて、ＡＤ変換部１８及びＤＤ変換部１９に複数ずつ設けられている入力ポートを、それぞれ、供給先となるＮ個（Ｎは任意の整数）の入力ｃｈ２４に接続する。入力パッチ２３は、ＣＰＵ１０によるＡＤ変換部１８、ＤＤ変換部１９及びＤＳＰ部１６の制御によって実現される。なお、本明細書において「パッチ」とは、オーディオ信号の供給元に供給先を割り当てて接続することである。
【００２２】
Ｎ個の入力ｃｈ２４は、それぞれ、入力されたオーディオ信号に対して、カレントメモリのパラメータ値群に基づく各種音響信号処理を行い、処理後のオーディオ信号を１又は複数のＭＩＸバス２５へ出力する。また、入力ｃｈ２４毎にＣＵＥオン・オフを設定して、ＣＵＥオンされたｃｈの出力信号をＣＵＥバス２６に供給することもできる。図３は、１つの入力ｃｈ２４の詳細な構成例を詳細に示す。１つの入力ｃｈ２４には、信号処理要素として、アッテネータ（Ａｔｔ）３０、ヘッドアンプ（Ｈ／Ａ）３１、ハイパスフィルタ（ＨＰＦ）３２、パラメトリックイコライザ（ＰＥＱ）３３、ゲート（Ｇａｔｅ）３４、コンプレッサ（Ｃｏｍｐ）３５、ディレイ（Ｄｅｌａｙ）３６、音量レベル（Ｌｅｖｅｌ）３７、パン（Ｐａｎ）３８が設けられている。各信号処理要素３０〜３８は、それぞれ１又は複数種類のパラメータを具備しており、それぞれ対応するパラメータ値に基づく音響信号処理を行う。
【００２３】
Ｍ個（Ｍは任意の整数）のＭＩＸバス２５は、それぞれ、１又は複数の入力ｃｈ２４から供給された１又は複数ｃｈのオーディオ信号をミキシングして、ミキシング後のオーディオ信号を、対応する出力ｃｈ２７へ出力する。また、ＣＵＥバス２６の出力信号は、Ｃｕｅ／モニタ信号制御部２８によるレベル制御等を経て、Ｃｕｅ／モニタ信号として出力パッチ２９に出力される。
【００２４】
Ｍ個の出力ｃｈ２７は、それぞれ、対応するＭＩＸバス２５から供給されたオーディオ信号に対して、カレントメモリのパラメータ値群に基づく各種信号処理を行い、出力パッチ２９に出力する。図４は、１つの出力ｃｈ２７の構成例を詳細に示す。１つの出力ｃｈ２７には、信号処理要素として、イコライザ４０、コンプレッサ４１、音量レベル４２、バランス（Ｂａｌ）４３、ディレイ４４、アッテネータ４５が設けられている。各信号処理要素４０〜４５は、それぞれ１又は複数種類のパラメータを具備しており、それぞれ対応するパラメータ値に基づく音響信号処理を行う。各出力ｃｈ２７にて音響信号処理されたオーディオ信号は出力パッチ２９に出力される。
【００２５】
出力パッチ２９は、各出力ｃｈ２７及びＣｕｅ／モニタ信号制御部２８の出力を、それぞれ、ＤＡ変換部１９及びＤＤ変換部２０に複数設けられた出力ポートのいずれか１つへ接続する。入力パッチ２３の動作は、ＣＰＵ１０によるＡＤ変換部１８、ＤＤ変換部１９及びＤＳＰ部１６の制御によって実現される。
【００２６】
図５（ａ）は、ＲＯＭ１１又はＲＡＭ１２に設けられたカレントメモリのデータ構成を説明する図である。カレントメモリ５０は、複数のパラメータ値５１（動作データ群）と、その複数のパラメータ値５１のデータ構成を管理する管理情報５２とを１つのセットにして記憶している。複数のパラメータ値５１は、図２に示す音響信号処理の動作を制御するために用いる全てのパラメータの実体的な値である。
【００２７】
管理情報５２は、複数のパラメータ値５１のデータ構成を階層構造で管理するためのデータであり、該階層構造を構成する複数のノード（コレクション）のそれぞれに対応する複数のコレクション毎のコレクション管理情報５３と、パラメータ毎のパラメータ管理情報５６を含む。
【００２８】
図５（ｂ）は、複数のパラメータ値５１のデータ構成を示す階層構造を説明するツリー図である。図５（ｂ）において、最下層の「パラメータ１」６４〜「パラメータ４」６７はそれぞれ１つのパラメータ値を格納するノードである。「コレクション１」６０〜「コレクション４」６３は、それぞれの配下に存在する１又は複数のパラメータを１つのグループとして管理するコレクションを示す。コレクション自体が階層化されているので、複数のパラメータ値５１のデータ構成は、コレクション単位で階層化された１又は複数のパラメータのグループに分けて管理されることになる。例えば、最上位の「コレクション１」６０は、全てのパラメータ（「パラメータ１」〜「パラメータ４」）を管理対象とし、その下位の「コレクション２」６１は「コレクション１」６０配下のパラメータ群の一部である「パラメータ１」と「パラメータ２」を管理対象とする。
【００２９】
１つのノードが示すコレクション又はパラメータは、それぞれ、管理対象となる前記１又は複数のパラメータのグループを、１又は複数の配列要素として持つ配列のデータ構造を持つ。配列要素数は後述する配列サイズというデータによって示される。例えば、Ｎ個の入力ｃｈ２４を１つのコレクションとして想定した場合、入力ｃｈ２４のコレクションは、前記図３の各信号処理要素３０〜３８が持つ１又は複数種類のパラメータのグループを管理対象としており、Ｎ個の入力ｃｈ２４のそれぞれがその管理対象の１又は複数種類のパラメータのグループを配列要素として持つので、その配列サイズはＮ個の入力ｃｈ２４と同数のＮ個となる。最上位コレクションから所望のコレクション又はパラメータにたどり着くまでに経るコレクション毎の配列サイズを計算することにより、所望のコレクション又はパラメータの総数を求めることができる。例えば、図５（ｂ）において、「コレクション１」６０の配列サイズを「３」、「コレクション３」６２の配列サイズを「４」、「パラメータ４」６７の配列サイズを「５」とすると、「コレクション１」６１の総数は３個、「コレクション３」は３個の「コレクション１」に４個ずつなので総数が１２個、そして、「パラメータ４」は１２個の「コレクション３」について５つずつなので総数が６０個となる。
【００３０】
管理情報５２に基づく階層構造は、図２に示す音響信号処理の構成に従って編成される。すなわち、コレクションは、それぞれ、音響信号処理を構成する構成要素に対応付けて設定される。例えば、パラメトリックイコライザ（ＰＥＱ）とダイナミクスとを信号処理要素として備える入力ｃｈにおいて、ＰＥＱがオンオフパラメータと周波数帯域（バンド）毎のゲインとＱパラメータ（Ｑ）とをパラメータとして持ち、また、ダイナミクスがオンオフパラメータをパラメータとして持つ構成を想定すると、その入力ｃｈのデータ構成は、図５（ｃ）に示すような階層構造によって表すことができる。すなわち、入力ｃｈのコレクションが最上位に配置され、その下位に、ＰＥＱのコレクションとダイナミクスのコレクションとが配置される。ＰＥＱの下位には、バンドのコレクションとオンオフパラメータとが配置され、バンドの下位にゲインパラメータとＱパラメータが配置される。また、ダイナミクスの下位にオンオフパラメータが配置される。
【００３１】
図２に示す音響信号処理の構成要素は、大別すると、入力ｃｈ２４のコレクションと、その下位に配置されるＡｔｔ３０・・・Ｐａｎ３８の信号処理要素毎のコレクションと、各信号処理要素のそれぞれが持つパラメータとからなる階層構造と、出力ｃｈ２７のコレクションと、その下位に配置されるＥＱ４０・・・Ａｔｔ４５の信号処理要素毎のコレクションと、各信号処理要素の下位に配置されるパラメータ群とからなる階層構造によって、複数のパラメータ値５１全体のデータ構成が表現される。入力ｃｈ２４のコレクションの配列サイズはＮ、出力ｃｈ２７のコレクションの配列サイズはＭである。信号処理要素毎のコレクションは、それぞれ、下位に小分類のコレクションを持ちうる。その場合、図５（ａ）に示す管理情報５２には、上述の構成要素毎のコレクション管理情報５３と、各信号処理要素の下位に配置されるパラメータ群毎のパラメータ管理情報５６とが含まれることになる。
【００３２】
上述した階層構造に基づいて所望の１つのパラメータ値５１を特定するには、そのパラメータ値５１にたどり着くまでに経由する全てのコレクションと、該経由するコレクション毎の配列要素を指定すればよい。配列要素の指定は、コレクションの各配列要素にインデックス番号を与えておき、その配列要素のインデックス番号を指定すればよい。そして、特定したパラメータ値５１を格納したメモリ内のアドレスを計算する方法としては、例えば、コレクション毎にその１つ上位のコレクションの先頭アドレスから当該コレクションの先頭アドレスまでのオフセット（相対アドレス）を与えておき、その相対アドレスと配列要素のインデックス番号とを組み合わせて計算する方法を適用できる。なお、アドレス計算の方法は、従来から知られるどのような方法を適用してもよい。
【００３３】
図５（ａ）に戻ると、上述した階層構造を得るために、各コレクション管理情報５３には、それぞれ対応するコレクションの構成を示す構成情報５４と、そのコレクションの構成に固有のＩＤ番号であるコレクションＩＤ５５とが含まれる。構成情報５４は、対応するコレクションの子ノードを特定するデータ（子ノードＩＤ）と、そのコレクションの配列要素数を示す配列サイズとを含む。構成情報５４に含まれる子ノードＩＤに基づきコレクション相互の親子関係を参照して、階層構造全体の形を特定することができる。子ノードとしてコレクションを示すノードを持つコレクション（例えば「コレクション１」）を示すコレクション管理情報５３は、子ノードＩＤとして、該当するコレクションのコレクションＩＤ５５を持つ。また、最下層ノード（パラメータを示すノード６４〜６７）の１つ上のコレクション（例えば「コレクション４」）のコレクション管理情報５３は、子ノードＩＤとしてパラメータを特定する情報（パラメータＩＤ）を持つ。なお、コレクション管理情報５３は、１つのノード（コレクション又はパラメータ）に対して１つだけ存在するのであり、ノードの配列要素数毎に存在するのではない。
【００３４】
構成情報５４に含まれる子ノードＩＤと配列サイズにより特定される各コレクションの構成は、そのコレクション配下の階層構造（データ構成）と１対１で対応する。例えば、階層構造における任意のコレクション又はパラメータの構成が変更された場合、そのコレクション又はパラメータの構成に伴い、当該変更されたコレクション又はパラメータの上位に存在する全てのコレクションにおいて構成情報５４中の子ノードＩＤ（子ノードのコレクションＩＤ５５）が変更されることになる。このような性質があるため、コレクションＩＤ５５によりコレクションの構成をユニークに識別することにより、そのコレクション配下の階層構造（データ構成）をユニークに識別できる。
【００３５】
また、パラメータ毎のパラメータ管理情報５６には、子ノードが存在しないことを示すデータと、パラメータ種類を識別するパラメータＩＤと、パラメータ値のデータサイズとパラメータ型データとが含まれる。データサイズは、パラメータ値を表すために用いるデータサイズである。パラメータ型データは、当該パラメータの値の表現方式を、符号付き整数型、符号無し整数型、文字列型、浮動小数点型の４種類のいずれかのパラメータ型で特定するデータである。全てのパラメータは、その値の表現方式に応じて、前記種類のいずれかのパラメータ型に分類される。符号付き整数型は、正負の符号（＋／−）付きの整数値によりパラメータ値を表すパラメータ型である。符号無し整数型は、正負の符号無しの整数値によりパラメータ値を表すパラメータ型である。浮動小数点型は、小数を含む数値によりパラメータ値を表すパラメータ型である。また、文字列型は、例えばアルファベット文字など文字列によりパラメータ値を表すパラメータ型である。
【００３６】
次に、スナップショットデータについて説明する。ミキサ１は、ミキサ１の動作状態、つまりカレントメモリ５０の複数のパラメータ値５１を、スナップショットデータとしてメモリに保存（ストア）しておき、保存されたスナップショットデータをカレントメモリに読み出して、該読み出したスナップショットデータに基づくミキサ１の動作状態を一括して再現するスナップショット機能を備える。なお、かかるスナップショット機能は従来から知られるものである。
【００３７】
図６は、スナップショットデータを保存するスナップショットメモリのデータ構成例を示す。スナップショットメモリは、適宜のメモリ（図１のＲＯＭ１１又はＲＡＭ１２、図示外の外部記憶装置など）に設けられている。スナップショットメモリには、複数個のスナップショットデータ７０（「スナップショット１」、「スナップショット２」・・・）を保存できる。複数のスナップショットデータ７０には、通し番号が付与される。
【００３８】
１つのスナップショットデータ７０は、複数のパラメータ値７１と、その管理情報７２とからなる。複数のパラメータ値７１と管理情報７２とは、それぞれ、前述図５（ａ）に示す複数のパラメータ値５１と管理情報５２とに対応している。すなわち、管理情報７２には、複数のコレクション管理情報７３と複数のパラメータ管理情報７６とが含まれており、各コレクション管理情報７３には当該コレクションの構成を示す構成情報７４と、そのコレクションの構成に固有のコレクションＩＤ７５とが含まれており、各パラメータ管理情報７６には子ノードが存在しないことを示すデータと、パラメータ値のデータサイズとパラメータ型データとが含まれる。そして、管理情報７２に基づいて、スナップショットデータ７０に含まれる複数のパラメータ値７１のデータ構成を、図５（ｂ）に示す階層構造と同様な階層構造によりコレクション単位のグループに分けて管理でき、各コレクションの構成は対応するコレクションＩＤ７５によりユニークに識別できる。
【００３９】
ユーザのストア指示があったとき、ＣＰＵ１０は、カレントメモリ５０に記憶されている複数のパラメータ値７１と、管理情報７２とを新たなスナップショットデータ７０としてスナップショットデータ用メモリに書き込む。これにより、スナップショットデータ７０として、ストア指示されたときのカレントメモリ５０と同じデータ構成を持つ複数のパラメータ値７１と、そのデータ構成を階層構造で管理する管理情報７２とを保存できる。
【００４０】
ユーザのリコール指示があったとき、ＣＰＵ１０は、リコール指示されたスナップショットデータ７０の複数のパラメータ値７１を、カレントメモリ５０の複数のパラメータ値５１に上書きコピーする。ここで、コピー元のスナップショットデータ７０とコピー先のカレントメモリ５０との間でデータ構成が一致している場合には、スナップショットデータ７０の複数のパラメータ値７１を、カレントメモリ５０に一括して上書きコピーできる。しかし、スナップショットデータ７０とコピー先のカレントメモリ５０との間でデータ構成が違っている場合には、スナップショットデータ７０とカレントメモリ５０のデータ構成の互換性を確保する必要がある。
【００４１】
カレントメモリ５０及びスナップショットデータ７０のデータ構成は、上述の通り、管理情報５２，７２に基づく階層構造によりコレクション単位で管理されている。すなわち、カレントメモリ５０とスナップショットデータ７０との間でデータ構成に変更があった場合には、その変更内容に応じて、カレントメモリ５０とスナップショットデータ７０との間でコレクションの構成が変更される。そのコレクションの構成の変更は、具体的には、カレントメモリ５０又はスナップショットデータ７０のいずれか一方におけるコレクションの増加又は減少（コレクションの増減という）、コレクションの配列サイズの変更、カレントメモリ５０又はスナップショットデータ７０のいずれか一方におけるパラメータの増加又は減少（パラメータの増減）、パラメータの配列サイズの変更、パラメータのデータサイズの変更又はパラメータのパラメータ型の変更として、管理情報５２，７２に表れる。
【００４２】
この実施例のミキサ１においては、スナップショットデータ７０をリコールするとき、スナップショットデータ７０の管理情報７４に基づき、コレクション単位で、コレクションの構成の異同を判断して互換性の問題を自動的に解決しつつ、複数のパラメータ値７１をカレントメモリ５０に上書きコピーするようになっている。
【００４３】
図７はスナップショットデータ７０からカレントメモリ５０に複数のパラメータ値７１を上書きコピーする処理のフローチャートである。図７の処理は、ユーザによりスナップショットデータ７０のリコール指示があったときに、ＣＰＵ１０が実行する。ＣＰＵ１０は、ユーザのリコール指示に応じて、該リコール指示された１つのスナップショットデータ７０の管理情報７２として記憶されている複数のコレクション管理情報７３のうち１つを処理対象に設定し、該処理対象の１つのコレクションについて図７の処理を実行する。処理対象のコレクションは、階層構造の最上位のコレクションから順番に指定される。
【００４４】
ステップＳ１において、ＣＰＵ１０は、処理対象のコレクションのコレクションＩＤ７５に基づいて、スナップショットデータ７０とカレントメモリ５０との間で処理対象のコレクションの構成が一致するか否かを判断する。
【００４５】
処理対象のコレクションのコレクションＩＤ７５と同じコレクションＩＤ５５がカレントメモリ５０の管理情報５２に含まれていれば、スナップショットデータ７０とカレントメモリ５０との間で処理対象のコレクションの構成が一致するものと判断できる。コレクションの構成が一致した場合（ステップＳ１のＹＥＳ）、ＣＰＵ１０は、ステップＳ２において、処理対象のコレクション配下の１又は複数のパラメータ値７１を、カレントメモリ５０に上書きコピーして処理を終了する。
【００４６】
スナップショットデータ７０とカレントメモリ５０との間で処理対象のコレクションの構成が不一致の場合（ステップＳ１のＮＯ）、ＣＰＵ１０は、ステップＳ３において、処理対象のコレクション配下の１又は複数のパラメータのなかに、スナップショットデータ７０にのみ存在するパラメータがあるかどうかを調べる。これにより、コピー先のカレントメモリ５０に、処理対象のコレクションと同じ子ノードを持つが、配列サイズのみが異なるコレクションが存在する否かを判断できる。この判断は、処理対象のコレクションの構成情報７４に含まれる子ノードＩＤと一致する子ノードＩＤを持つコレクションがカレントメモリ５０に存在するか否かにより行うことができる。よって、当該ステップＳ３の判断処理も単純なＩＤ比較により行うことができる。
【００４７】
スナップショットデータ７０にのみ存在するパラメータがない場合（ステップＳ３のＮＯ）、言い換えればスナップショットデータ７０とカレントメモリ５０との間での処理対象のコレクションの構成の相違点が配列サイズの変更に関するものである場合、ＣＰＵ１０は、ステップＳ４において、処理対象のコレクションとカレントメモリ５０内の対応するコレクションの構成情報５４，７４の配列サイズを比較して、双方のうち配列サイズの小さい方に配列サイズを合わせて、処理対象コレクションの配下の１又は複数のパラメータ値をカレントメモリ５０に上書きコピーする（つまり配列要素の一部だけを上書きコピーする）。この処理により、配列サイズの変更に関する互換性を確保できる。
【００４８】
一方、スナップショットデータ７０にのみ存在するパラメータがある場合（ステップＳ３のＹＥＳ）、言い換えればスナップショットデータ７０とカレントメモリ５０に同種のコレクションが存在する場合には、スナップショットデータ７０とカレントメモリ５０との間での処理対象のコレクションの構成の相違点がコレクションの増減に関するものであると判断できる。その場合、ＣＰＵ１０は、処理対象のコレクションを単位とするコピーを行わずに（ステップＳ５）、該処理対象コレクションに関する処理を終了する。
【００４９】
１つのコレクションについて処理が終了したら、次の処理対象のコレクションを設定する。このとき、前記ステップＳ５でコピーせずに処理を終了した場合には、当該コピーしなかったコレクションの子ノード（下位コレクション）を処理対象に設定して、図７の処理を再帰的に繰り返す。また、前記ステップＳ２又はＳ５によりパラメータをコピーした場合には、当該コレクションより下位にある全てのコレクションについて処理をスキップしてよい。
【００５０】
図８（ａ）〜（ｃ）は、スナップショットデータ７０をカレントメモリ５０にリコールする動作の具体例を説明するブロック図である。図７において、各ブロックはコレクションを表しており、「Ａ」は最上位のコレクション、「ＡＡ」及び「ＡＢ」は「Ａ」の下位コレクション、「ＡＡＡ」、「ＡＡＢ」及び「ＡＡＣ」は「ＡＡ」の下位コレクション、「ＡＢＡ」及び「ＡＢＢ」は「ＡＢ」の下位コレクションとする。
【００５１】
図８の例では、コレクション「ＡＡＢ」は、スナップショットデータ７０に含まれているが、カレントメモリ５０には含まれていない。つまり、カレントメモリ５０は、スナップショットデータ７０と比較すると、階層構造のコレクション「ＡＡＢ」が減少している点で異なっている。この場合は、（ｂ）に示す通り、「ＡＡＢ」の上位の「ＡＡ」及び「Ａ」に関しては、スナップショットデータ７０をカレントメモリ５０の間で、コレクションの構成が変わっているので、互換性の確保が必要である。一方、（ｃ）に示す通り、「ＡＢ」、「ＡＢＡ」、「ＡＢＢ」、「ＡＡＡ」及び「ＡＡＣ」は、スナップショットデータ７０とカレントメモリ５０との間で構成が変わっていないので、互換性確保処理をせずに上書きコピー処理できる。
【００５２】
かかる図８に示すコレクション毎の互換性確保／コピーの動作を、図７の処理に従って説明すると、次の通りである。まず、最上位の「Ａ」の場合、ステップＳ１、Ｓ３をＮＯに分岐して、ステップＳ４にてコピーを行わずに処理を終了する。続いて、「ＡＡ」の場合、ステップＳ１、Ｓ２をＮＯに分岐して、ステップＳ４にてコピーを行わずに処理を終了する。そして「ＡＡＢ」の場合、ステップＳ１、Ｓ３をＮＯに分岐して、ステップＳ４にてコピーを行わずに処理を終了する。すなわち、カレントメモリ５０にない「ＡＡＢ」配下の１又は複数のパラメータ値はコピーしない。
【００５３】
一方、カレントメモリ５０と同じ構成の「ＡＡＡ」、「ＡＡＣ」については、それぞれ、ステップＳ１をＹＥＳに分岐して、ステップＳ２にて、配下の１又は複数のパラメータ値をカレントメモリ５０に上書きコピーできる。また、コレクション「ＡＢ」は、下位コレクションの構成がスナップショットデータ７０とカレントメモリ５０とで一致しているので、ステップＳ１をＹＥＳに分岐して、ステップＳ２にて、配下の１又は複数のパラメータ値をカレントメモリ５０に一括して上書きコピーできる。「ＡＢ」の下位にある「ＡＢＡ」と「ＡＢＢ」については、その配下の１又は複数のパラメータ値を既にコピーしてしまっているので処理をスキップできる。よって、「ＡＢ」のコピーだけで、この枝に関する処理を終了できる。
【００５４】
上述の説明をまとめると、階層構造のコレクション単位で、コレクションＩＤに基づいてデータ構成を比較し、（１）スナップショットデータ７０とカレントメモリ５０の間でデータ構成の一致するコレクションに対しては、コレクション配下の１又は複数のパラメータ値をカレントメモリ５０に一括して上書きコピーして処理を終了する（ステップＳ２）。（２）スナップショットデータ７０とカレントメモリ５０の間でデータ構成の不一致のコレクションはコピーせず、そのコレクションの下位のコレクションを対象にデータ構成を比較するという処理を再帰コールする（ステップＳ５）。更に、（３）スナップショットデータ７０とカレントメモリ５０の間でデータ構成が不一致であるが、同種のコレクションが存在する（配列サイズが変更されている）場合には、配列サイズが小さい方に合わせて、コレクション配下の１又は複数のパラメータ値をカレントメモリ５０に一括して上書きコピーして処理を終了する（ステップＳ４）。
【００５５】
従って、コレクション単位でのデータ構成の比較は、管理情報５２，７２同士の単純なＩＤ比較で済むので十分の高速である。コレクションの構成が一致してれば一括コピーできるので、コレクション単位でデータ構成が一致しているときの処理は十分に高速化される。また、配列サイズの変更があった場合の処理は、コピーするデータのサイズ（配列要素の数）を変えるだけであるため、複雑な処理は不要であり、十分に高速化される。そして、コレクションの構成が不一致のときに限り、階層化されたコレクションに対して互換性確保処理を再帰コールするようにしているので、互換性確保処理が必要最低限の箇所でのみ動作するようになっている。これにより更なる高速化を図ることができる。つまり、階層構造を持つコレクション単位でコピー及び互換性確保処理を行うことにより、互換性確保処理の動作を必要最低限の箇所でのみ行い、その必要がないコレクションについてはデータを一括コピーできるので、互換性確保を要するメモリコピー処理を高速化できる。そして、管理情報５２，７２に基づいてコレクション単位のデータ構成のチェックを行う構成であるため、コンバータが不要であり、過去資産の過多などに影響されない。したがって、複数のパラメータ値を別のデータ構成でコピーする処理を、手間をかけずに簡単かつ高速な処理で行えるようになる。
【００５６】
ここまでの説明では、コレクションの増減、コレクション毎の配列サイズの変化に関して互換性確保する動作のみを説明した。パラメータの増減、パラメータ毎の配列サイズの変化に関しても、図７の処理で対応できる。すなわち、最下層のノード（図５（ｂ）の符号６０〜６７）を処理対象に設定したとき、ＣＰＵ１０は、ステップＳ１にてパラメータ管理情報５６，７６のパラメータＩＤをチェックして、同じ種類のパラメータの存否を判断し、同じ種類のパラメータが存在すれば（ステップＳ１）、ステップＳ２にて、当該パラメータの全ての値（全ての配列要素のパラメータ値）をカレントメモリ５０に上書きコピーする。パラメータの配列サイズだけが異なる場合（ステップＳ１をＮＯに分岐し、ステップＳ３をＮＯに分岐した場合）、配列サイズが小さい方に合わせて当該パラメータのパラメータ値をカレントメモリ５０に上書きコピーする（つまり配列要素の一部だけをコピーする）。また、対応するＩＤのパラメータが存在しない場合（ステップＳ１のＮＯ）、つまりスナップショットデータ７０とカレントメモリ５０の間で当該パラメータが増減変化した場合、当該パラメータをコピーしない（ステップＳ２）。最下層のノードの管理情報に、子ノードが存在しないことを示す情報を持たせているので、ＣＰＵ１０は、これより下の階層を調べなくてよいことを判断できる。
【００５７】
パラメータを対象としている場合には、同種のパラメータがあるけれどもパラメータＩＤが不一致という理由として、配列サイズの変更に加えて、パラメータのデータサイズの変更又はパラメータのパラメータ型の変更が考えられる。そこで、パラメータを対象としている場合には、図７の処理に加えて、パラメータのデータサイズの変更又はパラメータのパラメータ型の変更に関する互換性確保処理も行う。図９は、パラメータのデータサイズの変更又はパラメータのパラメータ型の変更に関する互換性確保処理を示すフローチャートである。
【００５８】
ステップＳ６において、ＣＰＵ１０は、処理対象のコレクションに該当する構成情報５４に含まれるパラメータのデータサイズとパラメータ型とを調べる。スナップショットデータ７０とカレントメモリのカレントメモリ５０とで、当該パラメータが同じパラメータ型であり、且つ、同じデータサイズの場合（ステップＳ６のＹＥＳ）、ＣＰＵ１０は、ステップＳ７において、そのコレクションに該当するパラメータ値をそのまま、スナップショットデータ７０からカレントメモリのカレントメモリ５０に上書きコピーし、該処理対象コレクションに関する処理を終了する。
【００５９】
スナップショットデータ７０とカレントメモリのカレントメモリ５０とで、当該パラメータが同じパラメータ型であり、データサイズのみが異なっている場合（ステップＳ６のＮＯ１）、ＣＰＵ１０は、ステップＳ８において、パラメータ型が符号付き整数型、符号無し整数型、文字列型及び浮動小数点型の４種類のいずれであるかを調べ、そのパラメータ型に応じて、ステップＳ９〜Ｓ１１のいずれかの処理を行う。
【００６０】
（Ａ）パラメータ型が浮動小数点型の場合は、ＣＰＵ１０は、ステップＳ９において、処理対象のコレクションに該当するパラメータ値のコピーを行わずに、処理を終了する。（Ｂ）パラメータ型が符号付又は符号無し整数型の場合は、ＣＰＵ１０は、ステップＳ１０において、当該処理対象のコレクションに該当するパラメータ値を、データサイズを小さい方に合わせてスナップショットデータからカレントメモリに上書きコピーして、処理を終了する。（Ｃ）パラメータ型が文字列型の場合は、ＣＰＵ１０は、ステップＳ１１において、当該処理対象のコレクションに該当するパラメータ値を、データサイズを小さい方に合わせて、すなわちコピー先のサイズから溢れる文字列をカットして、スナップショットデータからカレントメモリに上書きコピーして、処理を終了する。
【００６１】
また、スナップショットデータ７０とカレントメモリのカレントメモリ５０とで、当該パラメータが、パラメータ型及びデータサイズがいずれも異なる場合、若しくは、少なくともパラメータ型が異なる場合（ステップＳ６のＮＯ２）、ＣＰＵ１０は、処理対象のコレクションに該当するパラメータ値のコピーを行わずに、処理を終了するものとする。
【００６２】
上記の図９の処理により、パラメータのデータサイズの変更には、パラメータ型に応じて互換性を確保する処理を行うことができる。したがって、パラメータのデータサイズが変更された場合も、可能な限りの互換性確保を行って、スナップショットデータ７０のパラメータ値を、カレントメモリ５０にコピーできるようになる。
【００６３】
次に、カレントメモリのパラメータ値５１が変更されたときに、そのパラメータ値変更を通知するための構成について説明する。周知の通り、ミキサ１のユーザは、操作部３を用いてカレントメモリのカレントメモリ５０中の所望のパラメータ値５１を変更できる。ＣＰＵ１０は、操作部３の操作に応じて、操作対象のパラメータを特定し、その操作量に応じて、特定したパラメータ値を変更する。ミキサ１は、パラメータ値（動作データ）が変更されたときに、何らかの通知相手（アプリケーションプログラムや、外部の装置）へ、そのパラメータ値の変更を通知するために、その変更内容を記録するパラメータ変更通知バッファ９０をメモリ（例えばＲＡＭ１３）に具備している。また、複数のパラメータ値５１には、個々のパラメータ値に固有の識別子として、通し番号でパラメータ番号を付与しておく。前述の図５（ａ）に示す通り、カレントメモリ５０の管理情報５２には、複数のパラメータ値５１に付与したパラメータ番号５７が含まれている。
【００６４】
図１０はパラメータ変更通知バッファ９０の構成例を示す。図１０において、パラメータ変更通知バッファ９０は、カレントメモリの１つのカレントメモリ５０として記憶される複数のパラメータ値５１と同数の記録要素９１を備える。図１０では、図示及び説明の便宜上、１０個の記録要素９１を示している。パラメータ変更通知バッファ９０の各記録要素９１には、それぞれ対応するパラメータのパラメータ番号５７が割り当てられている。
【００６５】
各記録要素９１は、「*ｐｒｅｖ」９２及び「*ｎｅｘｔ」９３の２つのポインタを備える。「*ｐｒｅｖ」９２は、その記録要素９１から見て１つ前にパラメータ値が変更されたパラメータ（「１つ前」）のパラメータ番号を格納するポインタ（第１ポインタ）である。「*ｎｅｘｔ」９３は、その記録要素９１の次にパラメータ値が変更されたパラメータ（「１つ後」）のパラメータ番号を格納するポインタ（第２ポインタ）である。また、或る時点において最初に値が変更された記録要素９１の「*ｐｒｅｖ」９２には、現時点で最初に変更されたパラメータであることを示す情報「最初」が格納される。また、現時点において最後に値が変更された記録要素９１の「*ｎｅｘｔ」９３には、現時点で最後に変更されたパラメータであることを示す情報「最後」が格納される。なお、変更されていないパラメータの「*ｐｒｅｖ」９２及び「*ｎｅｘｔ」９３は値無しとする。
【００６６】
上記のパラメータ変更通知バッファ９０の構造によれば、「*ｐｒｅｖ」９２及び「*ｎｅｘｔ」９３に何らかの値（パラメータ番号、「最初」、「最後」のいずれか）が入っている記録要素９１に対応するパラメータを「パラメータ値変更有り」、また、そうでないパラメータを「パラメータ値変更無し」と判断することができる。また、各記録要素９１の「*ｐｒｅｖ」９２及び「*ｎｅｘｔ」９３のデータに基づいて、パラメータ値変更順を示す双方向リストを作ることができる。すなわち、「最初」があるパラメータから「*ｎｅｘｔ」９３のパラメータ番号を辿ることで、パラメータ値が変更された順（変更時間が古いものから新しいもの順）のリストを得ることができる。反対に、「最後」があるパラメータから「*ｐｒｅｖ」９２のパラメータ番号を辿ることで、前記の逆順（変更時間が新しいものから古いもの順）のリストを得ることができる。つまり、パラメータ変更通知バッファ９０は、パラメータ値が変更されたパラメータ番号群と、その変更順を示す双方向リストとのハイブリットデータ構造を有する。この構造により、変更通知バッファ９０は、パラメータ値毎に、変更有無とその変更順序とを変更記録として記録することができる。
【００６７】
図１１は、パラメータ変更通知バッファ９０を更新する処理のフローチャートである。ユーザの操作部３の操作によりパラメータ値変更が行われたとき、ＣＰＵ１０は、図１１の処理を実行する。図１２（ａ）〜（ｄ）は、図１０のパラメータ変更通知バッファ９０を更新する動作の具体例であって、パラメータ番号２、４、７、８の順番でパラメータ値が変更された場合を想定して、パラメータ変更通知バッファ９０の双方向リストに値変更されたパラメータ番号が追加されていく様子を示す。
【００６８】
ステップＳ１２において、ＣＰＵ１０は、パラメータ変更通知バッファ９０に基づいて、既にパラメータ値が変更されているパラメータがあるか否か調べる。既にパラメータ値が変更されているパラメータの有無は、前述の通り、「*ｐｒｅｖ」９２及び「*ｎｅｘｔ」９３にデータが書き込まれている記録要素９１があるか否か（つまり、双方向リストにつながれているパラメータの有無）により判断できる。
【００６９】
パラメータ値変更が行われた時点では未だパラメータ変更通知バッファ９０内に変更されているパラメータがない場合（ステップＳ１２のＮＯ）、ＣＰＵ１０は、ステップＳ１３において、今回パラメータ値が変更されたパラメータ（対象パラメータ）の「*ｐｒｅｖ」９２を「最初」に、また、その「*ｎｅｘｔ」９３を「最後」にそれぞれ変更する。例えば、図１２（ａ）に示すようにパラメータ変更通知バッファ９０内に既に変更されているパラメータがない状態で、パラメータ番号２のパラメータ値が変更された場合、パラメータ番号２の「*ｐｒｅｖ」９２ａに「最初」が、また、その「*ｎｅｘｔ」９３ａに「最後」がそれぞれセットされる。
【００７０】
一方、パラメータ値変更が行われた時点でパラメータ変更通知バッファ９０内に既に変更されているパラメータがある場合（ステップＳ１２のＹＥＳ）、ステップＳ１４において、ＣＰＵ１０は、今回パラメータ値が変更されたパラメータ（対象パラメータ）が既にパラメータ値変更されているものか否か、すなわち、対象パラメータの「*ｐｒｅｖ」９２及び「*ｎｅｘｔ」９３にデータが書き込まれているか否かを調べる。対象パラメータがまだ変更されていない場合（ステップＳ１４のＮＯ）、ステップＳ１５において、ＣＰＵ１０は、パラメータ変更通知バッファ９０の双方向リストに対象パラメータを追加する処理を行う。
【００７１】
前記ステップＳ１５の追加処理は次の通りである。ＣＰＵ１０は、パラメータ変更通知バッファ９０のうち、「*ｎｅｘｔ」９３が「最後」になっているパラメータ（現時点で双方向リストの最後尾につながれているパラメータ、これを便宜上「最後パラメータ」と呼ぶ）を特定して、該特定した最後パラメータの「*ｎｅｘｔ」９３を「最後」から対象パラメータの番号に変更するとともに、対象パラメータの「*ｐｒｅｖ」９２を該最後パラメータのパラメータ番号に変更し、且つ、その「*ｎｅｘｔ」９３を「最後」に変更する。これにより、対象パラメータが双方向リストの最後尾に追加される（新たな最後パラメータとなる）。
【００７２】
対象パラメータを双方向リストの最後尾に追加する動作の具体例を図１２（ｂ）〜（ｄ）を参照して説明する。前記図１２（ａ）の状態から新たにパラメータ番号４のパラメータ値が変更された場合、図１２（ｂ）に示す通り、最後パラメータであるパラメータ番号２の「*ｎｅｘｔ」９３ａを「４」に変更するとともに、対象パラメータであるパラメータ番号４の「*ｐｒｅｖ」９２ｂを「２」に変更し、且つ、その「*ｎｅｘｔ」９３ｂを「最後」に変更する。続いて、（ｂ）の状態から新たにパラメータ番号７のパラメータ値が変更された場合、（ｃ）に示すように、最後パラメータであるパラメータ番号４の「*ｎｅｘｔ」９３ｂを「７」に変更するとともに、対象パラメータであるパラメータ番号７の「*ｐｒｅｖ」９２ｃを「４」に変更し、且つ、その「*ｎｅｘｔ」９３ｃを「最後」に変更する。更に、（ｃ）の状態から新たにパラメータ番号８のパラメータ値が変更されたときには、（ｄ）に示すように、最後パラメータであるパラメータ番号７の「*ｎｅｘｔ」９３ｃを「８」に変更するとともに、対象パラメータであるパラメータ番号８の「*ｐｒｅｖ」９２ｄを「７」に変更し、且つ、その「*ｎｅｘｔ」９３ｄを「最後」に変更する。
【００７３】
以上の動作により、変更されたパラメータ（パラメータ番号２、４，７，８）を、その変更順につないだ双方向リストを作ることができる。すなわち、「最初」のパラメータ番号２から、「*ｎｅｘｔ」をつなげば、変更順が古いパラメータから新しいパラメータを辿るリストができる。一方、「最後」のパラメータ番号８から、「*ｐｒｅｖ」をつなげば、変更順が新しいパラメータから古いパラメータを辿るリストができる。
【００７４】
図１１に戻ると、一方、対象パラメータが既に変更されている場合（ステップＳ１４のＮＯ）、ＣＰＵ１０は、ステップＳ１６において、当該対象パラメータの「*ｐｒｅｖ」９２及び「*ｎｅｘｔ」９３を再変更する処理、言い換えれば、双方向リストに既につながれているパラメータを、最後尾につなぎ直す処理を行う。
【００７５】
当該ステップＳ１６において、まず、ＣＰＵ１０は、「*ｎｅｘｔ」９３に対象パラメータのパラメータ番号を格納しているパラメータ（これを「１つ前のパラメータ」と呼ぶ）と、「*ｐｒｅｖ」９２に対象パラメータのパラメータ番号を格納しているパラメータ（これを「１つ後のパラメータ」と呼ぶ）と、「*ｎｅｘｔ」９３に「最後」を格納しているパラメータ（前述の「最後パラメータ」）とを特定する。次に、ＣＰＵ１０は、前記特定された１つ前のパラメータの「*ｎｅｘｔ」９３を前記特定された１つ後のパラメータのパラメータ番号に変更し、また、前記特定された１つ後のパラメータの「*ｐｒｅｖ」９２を前記特定された１つ前のパラメータのパラメータ番号に変更し、且つ、前記特定した最後パラメータの「*ｎｅｘｔ」９３を対象パラメータのパラメータ番号に変更する。そして、ＣＰＵ１０は、対象パラメータの「*ｐｒｅｖ」９２を、前記最後パラメータのパラメータ番号に変更し、且つ、その「*ｎｅｘｔ」９３を「最後」に変更する。これにより、対象パラメータを双方向リストの新たな最後尾としてつなぎなおすことができる。
【００７６】
対象パラメータを双方向リストの最後尾につなぎなおす動作の具体例として、前記図１２（ｄ）の状態（パラメータ番号２，４，７、８が番号順につながれた状態）で、パラメータ番号４のパラメータ値を再変更したときの動作を、図１３を参照して説明する。この場合、対象パラメータであるパラメータ番号４に対して、パラメータ番号２が「１つ前のパラメータ」であり、パラメータ番号７が１つ後のパラメータである。また、パラメータ番号８が最後パラメータである。１つ前のパラメータであるパラメータ番号２の「*ｎｅｘｔ」９３ａが「７」に変更され、且つ、１つ後のパラメータであるパラメータ番号７の「*ｐｒｅｖ」９２ｃが「２」に変更される。そして、最後パラメータの「*ｎｅｘｔ」９３ｄを「４」に変更するとともに、パラメータ番号４の「*ｐｒｅｖ」９２ｂを「８」に変更し、且つ、その「*ｎｅｘｔ」９３ｂを「最後」に変更する。
【００７７】
以上の動作により、変更前はパラメータ番号２，４，７の順でつながっていた箇所が、パラメータ番号２，７の順でつながるリストに変更されるとともに、パラメータ番号４が双方向リストの新たな最後尾につなぎ直される。その結果、図１３のように、古いパラメータから新しいパラメータの順ではパラメータ番号２，７，８，４、逆順ではパラメータ番号４，８，７，２というリストを得ることができる。
【００７８】
ミキサ１は、パラメータ変更操作あったときに、上述したパラメータ変更通知バッファ９０の更新処理とともに、パラメータ変更通知の通知相手（アプリケーションプログラムや、外部の装置）に対して、パラメータ変更が行われた旨の通知を行っておく。この変更通知は、イベントフラグを用いた簡単な仕組みで行う。イベントフラグにより通知される内容は、パラメータの変更があったということだけである。パラメータ変更通知の通知相手は、任意のタイミングで変更通知内容の問い合わせを行うことができる。ミキサ１は、問い合わせに対して、上述したパラメータ変更通知バッファ９０を参照して変更内容を応答できる。具体的には、ミキサ１のＣＰＵ１０は、問い合わせに応じて、パラメータ変更通知バッファ９０を参照してリスト先頭のパラメータ番号を通知する。ミキサ１のＣＰＵ１０は、通知相手に通知済みのパラメータをパラメータ変更通知バッファ９０のリストから外す（当該記憶要素９１の記録をクリアする）。通知済みのパラメータをパラメータ変更通知バッファ９０のリストから外したときは、該外されたパラメータの記憶要素９１の「*ｎｅｘｔ」９３に格納されたパラメータ番号のパラメータが、リストの先頭になる（その要素９１の「*ｐｒｅｖ」９２が「最初」に更新される）。すなわち、ミキサ１のＣＰＵ１０は、問い合わせに応じて、パラメータ変更通知バッファ９０のリスト順にパラメータ番号を通知することにより、どのパラメータ値が変更されたか、どの順番で変更されたかを、通知相手に教えることができる。なお、パラメータ変更通知バッファ９０から得られる１つのパラメータの情報は「パラメータ番号」だけであり、カレントメモリ５０におけるパラメータ値のアドレスや、変更後の値を知るには別種の変換が必要となる。
【００７９】
以上説明した本実施例によれば、パラメータ変更通知バッファ９０がパラメータ値に対応する複数の記録要素９１を備え、各記録要素９１が、対応するパラメータ値の直前に変更されたパラメータ番号を格納する第１ポインタと、対応するパラメータ値の次に変更されたパラメータ番号を格納する第２ポインタとを有する構成により、パラメータ値毎の変更有無と、その変更順を示す双方向リストとのハイブリットデータ構造を実現し、メモリ消費量が発散することなく変更の順番が保持できるようになる。また、変更通知に必要な処理を全て高速に行うことができる。
【００８０】
ミキサ１が上述したパラメータ変更通知バッファ９０を持つことにより、例えば、複数の装置からなるミキシングシステムにおいて、パラメータ値変更操作の情報（どのパラメータ値がどの順番で変更されたか）を、システム内の他の装置に通知できる。図１４は、ミキサ１を含むミキシングシステム１００の構成例である。ミキシングシステム１００は、２つのミキサ１，１０１（「ミキサ１」、「ミキサ２」）と、オーディオ入出力装置１０２（「Ｉ／Ｏ」）と、信号処理エンジン１０３（「エンジン」）と、２つのパーソナルコンピュータ１０４，１０５（「ＰＣ１」、「ＰＣ２」）を、ネットワーク１０６を介して接続してなるシステムであり、これら装置１，１０１，１０２，１０３，１０４，１０５が協働して入力されたオーディオ信号を信号処理して処理結果を出力する動作を行う。かかるミキシングシステム１００において、ミキサ１は、ユーザによるパラメータ値変更をシステム内の他の装置１０１〜１０５に通知できる。その通知は、上述の通り、メモリ消費量が発散することなく変更の順番が保持で、変更通知に必要な処理を全て高速に行うことができるというものである。
【００８１】
上述の図７、図９を参照して説明したコピー／互換性確保処理は、ミキサ１のスナップショットメモリに保存しているスナップショットデータ７０をカレントメモリ５０に上書きコピーする場合を想定していた。別の実施形態としては、例えばミキシングシステム１００においてパーソナルコンピュータ１０４，１０５（「ＰＣ１」、「ＰＣ２」）で作成したスナップショットデータを、ミキサ１のカレントメモリ５０に書き込むとき等、ミキサ１とは別の装置からミキサ１のカレントメモリ５０に複数のパラメータ値を上書きするときに、図７、図９を参照して説明したコピー／互換性確保処理を適用する構成が可能である。
【符号の説明】
【００８２】
１  デジタルオーディオミキサ、２  表示部、３  操作部、１０  ＣＰＵ、１１  ＲＯＭ、１２  ＲＡＭ、１６  信号処理部、５０  カレントメモリ、５１，７１  パラメータ値、５２，７２  管理情報、５３，７３  コレクション管理情報、５４，７４  構成情報、５５，７５  コレクションＩＤ、５６，７６  パラメータ管理情報、７０  スナップショットデータ、９０  パラメータ変更通知バッファ、９１  記録要素、９２，９３  ポインタ
【図１】
2013153261.tif 000003
【図２】
2013153261.tif 000004
【図３】
2013153261.tif 000005
【図４】
2013153261.tif 000006
【図５】
2013153261.tif 000007
【図６】
2013153261.tif 000008
【図７】
2013153261.tif 000009
【図８】
2013153261.tif 000010
【図９】
2013153261.tif 000011
【図１０】
2013153261.tif 000012
【図１１】
2013153261.tif 000013
【図１２】
2013153261.tif 000014
【図１３】
2013153261.tif 000015
【図１４】
2013153261.tif 000016