(57)【要約】【課題】ＤＭＡ転送においてバッファメモリへの音声データの格納が停止した際に、聴く人を不快にさせない音声転送装置および音声転送方法の提供を目的とする。【解決手段】音声転送装置１０１は、複数のバッファメモリＡ，Ｂに順次、音声データを格納するデバイスドライバスレッド３と、バッファメモリＡ，Ｂの音声データをバッファメモリＡ，Ｂ毎に順次、音声出力ハードウェア７に転送するメモリ転送部６と、バッファメモリＢから音声出力ハードウェア７への音声データの転送終了後、デバイスドライバスレッド３がバッファメモリＢに新たな音声データを格納する前に、バッファメモリＢの先頭アドレスにバッファメモリＡの最後尾アドレスのサンプル値を、先頭アドレスに続いて転送されるバッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込むバッファメモリ管理処理を行うバッファメモリ管理部４と、を備える。【選択図】図１
2015114854.tif 000002
【特許請求の範囲】
【請求項１】
第１バッファメモリと第２バッファメモリを含む複数のバッファメモリと、
前記複数のバッファメモリに順次、音声データを格納するデバイスドライバスレッドと、
前記バッファメモリの前記音声データを前記バッファメモリ毎に交互に順次、音声出力ハードウェアに転送するメモリ転送部と、
前記第１バッファメモリから前記音声出力ハードウェアへの前記音声データの転送終了後、前記デバイスドライバスレッドが前記第１バッファメモリに新たな前記音声データを格納する前に、前記第１バッファメモリの先頭アドレスに前記第２バッファメモリの最後尾アドレスのサンプル値を、前記先頭アドレスに続いて順次転送される前記バッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込むバッファメモリ管理処理を行うバッファメモリ管理部と、を備える、
音声転送装置。
【請求項２】
前記バッファメモリ管理処理において前記ゼロが初めて書き込まれるアドレスは、前記音声データのサンプリング周波数および前記複数のバッファメモリのサイズに基づき定まる、
請求項１に記載の音声転送装置。
【請求項３】
前記バッファメモリ管理処理は、前記第１バッファメモリの前記先頭アドレスに続いて順次転送される前記バッファメモリのアドレスに、ゼロに向かって線形的に減少する値を書き込む処理である、
請求項１または２に記載の音声転送装置。
【請求項４】
第１バッファメモリと第２バッファメモリを含む複数のバッファメモリに音声データを格納する格納工程と、
前記音声データを前記複数のバッファメモリから前記バッファメモリ毎に交互に順次、音声出力ハードウェアに転送する転送工程と、
前記転送工程で前記第１バッファメモリから前記音声出力ハードウェアへ前記音声データの転送を終了した後、前記第１バッファメモリの先頭アドレスに前記第２バッファメモリの最後尾アドレスのサンプル値を、前記先頭アドレスに続いて前記転送工程で順次転送される前記バッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込む書込工程と、を備え、
前記格納工程は、前記書込工程の後、前記第１バッファメモリに新たな前記音声データを格納する工程を有する、
音声転送方法。
【請求項５】
前記書込工程で前記ゼロが初めて書き込まれるアドレスは、前記音声データのサンプリング周波数および前記複数のバッファメモリのサイズに基づき定まる、
請求項４に記載の音声転送方法。
【請求項６】
前記書込工程は、前記第１バッファメモリの前記先頭アドレスに続いて順次転送される前記バッファメモリのアドレスに、ゼロに向かって線形的に減少する値を書き込む工程である、
請求項４または５に記載の音声転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＤＭＡ方式による音声転送装置および音声転送方法に関する。
【背景技術】
【０００２】
デジタル家電、携帯電話、車載向け情報機器等、広範な産業分野において、ＤＭＡ（Direct Memory Access）転送を用いたデジタル音声出力機能が採用されている。ＤＭＡとは、ＣＰＵ（Central Processing Unit）を介さず、ＤＭＡコントローラを用いて直接メモリにアクセスすることをいう。ＣＰＵはＤＭＡコントローラに１度設定を行えば、ＤＭＡコントローラが実際のデータ転送を行うため、ＣＰＵの負荷を上げずに高速なデータ転送を行うことができる。
【０００３】
また、音声データを適正かつ効率よく音声出力ハードウェアに転送するため、複数のバッファメモリが用いられる。複数のバッファメモリに音声データを順次格納し、フルに格納されたバッファメモリから音声データを出力する。
【０００４】
このとき、何らかの事情でメモリからバッファメモリへの音声データの格納が停止すると、ＤＭＡコントローラにより不正なデータがバッファメモリから音声出力ハードウェアに転送され、不正な音声が送出されてしまうという問題があった。
【０００５】
この問題に対し、特許文献１では、バッファメモリの端数部分（有意な音声データが格納されない部分）に“０（ゼロ）”データ（無音）を書き込むことにより問題を解決している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−３３５３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１の技術によれば、バッファメモリの端数部分直前の有意な音声データが十分ミュート状態でない振幅レベルが高い状態である場合、この直後に“０”データを挿入されるとボツ音が発生してしまい、聴く人を不快にさせてしまうという問題があった。
【０００８】
本発明は上記の問題点に鑑み、ＤＭＡ転送においてバッファメモリへの音声データの格納が停止した際に、聴く人を不快にさせない音声転送装置および音声転送方法の提供を目的とする。
【課題を解決するための手段】
【０００９】
本発明に係る音声転送装置は、第１バッファメモリと第２バッファメモリを含む複数のバッファメモリと、複数のバッファメモリに順次、音声データを格納するデバイスドライバスレッドと、バッファメモリの音声データをバッファメモリ毎に交互に順次、音声出力ハードウェアに転送するメモリ転送部と、第１バッファメモリから音声出力ハードウェアへの音声データの転送終了後、デバイスドライバスレッドが第１バッファメモリに新たな音声データを格納する前に、第１バッファメモリの先頭アドレスに第２バッファメモリの最後尾アドレスのサンプル値を、先頭アドレスに続いて転送されるバッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込むバッファメモリ管理処理を行うバッファメモリ管理部と、を備える。
【００１０】
本発明に係る音声転送方法は、第１バッファメモリと第２バッファメモリを含む複数のバッファメモリに音声データを格納する格納工程と、音声データを複数のバッファメモリからバッファメモリ毎に交互に順次、音声出力ハードウェアに転送する転送工程と、転送工程で第１バッファメモリから音声出力ハードウェアへ音声データの転送を終了した後、第１バッファメモリの先頭アドレスに第２バッファメモリの最後尾アドレスのサンプル値を、先頭アドレスに続いて転送工程で転送されるバッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込む書込工程と、を備え、前記格納工程は、前記書込工程の後、第１バッファメモリに新たな音声データを格納する工程を有する。
【発明の効果】
【００１１】
本発明に係る音声転送装置は、第１バッファメモリと第２バッファメモリを含む複数のバッファメモリと、複数のバッファメモリに順次、音声データを格納するデバイスドライバスレッドと、バッファメモリの音声データをバッファメモリ毎に交互に順次、音声出力ハードウェアに転送するメモリ転送部と、第１バッファメモリから音声出力ハードウェアへの音声データの転送終了後、デバイスドライバスレッドが第１バッファメモリに新たな音声データを格納する前に、第１バッファメモリの先頭アドレスに第２バッファメモリの最後尾アドレスのサンプル値を、先頭アドレスに続いて転送されるバッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込むバッファメモリ管理処理を行うバッファメモリ管理部と、を備える。よって、ＤＭＡ転送においてバッファメモリへの音声データの格納が停止した際にもボツ音の発生を抑えることができる。
【００１２】
本発明に係る音声転送方法は、第１バッファメモリと第２バッファメモリを含む複数のバッファメモリに音声データを格納する格納工程と、音声データを複数のバッファメモリからバッファメモリ毎に交互に順次、音声出力ハードウェアに転送する転送工程と、転送工程で第１バッファメモリから音声出力ハードウェアへ音声データの転送を終了した後、第１バッファメモリの先頭アドレスに第２バッファメモリの最後尾アドレスのサンプル値を、先頭アドレスに続いて転送工程で転送されるバッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込む書込工程と、を備え、前記格納工程は、前記書込工程の後、第１バッファメモリに新たな音声データを格納する工程を有する。よって、ＤＭＡ転送においてバッファメモリへの音声データの格納が停止した際にもボツ音の発生を抑えることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明に係る音声転送装置の構成を示すブロック図である。
【図２】本発明に係る音声転送装置の動作を示すフローチャートである。
【図３】本発明に係るバッファメモリ管理部によるバッファメモリの書き込み例を示す図である。
【図４】本発明に係る音声転送装置の動作を示す図である。
【発明を実施するための形態】
【００１４】
＜Ａ．実施の形態１＞
＜Ａ−１．構成＞
図１は、実施の形態１に係る音声転送装置１０１の構成を示すブロック図である。音声転送装置１０１は、データ格納部１、メモリ２、デバイスドライバスレッド３、バッファメモリ管理部４、バッファメモリ５、メモリ転送部６、および音声出力ハードウェア（Ｈ／Ｗ）７を備えている。
【００１５】
データ格納部１は、アプリケーションソフトウェアを実行するＣＰＵにより構成される。データ格納部１は、音声データをメモリ２に格納する。
【００１６】
デバイスドライバスレッド３は、メモリ２から音声データを取り出してバッファメモリ５に格納する。バッファメモリ５はバッファメモリＡとバッファメモリＢを備えており、デバイスドライバスレッド３はバッファメモリＡ，Ｂに対して交互に音声データを格納する。
【００１７】
バッファメモリ管理部４は、バッファメモリＡ，Ｂに対して、後述する管理処理を行う。デバイスドライバスレッド３とバッファメモリ管理部４は、メモリに格納されたプログラムを実行するＣＰＵにより構成される。
【００１８】
メモリ転送部６は、ＤＭＡコントローラにより構成され、バッファメモリＡ，Ｂに格納された音声データを順次、音声出力ハードウェア７に転送する。
【００１９】
＜Ａ−２．動作＞
図２は、音声転送装置１０１の動作を示すフローチャートである。以下、図２に沿って音声転送装置１０１の動作を説明する。
【００２０】
予め、データ格納部１が音声データを準備し、メモリ２に格納しているものとする。まず、デバイスドライバスレッド３の制御によって、メモリ２からバッファメモリＡに音声データが格納される（ステップＳ１）。具体的には、デバイスドライバスレッド３がバッファメモリ管理部４に転送元音声データを指定し、その指定に従ってバッファメモリ管理部４がメモリ２からバッファメモリＡに音声データを格納する。
【００２１】
次に、メモリ転送部６がバッファメモリＢから音声出力ハードウェア７への音声データの転送が終了したか否かを判断する（ステップＳ２）。なお、バッファメモリＢに一度も音声データが格納されていない場合、ステップＳ２では無条件にＹｅｓと判断する。バッファメモリＢから音声データを転送中であれば（ステップＳ２でＮｏ）、転送が終わるまで待機する。
【００２２】
次に、メモリ転送部６がバッファメモリＡから音声データを音声出力ハードウェア７に転送する（ステップＳ３）。メモリ転送部６は、バッファメモリＡに格納された音声データを、サンプリング周波数に同期して順次、先頭アドレスから最後尾アドレスまで転送する。そして、バッファメモリ管理部４は、バッファメモリＢにバッファメモリ管理処理を行う（ステップＳ４）。
【００２３】
ここで、バッファメモリ管理処理について説明する。図３は、バッファメモリＢにバッファメモリ管理処理を行う様子を示している。バッファメモリＡは転送中のバッファメモリとする。また、バッファメモリＡ，Ｂにはそれぞれ８サンプル分の音声データが書き込まれるものとする。また、音声データは１６ｂｉｔ、モノラルのＰＣＭ（Pulse Code Modulation）データとする。
【００２４】
バッファメモリ管理部４は、バッファメモリＢに格納した音声データの転送が終了すると、バッファメモリＢにバッファメモリ管理処理を行う。すなわち、メモリ転送部６からバッファメモリＢへの転送終了割込みイベントの通知を受けて、バッファメモリ管理処理を行う。ただし、初回は転送すべき音声データがまだバッファメモリＢに格納されていないので、上記通知によらずバッファメモリ管理処理を行う。
【００２５】
具体的には、バッファメモリＡの最後尾アドレスのサンプル値「０ｘ４８７６」を抽出し、「０ｘ４８７６」をバッファメモリＢの先頭アドレスに書き込む。そして、バッファメモリＢの続くアドレスには、「０ｘ４８７６」からゼロに向かって減少する値を書き込む。
【００２６】
図３では、バッファメモリＢの最後尾アドレスが０になるよう、先頭アドレスから最後尾アドレスにかけて線形的にサンプル値を減少させる例を示している。この場合、バッファメモリＡの最後尾アドレスのサンプル値をＸ、バッファメモリＢのアドレス数をＹとすると、バッファメモリＢのｎ番目のアドレスのサンプル値Ｓｎは、Ｓｎ＝Ｘ−（ｎ−１）×Ｘ／（Ｙ−１）として計算できる。
【００２７】
図２に戻ってフローチャートの続きを説明する。デバイスドライバスレッド３が正常に動作していれば（ステップＳ５でＹｅｓ）、デバイスドライバスレッド３はバッファメモリ管理部４に転送元音声データを指定する。そして、メモリ２からバッファメモリＢに音声データが格納され（ステップＳ６）、ステップＳ７に移行する。なお、２回目以降の音声データの格納の際は、デバイスドライバスレッド３は、バッファメモリ管理部４からバッファメモリＢの転送終了割込みイベントの通知を受けて、上記転送元音声データの指定を行う。しかし、ここでデバイスドライバスレッド３が何らかの理由で正常に動作していないと（ステップＳ５でＮｏ）、バッファメモリ管理部４に転送元音声データが指定されない。この場合、バッファメモリＢに新たな音声データが格納されることなく、ステップＳ７に移行する。
【００２８】
ステップＳ７では、メモリ転送部６がバッファメモリＡからの音声データの転送が終了したか否かを判断する。メモリ転送部６は、最後尾アドレスの音声データの転送終了をもって、バッファメモリＡからの転送が終了したと判断する（ステップＳ７でＮｏ）。バッファメモリＡからの転送が終了すると（ステップＳ７でＹｅｓ）、メモリ転送部６は、バッファメモリＢに格納された音声データを音声出力ハードウェア７に転送する（ステップＳ８）。なお、メモリ転送部６はバッファメモリＡからの転送が終了すると（ステップＳ７でＹｅｓ）、転送終了割込みイベントをバッファメモリ管理部４に通知する。転送終了割込みイベントの通知を受けたバッファメモリ管理部４は、当該転送終了割込みイベントをデバイスドライバスレッド３に通知すると共に、バッファメモリＡにバッファメモリ管理処理を行う（ステップＳ９）。バッファメモリ管理処理の詳細は、図３で説明したとおりである。
【００２９】
その後、デバイスドライバスレッド３は正常に動作していれば（ステップＳ１０でＹｅｓ）、バッファメモリ管理部４に転送元音声データを指定し、バッファメモリＡに音声データが格納される（ステップＳ１）。しかし、正常に動作していなければ（ステップＳ１０でＮｏ）、バッファメモリＡに音声データは格納されず、ステップＳ２に移行する。
【００３０】
以上の動作によれば、デバイスドライバスレッド３が正常な動作を行わない場合（ステップＳ５，１０でＮｏ）、バッファメモリＡ，Ｂにはメモリ２からの音声データが格納されない状態で、音声出力ハードウェア７にバッファメモリＡ，Ｂの格納データが転送される（ステップＳ３，８）。しかし、このような場合であっても、バッファメモリＡ，Ｂにはバッファメモリ管理処理（ステップＳ４，９）によって、１つ前に転送されるバッファメモリＡ，Ｂの最後尾アドレスのサンプル値から徐々にゼロデータに近づく値が書き込まれているため、不正な音声が音声出力ハードウェア７から出力されることはない。
【００３１】
図４は、音声転送装置１０１による音声出力を示している。図４（ａ）は、デバイスドライバスレッド３が正常に動作している際の音声出力を示し、図４（ｂ）は、デバイスドライバスレッド３が途中で正常に動作しなくなった場合の音声出力を示している。横軸は時間を、縦軸は音量を表している。
【００３２】
デバイスドライバスレッド３が正常に動作せず、次に転送すべきバッファメモリＢに音声データが書き込まれなくなったとしても、直前に転送されるバッファメモリＡの最後尾アドレスのサンプル値から徐々にゼロに近づく値がバッファメモリＢには書き込まれている。そのため、図４（ｂ）に示すように、時刻ｔ１からｔ２にかけて音量が徐々に小さくなるように音声出力が行われる。そのため、サンプル値が急激にゼロデータに変わることがないため、ボツ音の発生を抑制することができる。
【００３３】
上記の効果を奏するべく、図４（ｂ）における時刻ｔ１からｔ２までの時間が、ボツ音が発生しないだけの時間になるよう配慮する必要がある。従って、図３では、バッファメモリＢの最後尾アドレスに「０ｘ００００」、すなわちゼロデータが書き込まれていたが、これは一例であり、ゼロに達するまでの時間を所定時間確保できるように、ゼロデータが書き込まれるアドレスを決定する。具体的には、ボツ音を防ぐために必要なゼロデータまでの時間と、音声データのサンプリング周波数とに基づき、ゼロデータに近づけるまでに必要なサンプル数を求める。そして、ゼロに近づけるまでに必要なサンプル数と、バッファメモリＡ，Ｂに格納される音声データのサンプル数（バッファメモリＡ，Ｂのサイズ）から、バッファメモリＡ，Ｂのいずれのアドレスでサンプル値をゼロとすべきかを求める。
【００３４】
例えば、バッファメモリＡ，Ｂに格納される音声データのサンプル数を１０２４とし、音声データのサンプリング周波数を４４．１ｋＨｚとし、ボツ音を防ぐために必要なゼロデータまでの時間を必要な時間を２３．２２ｍｓとする。すると、サンプル値をゼロに近づけるまでに必要なサンプル数は４４．１ｋＨｚ×２３．２２ｍｓ＝１０２４となる。従って、バッファメモリＢの先頭アドレスから最後尾アドレスにかけてサンプル値をゼロに落とせば良い。
【００３５】
もちろん、バッファメモリＢだけでは上記時間が確保できない場合、バッファメモリＢの最後尾アドレスはゼロとならず、バッファメモリＢに続いて転送されるバッファメモリＡのいずれかのアドレスにも亘って、徐々にゼロデータに近づける値を書き込むことになる。
【００３６】
また、図３，４ではゼロまで線形的にサンプル値を落とす方法について説明したが、ゼロへの落とし方は線形的なものに限らない。例えば、対数的に落とすなど、他の落とし方でもよい。
【００３７】
また、２つのバッファメモリＡ，Ｂを交互に用いて音声データを転送する方法について説明したが、バッファメモリ５の数は２個に限らない。３つ以上のバッファメモリを用いる場合にも、本発明を適用することが可能である。
【００３８】
＜Ａ−３．効果＞
音声転送装置１０１は、第１バッファメモリ（バッファメモリＢ）と第２バッファメモリ（バッファメモリＡ）を含む複数のバッファメモリＡ，Ｂと、複数のバッファメモリＡ，Ｂに順次、音声データを格納するデバイスドライバスレッド３と、バッファメモリＡ，Ｂの音声データをバッファメモリＡ，Ｂ毎に順次、交互に音声出力ハードウェア７に転送するメモリ転送部６と、バッファメモリＢから音声出力ハードウェア７への音声データの転送終了後、デバイスドライバスレッド３がバッファメモリＢに新たな音声データを格納する前に、バッファメモリＢの先頭アドレスにバッファメモリＡの最後尾アドレスのサンプル値を、先頭アドレスに続いて順次転送されるバッファメモリＢのアドレスにゼロに向かって減少する値を、それぞれ書き込むバッファメモリ管理処理を行うバッファメモリ管理部４と、を備える。よって、何らかの理由でデバイスドライバスレッド３が動作を停止し、バッファメモリＡ，Ｂへ音声データが格納されなくなっても不正な音声が出力されることがない。また、緩やかに音量が小さくなるように音声出力がなされるので、ボツ音の発生を抑制することができる。
【００３９】
また、上記バッファメモリ管理処理においてゼロが初めて書き込まれるアドレスは、音声データのサンプリング周波数および複数のバッファメモリＡ，Ｂのサイズに基づき定まる。よって、ゼロに達するまでの時間を所定時間確保できるようにゼロが初めて書き込まれるアドレスを決定することにより、ボツ音の発生を抑制することができる。
【００４０】
また、上記バッファメモリ管理処理は、バッファメモリＢの先頭アドレスに続いて順次転送されるバッファメモリのアドレスに、ゼロに向かって線形的に減少する値を書き込む処理である。これによれば、簡単な計算処理でバッファメモリ管理処理を実行することができる。
【００４１】
本発明に係る音声転送方法は、第１バッファメモリ（バッファメモリＢ）と第２バッファメモリ（バッファメモリＡ）を含む複数のバッファメモリＡ，Ｂに音声データを格納する格納工程と、音声データを複数のバッファメモリＡ，ＢからバッファメモリＡ，Ｂ毎に交互に順次、音声出力ハードウェア７に転送する転送工程と、転送工程でバッファメモリＢから音声出力ハードウェア７へ音声データの転送を終了した後、バッファメモリＢの先頭アドレスにバッファメモリＡの最後尾アドレスのサンプル値を、先頭アドレスに続いて転送工程で順次転送されるバッファメモリのアドレスにゼロに向かって減少する値を、それぞれ書き込む書込工程と、を備え、格納工程は、書込工程の後、バッファメモリＢに新たな音声データを格納する工程を有する。よって、何らかの理由でバッファメモリＡ，Ｂへ音声データが格納されなくなっても不正な音声が出力されることがない。また、緩やかに音量が小さくなるように音声出力がなされるので、ボツ音の発生を抑制することができる。
【００４２】
また、上記書込工程でゼロが初めて書き込まれるアドレスは、音声データのサンプリング周波数および複数のバッファメモリのサイズに基づき定まる。よって、ゼロに達するまでの時間を所定時間確保できるようにゼロが初めて書き込まれるアドレスを決定することにより、ボツ音の発生を抑制することができる。
【００４３】
また、上記書込工程は、バッファメモリＢの先頭アドレスに続いて転送されるバッファメモリのアドレスに、ゼロに向かって線形的に減少する値を書き込む工程である。これによれば、簡単な計算処理でバッファメモリ管理処理を実行することができる。
【００４４】
なお、本発明は、その発明の範囲内において、実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【００４５】
１  データ格納部、２  メモリ、３  デバイスドライバスレッド、４  バッファメモリ管理部、５  バッファメモリ、６  メモリ転送部、７  音声出力ハードウェア、１０１  音声転送装置。
【図１】
2015114854.tif 000003
【図２】
2015114854.tif 000004
【図３】
2015114854.tif 000005
【図４】
2015114854.tif 000006