(57)【要約】【課題】複数のアナログ信号から所要の音声のアナログ信号を選択し、Ａ／Ｄ変換する。【解決手段】  音声信号を含む複数のアナログ信号をＡ／Ｄ変換するＡ／Ｄ変換手段と、前記Ａ／Ｄ変換手段で前記音声信号をＡ／Ｄ変換する際のサンプリング周波数の整数倍の周波数で動作するタイマと、前記タイマの出力に応じて、前記複数のアナログ信号から１つのアナログ信号を選択して、前記Ａ／Ｄ変換手段に供給する選択供給手段とを備えた撮像装置で前記課題を解決する。【選択図】図８
2006148889.tif 000002
【特許請求の範囲】
【請求項１】
音声信号を含む複数のアナログ信号をＡ／Ｄ変換するＡ／Ｄ変換手段と、
前記Ａ／Ｄ変換手段で前記音声信号をＡ／Ｄ変換する際のサンプリング周波数の整数倍の周波数で動作するタイマと、
前記タイマの出力に応じて、前記複数のアナログ信号から１つのアナログ信号を選択して、前記Ａ／Ｄ変換手段に供給する選択供給手段とを備えたことを特徴とする撮像装置。
【請求項２】
前記タイマの周波数が前記Ａ／Ｄ変換手段で前記音声信号をＡ／Ｄ変換する際のサンプリング周波数のｎ倍の周波数の場合に、前記選択供給手段はｎ回に１回の頻度で前記音声信号を選択して、前記Ａ／Ｄ変換手段に供給することを特徴とする請求項１に記載の撮像装置。
【請求項３】
少なくとも入力された音声信号をＡ／Ｄ変換可能なＡ／Ｄ変換手段と、
前記Ａ／Ｄ変換手段をコントロールするレジスタと、
前記レジスタを設定するレジスタ設定情報が記憶されるテーブルと、
前記Ａ／Ｄ変換手段で前記音声信号をＡ／Ｄ変換する際のサンプリング周波数の整数倍の周波数で動作するタイマと、
前記タイマの出力に応じて、前記メモリに記憶される前記レジスタ設定情報を前記レジスタに設定する情報設定手段とを備えたことを特徴とする撮像装置。
【請求項４】
前記テーブルは少なくとも前記音声信号をＡ／Ｄ変換する場合に前記レジスタに設定される音声レジスタ設定情報を含み、前記情報設定手段による前記音声レジスタ設定情報の設定頻度が前記タイマの周波数の倍率に応じて変化することを特徴とする請求項３に記載の撮像装置。
【請求項５】
前記タイマの周波数が前記Ａ／Ｄ変換手段で前記音声信号をＡ／Ｄ変換する際のサンプリング周波数のｎ倍の周波数の場合に、前記情報設定手段によってｎ回に１回の頻度で前記音声レジスタ設定情報が設定されることを特徴とする請求項４に記載の撮像装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内蔵或は着脱可能な記録媒体に音声データも書き込む撮像装置に関するものである。
【背景技術】
【０００２】
小型軽量が望まれるデジタルカメラにおいて、機器の主目的となる撮影の他に、撮影した画像に対して音声注釈(Voice Annotation)を付加する機能を盛り込んだ機器が増えてきている（特許文献１参照）。
【特許文献１】特開平１−２３７９６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来は専用のラインバッファやＡ／Ｄ変換器を用いて音声データを作成する技術が開示されている。これらの手法では専用の素子を用いるために余分なスペースとコストが必要となる。また、専用ラインバッファが有限であるため、録音可能な時間が限られてしまう。したがって使用者は、製品のメモリ容量で決定される限られた時間の中で音声注釈を付けなければならなかった。
【０００４】
本発明は、このような状況のもとでなされたもので、有限なメモリの必要最小限のメモリを用いて選択された様々な容量の記録媒体の限界まで録音可能にし、またカメラ本体内部の有限のメモリをカメラ内部の他の撮影するモジュール等と共有し、専用モジュールを使用せずに、限られたＣＰＵの内部周辺モジュールを駆使して、録音と他の動作を両立させることのできるデジタルカメラを提供することを目的とするものである。
【課題を解決するための手段】
【０００５】
前記目的を達成するため、本発明では撮像装置を次のとおりに構成する。
【０００６】
音声信号を含む複数のアナログ信号をＡ／Ｄ変換するＡ／Ｄ変換手段と、前記Ａ／Ｄ変換手段で前記音声信号をＡ／Ｄ変換する際のサンプリング周波数の整数倍の周波数で動作するタイマと、前記タイマの出力に応じて、前記複数のアナログ信号から１つのアナログ信号を選択して、前記Ａ／Ｄ変換手段に供給する選択供給手段とを備えたことを特徴としている。
【０００７】
少なくとも入力された音声信号をＡ／Ｄ変換可能なＡ／Ｄ変換手段と、前記Ａ／Ｄ変換手段をコントロールするレジスタと、前記レジスタを設定するレジスタ設定情報が記憶されるテーブルと、前記Ａ／Ｄ変換手段で前記音声信号をＡ／Ｄ変換する際のサンプリング周波数の整数倍の周波数で動作するタイマと、前記タイマの出力に応じて、前記メモリに記憶される前記レジスタ設定情報を前記レジスタに設定する情報設定手段とを備えたことを特徴としている。
【発明の効果】
【０００８】
本発明によれば、音声信号をＡ／Ｄ変換する際のサンプリング周波数の整数倍の周波数で動作するタイマの出力に応じて、Ａ／Ｄ変換手段に入力するアナログ信号を切換えることによって、音声信号のＡ／Ｄ変換に影響を与えることなく、他のアナログ信号をＡ／Ｄ変換することができる。
【発明を実施するための最良の形態】
【０００９】
以下本発明を“デジタルカメラ”の実施例により詳しく説明する。
【００１０】
なお、実施例における音声記録の手法は、デジタルカメラ以外の機器において利用できる。
【実施例】
【００１１】
図１は実施例である“デジタルカメラ”の構成を示すブロック図である。同図において、１は本実施例のデジタルカメラ、２は記録媒体、３は記録媒体を挿入するためのスロット、４は記録媒体２を係合するためのコネクタ、５は複数のレンズと絞り、更に光学フィルタを介して入射する被写体の光学的画像を撮像素子上に結像させ、電気信号を得る一連の撮像手段、６は撮像手段５が出力する画像信号をデジタル信号に変換するＡ／Ｄコンバータ、７はデジタル信号処理ＩＣ、８はＣＰＵ、９はスロット３に装着される記録媒体２に合わせてデータの書込みまたは読出しを行うためのドライバ、１０は内部メモリ、１１は不揮発性メモリ、１２はマイク、１３は音声アンプおよびＣＰＵ８への入力コントロール回路、１４は外部装置と通信するためのバスラインコネクタ、１５はダブルファンクションのレリーズ釦、１６は録音釦、１７はＬＣＤ（液晶表示器）である。
【００１２】
本実施例においては、記録媒体としてカメラ内部の不揮発性メモリ１１をディスクとして用いる他に、スロット３に装着して使用する記録媒体としてＰＣＭＣＩＡ／ＡＴＡ対応のフラッシュメモリカードまたはハードディスクを使用する。また、カメラ内部の上記内部メモリ１０としてはセルフリフレッシュ機能を持ったＤＲＡＭを使用する。更に、使用するＣＰＵ８には、２つ以上のタイマと、２つ以上のＤＭＡＣ（ダイレクト・メモリ・アクセスコントローラ）と、４チャネル以上のアナログ入力を備えるＡ／Ｄコンバータを持つものを選択する。録音はＣＰＵ８の持つこれらの内部周辺モジュールを駆使して実現する。
【００１３】
マイク１２からの出力は、アンプ１３とＣＰＵ８への入力コントロール回路を介して、ＣＰＵ８のＡ／Ｄ変換（以下Ａ／Ｄと略記する）のダイナミックレンジとの整合を図る。ここで、ＣＰＵ８のアナログ入力には音声の他に、電源電圧検出やストロボ充電電圧を検出するためのアナログ入力等が接続されている。録音時には、これらのＡ／Ｄ情報を同時に使用できる様にすることと、４４．１［ｋＨｚ］を基準とする周波数でサンプリングすることが要求される。これらの条件を満たすには、タイマ割り込みでＡ／Ｄを起動し、Ａ／Ｄ完了割り込みでメモリにＡ／Ｄ値を転送するといった方法では、Ａ／Ｄ値を参照する各アプリケーションレイヤーのシステム間のタイミング制御が複雑になり、他のモジュールとの整合性を取るのが困難になる。また、割り込みにおいても多重割り込み等のＣＰＵ機能を有効に活用していく上で自由度が低下してしまうため、システム設計に支障を来たす。
【００１４】
そのため本実施例においては、図８に示す概略図に示す様に、Ａ／Ｄをコントロールするレジスタの設定をテーブルとしてメモリに保持し、最終的な音声のサンプリング周波数の整数倍の周波数のタイマでＤＭＡ（Direct Memory Access）を起動し、上記テーブルからＡ／Ｄをコントロールするレジスタに一定周期で転送する。すなわち、テーブルに設定した順にＡ／Ｄをコントロールするレジスタを一周周期で切り替える。
【００１５】
これらの設定および起動は、デジタルカメラのスタートアップ時に一度だけ行うものとする。図６がその時の設定のフローを示す。なおフローの処理はＣＰＵ８により行われる。他のフローチャートのフローについても同様である。まず、タイマクロックおよび、割り込み設定を行う（Ｓ１）。次にＤＭＡ設定を行う（Ｓ２）。転送先はＡ／Ｄをコントロールするレジスタに固定し、転送元はテーブルの先頭から末尾まで順次変化する様に設定する。転送回数はテーブルの大きさによる。Ａ／Ｄ機構はコントロールレジスタに設定された情報を基にして所望のアナログ入力をＡ／Ｄしていくことになる。また、ＤＭＡが上記テーブル分の転送が終了したときの割り込み設定を行う（Ｓ３）。このテーブル分の転送が終了すると、ＤＭＡ終了割り込み内で、転送元のアドレスを上記設定テーブルの先頭に戻し、転送回数をもテーブルの大きさに復元する（Ｓ５）。
【００１６】
本実施例においては、最終的にファイルになる音声のサンプリング周波数として１１．０２５［ｋＨｚ］を採用し、Ａ／Ｄをコントロールするレジスタの設定を転送するＤＭＡを起動するタイマをサンプリング周波数の２倍に相当する２２．０５［ｋＨｚ］に設定する。また、上記テーブルは図２の様に構成する。但し、アナログ入力として、音声（Audio ），電源電圧検出回路出力（Battery ），ストロボ充電電圧（Charge），シャッタ開口径を示すホール素子ドライバ出力（Hall Out）を例として採用している。
【００１７】
こうして音声のサンプリングが１１．０２５［ｋＨｚ］になる様にテーブルを生成する。当然のことながら、上記テーブルの構成は、Ａ／Ｄコントロール・レジスタ設定を転送するＤＭＡを起動するタイマとサンプリング周波数との倍数によって一義的に決定される。今回を例にすれば、Ａ／Ｄコントロール・レジスタ設定を最終的にファイルになる音声のサンプリング周波数の２倍にしたことから、図２の様に上記テーブルにおいて音声のＡ／Ｄは交互に設定されるが、もしＡ／Ｄコントロールするレジスタを設定する周波数に４４．１［ｋＨｚ］を採用した場合には、設定テーブル中の「Audio 」は必然的に等間隔で、且つ１／４に分散する様に変化するはずである。
【００１８】
次に、Ａ／Ｄ値を利用する優先順位の中で、音声の次に優先される電源電圧検出「Battery 」を音声「Audio 」の半分の周波数で、その他のアナログ入力は同率にＡ／Ｄが行われる様にテーブルが設定されている。
【００１９】
この様にしてＡ／Ｄされたアナログ入力は入力端子毎にＡ／Ｄ結果をＣＰＵ８の所定のレジスタに吐き出す。これらのＡ／Ｄ結果を参照するモジュールは必要に応じて所望の結果を読み出すことができ、音声は自動的に１１．０２５［ｋＨｚ］でサンプリングしていることになる。
【００２０】
次に、１１．０２５［ｋＨｚ］の周期で更新されていく所定のレジスタのデータ即ち、音声のＡ／Ｄ値を所定のサウンド・バッファに格納していく役割を果たすサウンドデバイスドライバについて説明する。
【００２１】
サウンドデバイスドライバは、インスタンス生成手段，使用する資源の初期化手段，インスタンス開放手段，デバイスの能力を与える手段，サウンドバッファ生成手段，サウンドバッファをデバイスドライバに登録する手段，上位のアプリケーションレイヤーにサウンドバッファを受け渡すためのコールバックファンクションをデバイスドライバに登録する手段，サンプリング回数を指定（無限指定可能）してサンプリングを開始するトリガ手段，サンプリングを停止させるトリガ手段，サンプリング状態を与える手段，指定されたサンプリング回数だけサンプリングが終了するまで待つ手段を持つ。
【００２２】
まず、サウンドバッファの構造から説明する。
【００２３】
サウンドバッファは、システムが管理するＤＲＡＭを動的にアロケーションしたメモリブロックで、図３の様なデータ構成になる。
【００２４】
同図において「次のサウンドバッファへのハンドル」は、複数のサウンドバッファをリンクドリストにして使用する場合に用い、最後のサウンドバッファでは番兵「End Of Buffer 」を意味するデータ（例えば、−１等）が格納される。「チャネル」は、モノ，ステレオ左，ステレオ右を意味するデータ。「バッファサイズ」は文字通りサウンドバッファの大きさをバイト数で現したデータ。「サンプリングデータサイズ」は、サンプリングしたＡ／Ｄ値のデータサイズをビット数で現したデータ。「サンプル数」は、バッファ中のデータの内、先頭からどのサンプリングデータまでが有効であるかを示すデータである。
【００２５】
これらのデータの中で「チャネル」および「サンプリングデータサイズ」は、システムのハードウェアに依存する。デバイスドライバは、アプリケーションレイヤーからハードウェアに依存する部分を隠蔽するためにサウンドバッファを指定したサイズで生成する機能と、生成されたサウンドバッファをデバイスドライバに登録する機能を持つ。
【００２６】
サウンドバッファの生成時には「次のサウンドバッファへのハンドル」は番兵を示すデータが格納され、その他のデータはデバイスドライバの能力に合わせて設定、初期化される。本実施例においては、図１２の様に「チャネル」はモノ、「サンプリングデータサイズ」は８ビット、「バッファサイズ」は１秒分に相当する１１０２５バイトとし、「サンプル数」は必然的に１１０２５回になる。また、サウンドバッファの登録は、周知のリスト操作で行われ、デバイスドライバのインスタンスにサウンドバッファリストを持たせ、このサウンドバッファリストに登録する。登録時には、図１３に示す様に、登録するサウンドバッファをリストの最後に追加していく。サウンドバッファの登録は、アロケーションされたメモリブロックのリスト操作であるので、サンプリング中であっても実行可能である。
【００２７】
サウンドバッファの構造をこの様にすることによって、上位のアプリケーションにおいて録音時間が固定／可変に関わらず、同じデバイスドライバで実現できる。つまり、サウンドバッファがリンクドリストであり、サンプリング中であってもサウンドバッファのデバイスドライバへの登録が可能なことを利用して、システムのメモリ１０の総量に応じて断片化されたメモリブロックをリスト状に連結し、更にサンプリングが終了したサウンドバッファを再登録することによって擬似的なラウンドバッファを構成することによって、少ないメモリで可変時間の音声サンプリングが可能になる。
【００２８】
次に、Ａ／Ｄ値のサンプリング方法を図９〜図１１で説明する。
【００２９】
先に説明した通り、音声のアナログ入力は１１．０２５［ｋＨｚ］の周期でＡ／Ｄされ、所定のレジスタに格納される。インスタンス生成が行われたあとで（Ｔ１）、初期化命令が発せられると、デバイスドライバはＤＭＡが先頭のサウンドバッファのサンプリング数を転送し終わったら、ＣＰＵ８に割り込み処理を要求する様に設定し、Ａ／Ｄコントロール・レジスタ設定を転送するＤＭＡを起動するタイマ以外であって、ＣＰＵ８のもう一つのタイマを上記周波数に設定しておく（Ｔ２）。ここでのＤＭＡ回数（サンプリング回数）は、転送するサウンドバッファのバッファサイズをサンプリングデータサイズで割った値に相当する。即ち、本実施例においては１１０２５回である。サウンドデバイスドライバは、サンプリング開始トリガが発せられると（Ｔ５）、まず停止状態であったサンプリング状態を示すインスタンスをサンプリング中を示すデータに変更する。また、サンプリング開始時に指定されたサンプリング回数をインスタンスに保存する（Ｔ６）。
【００３０】
次に、上記ＣＰＵ８のもう一つのタイマを起動して１１．０２５［ｋＨｚ］周期で上記所定のレジスタの音声アナログ入力のＡ／Ｄ値を登録された先頭のサウンドバッファに転送するＤＭＡを駆動する（Ｔ７）。先頭のサウンドバッファが満たされると、先に設定した割り込みが発生し、先頭のサウンドバッファをサウンドバッファリストから外す（Ｔ１４）。また、インスタンスに保存したサンプリング指定回数からリストから外したサウンドバッファのサンプル数を減算し残りのサンプリング回数として更新する（Ｔ１５、１６）。更に、次のＤＭＡ転送先を上記リスト操作によってリスト上で先頭になった２番目のサウンドバッファに設定し直して、リストから外されて音声データが満たされたサウンドバッファのハンドルを上位のアプリケーションのインスタンスに格納する（Ｔ２６）。当然ＤＭＡ転送回数は、Ａ／Ｄ値を格納していくサウンドバッファのサイズとサンプリングデータサイズおよび、残りのサンプル回数に依存する。つまり、次の転送先になるサウンドバッファのバッファサイズをサンプリングデータサイズで割った値が、インスタンスが示す残りのサンプル回数よりも小さい場合は（Ｔ２０）、上記除算結果をＤＭＡ転送回数に指定し（Ｔ２１）、大きい場合にはインスタンスの残りのサンプル回数を指定するということである（Ｔ２２）。本実施例についていえば、前者の場合には、１１０２５回である。後者の場合においては、インスタンス内の残りのサンプリング回数を予めサウンドバッファ内の「サンプル数」に格納しておく。こうすることによって、最後のサウンドバッファのサンプル数が正確になる。勿論、上記残りのサンプル数を格納する前にサンプル終了トリガ等によって停止された場合にも、容易にＤＭＡ転送回数から算出できる（Ｔ８〜１３）。
【００３１】
アプリケーションのインスタンスに格納する場合、コールバックファンクションを用いることによってアプリケーションとデバイスドライバを分離できるので、本実施例においてもこれを採用し、上記割り込み処理内で実行する。音声のファイルを生成するアプリケーションは、サンプリング開始トリガを発する前に、デバイスドライバに対してサウンドバッファがいっぱいになった時に実行してほしいファンクションのエントリーとインスタンスハンドルを登録しておく。このファンクションの中身はサウンドバッファのハンドルをインスタンスに格納し、後で説明するサウンドバッファを受け取ってファイル書き込みタスクに受け渡すタスクに対してイベント通知を行うなど、アプリケーションが自由に設計できる（図１９参照）。
【００３２】
この様にサウンドバッファがいっぱいになるまでサンプリングされた場合には、サウンドバッファに付随する「サンプル数」データは、「バッファサイズ÷サンプリングデータサイズ」であるから、これを割り込み処理内でサウンドバッファの所定の場所に格納し、上記方法でアプリケーションに引き渡す。また、サンプリング終了トリガが発せられた場合（Ｔ９）、デバイスドライバはＤＭＡを即座に中断させ（Ｔ１０）、先頭のサウンドバッファをリストから外す（Ｔ１１）。この時のサンプル数は「バッファサイズ÷サンプリングデータサイズ」からＤＭＡ転送回数を減算したものであるからサウンドバッファの「サンプル数」に格納して（Ｔ１２）、アプリケーションに引き渡す（Ｔ１３）。
【００３３】
これらの動作は、サンプリング開始トリガが発せられた時に設定されたサンプリング回数が無限であるなしに関わらず同じである。しかしながら、現在サンプリングしているサウンドバッファが満たされて、上記次のサウンドバッファの準備を行う際、サウンドバッファのリンクドリスト上に次のサウンドバッファがない場合には（Ｔ１７）、ＤＭＡを停止した上で（Ｔ２３）、インスタンスのサンプリング状態を示すインスタンスを停止を示すデータに変え（Ｔ２４）、サンプリングを終了する。この時に上位アプリケーションがエラー判別できる状態にし、カメラとしてエラー表示するかはアプリケーションの設計に委ねる。また、サンプリング開始トリガが発せられる時に指定された回数分のＤＭＡが終了すると、インスタンス内の残りのサンプリング回数が「０」であることによって（Ｔ１８）、ＤＭＡを終了し（Ｔ２３）、サンプリング状態を停止を示すデータに更新する（Ｔ２５）。
【００３４】
次に、アプリケーションレイヤーに相当するサウンドレコーダについて説明する。
【００３５】
サウンドレコーダはデバイスドライバを起動する手段、デバイスドライバを終了する手段，録音準備をする手段，録音時間( 無限指定可能) を指定可能な録音開始手段，録音終了手段，デバイスドライバの状態を得る手段，デバイスドライバの機能を得る手段，および録音経過をユーザーインターフェイスに通知するためのコールバックファンクションを登録する手段，音声ファイル名を与える手段，音声ファイルの書き込み終了を待つ手段を備える。
【００３６】
サウンドレコーダは、２つの独立したタスクで構成される。第一のタスクは、サウンドデバイスドライバがＡ／Ｄ値を収集したサウンドバッファを受け取り、第二のタスクに受け渡す役割を果たすタスクである。第二のタスクは、第一のタスクから受け取ったサウンドバッファをカメラ内部の不揮発性メモリ１１を利用した内蔵ディスクあるいは、カメラのスロット３に装着された記録媒体２にファイルとして書き込むタスクである。第二のタスクは、受け取ったサウンドバッファをファイルに書き込んだ後で、サウンドデバイスドライバに登録し直して、サウンドバッファのリンクドリストをラウンドバッファにして、より少ないサウンドバッファ即ち、メモリブロックで録音するシステムを構成している。つまり、リンクドリストから外されたサウンドバッファのデータをファイルに書き込めば、そのサウンドバッファは開放してもよいのであるが、そのままサウンドデバイスドライバに登録し直せば、サウンドバッファの「サンプル数」だけを初期化するだけで、リンクドリストの最後に追加されるため、擬似的なラウンドバッファを構成できる。こうすることによって、メモリブロックの開放と新たなサウンドバッファを生成する時間を省略できる。また、システム上のメモリマネージャの機能にもよるが、メモリブロックの獲得・開放を繰り返してメモリ全体が断片化してしまうのを避けることができる。図４はサウンドバッファ受け渡しの概念図である。
【００３７】
本サウンドレコーダにおいて、第一のタスクが直接ファイルに書き込まないのは、記録する対象となる記録媒体の書き込み速度が、音声をＡ／Ｄする周波数に対して極端に遅い場合に録音を継続すると、受け取ったサウンドバッファをファイルに書き込んでいる最中に次のサウンドバッファがいっぱいになってサウンドデバイスドライバから転送されてきてしまう。これが複数回発生すると途中のサウンドバッファが失われる恐れがある。これを回避するには、第二のタスクに受け取るサウンドバッファをキューイングする機能を持たせればよいことになる。例えば、サウンドレコーダのインスタンスにキューイングするサウンドバッファをリンクドリストにしていくメッセージボックスの様な機能を加えるのである。最初は空であるが、第一のタスクがサウンドバッファのハンドルをメッセージにしてメッセージボックスに転送すると、サウンドバッファのハンドルがリストとなって繋がれていく。第二のタスクがメッセージボックスからメッセージを受けると、メッセージボックスの先頭のアイテムがリストから外されてメッセージ本体即ちサウンドバッファのハンドルを取り出せる様になる。メッセージボックスおよび、メッセージはサウンドバッファリストに概念的に似ているので、細かい説明は省略するが、メッセージの構造は図５の様に構成する。この様にキューイングする機構を利用することによって上記問題は回避される。
【００３８】
次に予想される問題として、ハードディスクの様に媒体２への書き込みが可能になるまでの立ち上がり時間が長い記録媒体に対してファイルを生成する際、この立ち上がり時間がデバイスドライバに登録したサウンドバッファの総数に記録可能な時間を超えてしまった場合に、ファイルに書き終えたサウンドバッファをサウンドデバイスドライバに再登録するのが遅れて、サンプリングデータを格納していくサウンドバッファが無いことによってデバイスドライバが自動停止してしまうからことがある。そこで、記録媒体のタプル上にあるハードディスク等のローテート媒体か半導体メモリ等のシリコン媒体かの情報を利用して、記録対象となる媒体を判別し、ローテート媒体の場合にはシリコン媒体よりも立ち上がり時間が長いことを予想して、サウンドバッファの総数をシリコン媒体の時よりも多く生成・登録するようにしている。更に、ローテート媒体が故障などしてサーボ等に支障を来し、すべてのサウンドバッファを使いきってしまった場合にはデバイスドライバからのエラー情報を基にして、エラーをＬＣＤ１７に表示してもよい。また、第二のタスクにキューイングされたサウンドバッファだけをファイルに書き込み、正常終了するのもよい。勿論上記タプル情報を使わずに設計時に考えられる情報から固定時間分のサウンドバッファを用意してもよい。また今後、上記立ち上がり時間が記録媒体から直接得られる様になれば当然そちらを利用して、この時間以上のサウンドバッファを生成・登録してもよい。
【００３９】
これまでに説明した構成される録音システムにおいて、サウンドバッファのサイズを幾つにして何個生成し登録するかは、カメラ内部のメモリ全体の大きさや、他のモジュールで使用するメモリブロックの大きさ、更には音声ファイルを記録する記録媒体の起動時から書き込みが可能になるまでの時間によって決定される。特に、記録媒体２としてハードディスク等のローテート媒体が選択された場合、低温下では１０秒位の立ち上がり時間を要するために、本実施例を例にとれば、１秒分のサウンドバッファを２０個用意することとする。
【００４０】
では、サウンドレコーダの動作について図１４〜図１９で説明する。
【００４１】
まず、サウンドレコーダは起動されると必要な資源の獲得を行い（Ｒ１）、上記２つのタスクを起動する（Ｒ２）。次にデバイスドライバを起動する手段が発せられると、デバイスドライバを起動する（Ｒ３）。この際にサウンドバッファを獲得するためにコールバックファンクションをデバイスドライバに登録する。コールバックファンクションの中身は、図１９にある様に、サウンドバッファのハンドルをインスタンスにデータ格納する（Ｋ２）と同時に、上記第一のタスクにサウンドバッファを受けたことを通知するフラグを立てることである（Ｋ３）。次に録音を準備する手段が発せられると（Ｒ４）、サウンドバッファを生成した形跡がインスタンス内のデータに残っていない場合のみ（Ｒ５）、デバイスドライバのサウンドバッファ生成手段を用いて、先に説明した通り１秒分のサウンドバッファを２０個生成しデバイスドライバに登録する（Ｒ６）。次に録音開始トリガ手段が発せられると（Ｒ７）、指定された録音時間をデバイスドライバの能力からサンプリング回数を算出し（Ｒ８）、このサンプリング回数を指定してデバイスドライバにサンプリング開始トリガを発する（Ｒ９）。
【００４２】
第一のタスクは、生成された時からサウンドバッファを受けたことを示すインスタンス内のフラグが立った時に起床する様に設定する。上記フラグが立つと起床して上記フラグをクリアする（Ｒ１５）。次に、インスタンス内のサウンドバッファのハンドルを獲得し、獲得したサウンドバッファのハンドルはメッセージにして、第二のタスクのメールボックスに投函する（Ｒ１６）。この時にデバイスドライバのサンプリング状態を引き出し（Ｒ１７）、サンプリングをしている限り上記フラグ待ちからサウンドバッファ転送までを繰り返す（Ｒ１８）。デバイスドライバのサンプリング状態が停止を示していた場合には、サウンドバッファ転送をもって上記ループから脱出して、録音終了命令を第二のタスクに投函して（Ｒ１９）開放命令が発せられるのを待つ（Ｒ２０）。
第二のタスクは、生成された時にファイルをオープンし（Ｒ２３）、サウンドバッファをいつでも書き込める準備をし（Ｒ２４）、メッセージボックスにメッセージが投函されるのを待つ。
【００４３】
本実施例においては、音声ファイルを「ＷＡＶＥ」ファイルフォーマットで生成することとする。したがって、上記準備においては、サウンドデバイスドライバの能力を参照し、ＲＩＦＦヘッダーの各Ｃｈｕｎｋにデータを設定しておくところまでを含む。
【００４４】
サウンドバッファのハンドルがメッセージによって通知されると、メッセージからサウンドバッファのハンドルを取り出し（Ｒ２６）、サウンドバッファの音声データ本体を上記ファイルのＤａｔａ  Ｃｈｕｎｋに収め、周知のＷＡＶＥヘッダーのＴｏｔａｌ  Ｓｉｚｅおよび、Ｄａｔａ  Ｓｉｚｅ即ち、純粋なサンプリングデータのサイズを更新する（Ｒ２７）。このＷＡＶＥヘッダの更新はサウンドバッファのサンプリングデータを書き込み度に更新してもよいが、ファイルのシーク時間はファイルサイズが大きくなる毎に長くなるので、最後に更新してもよい。また、ある時間を境にしてシークをやめて、その後は最後に更新する方法でもよい。また、媒体の種類または書き込み時間あるいはシーク時間によって方法を変えてもよい。本実施例では、サウンドレコーダのインスタンスにＴｏｔａｌ  ＳｉｚｅとＤａｔａ  Ｓｉｚｅを格納する場所を確保して、サウンドバッファを受け取る度にこれらのデータを更新していき、最後にＷＡＶＥヘッダを更新する方法をとることにする。また、ファイルにサウンドバッファのサンプリングデータの書き込みおよび、上記２つのサイズ情報の更新か終わると（Ｒ２８）、即座にサウンドバッファをデバイスドライバに登録し直す（ラウンドバッファの実現、Ｒ２９）。この様にして第二のタスクは、メッセージ構造体のメッセージが終了を示すデータでない限り（Ｒ２５）、メッセージ本体をサウンドバッファのハンドルとしてファイルに書き込んでいく。
【００４５】
上位のユーザーインターフェイスによるイベントによって、録音停止命令が発せられると（Ｒ１０）、サウンドレコーダはデバイスドライバに対してサンプリング停止命令を発生する（Ｒ１１）。デバイスドライバはサンプリング停止命令が発せられると、先に説明した通り、サンプリング状態を示すデータを停止に更新する。第一のタスクは、最後のサウンドバッファを受け取り、第二のタスクにサウンドバッファのハンドルを投函した後でデバイスドライバが停止していることにより（Ｒ１８）、引き続いて録音終了を投函する（Ｒ１９）。第二のタスクは、メッセージが終了を示すデータであった場合には、インスタンス内のＴｏｔａｌ  ＳｉｚｅとＤａｔａ  Ｓｉｚｅを基にＷＡＶＥヘッダを更新し（Ｒ３０）、ファイルを閉じる（Ｒ３１）。更に、ユーザーインターフェイスから開放命令が出されると、サウンドレコーダはに第一のタスクに開放命令を出す。第一のタスクは開放命令を受けると（Ｒ２０）、第二のタスクに開放命令を出力し、タスク終了を示すフラグを立てて自らの資源を開放する（Ｒ２１）。同様に開放命令により第二のタスクは、音声ファイルの書き込みが終了したことを示すフラグを立てる（Ｒ３３）。サウンドレコーダは第一および第二のタスクが資源を開放するのを確認したら（Ｒ１３）、デバイスドライバの開放命令を出し、自らのインスタンスも開放して終了する（Ｒ１４）。
【００４６】
次にユーザーインターフェイスによる録音操作と録音操作によって発生する録音イベントについて説明する。
【００４７】
まず、説明に先立って、カメラが生成するファイルのフォーマットについて説明する。
【００４８】
カメラが生成するファイル（画像、音声）には、最終的に記録する画像データの他に、カメラが生成したファイルのシリアルナンバ、画像データの撮影条件（被写体輝度、絞り値、シャッタースピード、露出補正値、ストロボ撮影時のガイドナンバ、画像サイズ、圧縮比情報、被写体距離、合焦モード等）あるいは、録音条件（録音時間、圧縮比情報等）等の付帯情報が登録される様に構成されている。記録媒体にはこれらのファイルを管理するための独立した管理ファイルがあり、カメラが生成するファイルはすべてこの管理ファイルによって統括され、各ファイルの保存場所に当たるディレクトリとファイル名称はこの管理ファイルを基にして与えられる。カメラの撮影イベントおよび、録音イベントはこの管理ファイルから生成するファイル名を取得し、ファイル生成後に付帯情報をかき集めて、生成したファイルと共に登録する。
【００４９】
また、カメラは記録対象となる記録媒体が決定すると、媒体の総容量、残り容量、クラスタサイズ等の情報を調べて記憶する。本実施例においては記憶場所を、カメラ内部の不揮発性メモリ１１を利用した内蔵ディスクとするが、特にこれに限らない。
【００５０】
本実施例での記録媒体２はパソコンでも使用できるため、カメラが生成したファイルの他にユーザーがパソコン等で生成したファイルが混在する可能性があるため、カメラで記録媒体を論理的に破壊するのは極めて致命的である。撮影した画像ファイルは被写体や圧縮比等で変化し、音声ファイルにおいては、ユーザーがどの位の時間の音声注釈を付けるかを予想するのは極めて難しい。更に、媒体や媒体のフォーマット状態によって媒体のクラスタサイズが変わるため、最小ファイルサイズは変化する。したがって、記録媒体２を論理的に破壊せずに記録媒体を最大限まで利用するには、録音前に記録媒体のクラスタサイズに基づいた最小ファイルサイズを元に記録可能容量を決定し、その上で余裕をみるためにマージン容量を確保して、ファイル生成と生成後の動作を保証する必要がある。
【００５１】
カメラのＬＣＤ１７には通常、記録対象となる記録媒体の総容量と残り容量から予想される今後の記録可能枚数、あるいは記録媒体の残り容量を％表示している。録音操作釦は録音釦１６とカメラのレリーズ釦１５で構成されている。録音釦１６が押された状態からレリーズ釦１５が押されると、録音開始イベントが発生する。以下図２０，図２１を参照し説明する。
【００５２】
録音開始イベントが発生すると、まずハードウェア設定や、Ａ／ＤコントロールレジスタＤＭＡを開始する（Ｅ２）。次に、カメラの電源電圧が録音可能状態にあるか調べる（Ｅ３）。電源電圧が録音可能状態であった場合には、記録対象となる記録媒体の残り容量から
１．記録対象媒体の最小ファイルサイズ（ＦＡＴではクラスタサイズ）、
２．上記管理ファイルに登録するために必要な最小ファイルサイズ、
３．マージン容量
を減算し、記録可能総バイト数を算出する（Ｅ５）。この記録可能総バイト数を時間に換算して、カメラの操作によって使用者にあとどれだけ録音できるかＬＣＤ１７に表示する等して知らせるのも可能である。
【００５３】
本実施例においては、最低記録保証時間を５秒とし、サウンドレコーダを介してサウンドデバイスドライバの能力より、５秒録音するのに必要なバイト数があるかチェックする（Ｅ６，Ｅ７）。ここで、記録可能総バイト数が、５秒録音するのに必要なバイト数よりも小さい場合には録音せずに録音開始イベントを終了する（Ｅ７）。反対に、記録可能総バイト数が５秒録音するのに必要なバイト数より１バイトでも大きい場合には録音可能とみなす。
【００５４】
録音可能であると判断した場合には、サウンドレコーダをバインディングし（Ｅ８）、上記管理ファイルからファイル名を取得してサウンドレコーダを起動し（Ｅ９）、サウンドレコーダに録音準備命令を出す（Ｅ１０）。また、サウンドレコーダに対して、コールバックファンクションを登録する（Ｅ１１）。このファンクションでは、ＬＣＤ１７に録音時間を表示する。また、録音時間の他に、録音中であることを示すキャラクタをＬＣＤ１７に表示してもよい。サウンドレコーダの第一のタスクがサウンドバッファを受け取る度にこのファンクションを実行することによって、ＬＣＤ１７には録音時間が秒数で表示される。最後にサウンドレコーダに録音開始命令を発生する（Ｅ１２）。
【００５５】
上記録音釦１６とレリーズ釦１５が共に離されると、録音停止イベントが発生する。
【００５６】
録音停止イベントが発生すると、まずサウンドレコーダをバインディングし（Ｅ１３）、サウンドレコーダのコールバックファンクションに対して新たにファイル書き込み中を示す表示をするためのファンクションを登録する（Ｅ１４）。登録が終わったら、サウンドレコーダに録音停止命令を出し（Ｅ１５）、ファイル書き込み終了を待つ（Ｅ１６）。次に上記管理ファイルに登録するための付帯情報は集めて（Ｅ１７）登録する（Ｅ１８）。最後にサウンドレコーダに開放命令を出して（Ｅ１９）、録音イベントは終了する。
【００５７】
なお、実施例で示した管理ファイルが無い場合は、管理ファイルに登録するために必要なクラスタサイズを引く必要はない。また、マージン容量の大きさは特に問わない。
【図面の簡単な説明】
【００５８】
【図１】実施例の構成を示すブロック図
【図２】Ａ／Ｄをコントロールするレジスタの設定をするテーブルを示す図
【図３】サウンドバッファ構造を示す図
【図４】サウンドバッファ受渡しの概念図
【図５】メッセージ構成例を示す図
【図６】Ａ／Ｄコントロールレジスタ設定のフローチャート
【図７】Ａ／Ｄコントロールレジスタ設定ＤＭＡの終了割り込みのフローチャート
【図８】Ａ／Ｄコントロール概念図
【図９】サウンドデバイスドライバの動作を示すフローチャート（その１）
【図１０】サウンドデバイスドライバの動作を示すフローチャート（その２）
【図１１】サウンドデバイスドライバの動作を示すフローチャート（その３）
【図１２】生成時のサウンドバッファを示す図
【図１３】サウンドバッファ登録の概念図
【図１４】サウンドレコーダの動作を示すフローチャート（その１）
【図１５】サウンドレコーダの動作を示すフローチャート（その２）
【図１６】サウンドレコーダの動作を示すフローチャート（その３）
【図１７】サウンドレコーダの動作を示すフローチャート（その４）
【図１８】サウンドレコーダの動作を示すフローチャート（その５）
【図１９】デバイスドライバに登録するコールバックファンクションの内容を示す図
【図２０】録音開始イベントの動作を示すフローチャート
【図２１】録音停止イベントの動作を示すフローチャート
【符号の説明】
【００５９】
２  記録媒体
８  ＣＰＵ
１１  不揮発性メモリ
【図１】
2006148889.tif 000003
【図２】
2006148889.tif 000004
【図３】
2006148889.tif 000005
【図４】
2006148889.tif 000006
【図５】
2006148889.tif 000007
【図６】
2006148889.tif 000008
【図７】
2006148889.tif 000009
【図８】
2006148889.tif 000010
【図９】
2006148889.tif 000011
【図１０】
2006148889.tif 000012
【図１１】
2006148889.tif 000013
【図１２】
2006148889.tif 000014
【図１３】
2006148889.tif 000015
【図１４】
2006148889.tif 000016
【図１５】
2006148889.tif 000017
【図１６】
2006148889.tif 000018
【図１７】
2006148889.tif 000019
【図１８】
2006148889.tif 000020
【図１９】
2006148889.tif 000021
【図２０】
2006148889.tif 000022
【図２１】
2006148889.tif 000023