マイク入力について (1999/04/20 新訂) (1999/10/04 改訂) (2000/02/14 改訂) (2000/05/06 改訂) Julius-3.1 でのマイクロフォンからの音声入力について,環境の設定や 制限事項等について説明します. □目次□ 1.音響モデルの制限 2.サポートOS 3.コンパイル時の設定 4.マイク入力の認識の流れ 5.音量・トリガレベルの調節 6.マイクデバイスの動作チェック 1.音響モデルの制限 ===================== Julius 内部で可能な特徴抽出量は,現在のところIPAの音響モデルと同じ 特徴量(MFCC_E_D_N_Z)のみです.よってLPC等の異なるタイプの音響モデルを 使用する場合,マイク入力は使用できず,特徴パラメータファイル(HTK形式)で の入力のみとなりますので注意してください. 2.サポートOS =============== 現在マイク入力がサポートされているOSは,以下の通りです. a) Linux (kernel driver, OSS/Linux, ALSA) b) Sun Solaris 2.x c) Sun SunOS 4.x d) SGI IRIX 各OSに関する詳細と注意事項です: a) Linux Linux では,以下のサウンドドライバに対応しています. 1) OSS compatibles 1-1) カーネル 2.0.x および 2.2.x に含まれるドライバ (2.3.xは未テスト) 1-2) OSS/Linux: 4Front Technologies社の商用ドライバ 2) ALSA: Advanced Linux Sound Architecture これらは configure 実行時に自動判別されます. 使用ドライバを明示的に指定したい場合は,configure で "--with-mictype=TYPE" を指定してください(TYPEには oss もしく は alsa を指定). 16bit,16kHz,monoral で録音できることが必須です. ~~~~~~~~~~~~~~~~~~~ うまく入るかどうかは,現状ではドライバやチップとの相性に 大きく左右されます.よくある "Sound-Blaster Pro 互換" の設定で はおそらく正しく動作しません. また特に NotePC に関しては,16bit,16kHz録音がサポー トされているとされるチップであっても,実際には録音音質が非常に悪く,使 用に耐えないものが多数ありますのでご留意下さい. うまくいかなければOSS, ALSA などいろいろなドライバを試してみる のがよいでしょう. Juliusはミキサー設定を行いません.入力デバイスの選択(MIC/LINE)やボ リューム調節は xmixer などで別途行ってください. 関連URL: Linux Sound-HOWTO http://www.linux.or.jp/JF/JFdocs/Sound-HOWTO.txt ALSA http://www.alsa-project.org/ OSS/Linux http://www.opensound.com/ b) Sun Solaris 2.x Solaris 2.5.1 および 2.6 で動作確認をしています. デフォルトのデバイス名は "/dev/audio" です. 環境変数 AUDIODEV で指定できます. 起動後オーディオ入力がマイクに自動的に切り替わります. また音量は(14)に自動設定されます. c) Sun SunOS 4.x SunOS 4.1.3 で動作確認をしています. コンパイルにはヘッダ が必要です. デフォルトのデバイス名は "/dev/audio" です. 環境変数 AUDIODEV で指定できます. 起動後オーディオ入力がマイクに自動的に切り替わります. また音量は(20)に自動設定されます. d) SGI IRIX IRIX 6.3 で動作確認をしています.(5.x でも動作する可能性は大) 起動後オーディオ入力はマイクに自動的に切り替わりますが, ボリュームは自動調節されません.apanelコマンドで別途調節して ください. 3.コンパイル時の設定 ========================= 基本的に特別な設定は必要ありません."configure" がOSを自動判別し,必 要なライブラリを組み込みます.うまく検出出来たかどうかを調べるには, configure の最後に出力される以下のようなメッセージをチェックしてください. mic API type : alsa (Advanced Linux Sound Architecture) 何らかの理由で自動判別に失敗する場合は,configure にオプション "--with-mictype=TYPE" を指定してください.TYPEは oss, alsa, sol2, sun4, irix のどれかを指定します. 4.マイク入力の認識の流れ =========================== ここで Julius の起動からマイク入力までの流れを説明します.途中で不具合が起 きた場合は 5,6 へ進んでください. マイク入力を認識させには,起動時に "-input mic" を指定します.すると 起動後,プロンプトが出て音声のトリガ待ちになります.なお同時に "-demo" を指定することで第1パスの解析途中の候補をリアルタイムに出 力することができます. プロンプトがでたらマイクに向かって発声します.口の位置はマイクから 15cm程度で,ゆっくりはっきり発声して下さい.Julius は一定以上のレベル の入力があるとマイク入力開始とみなし,処理をはじめます.解析は入力と平 行して進みます.次に長い無音区間が現れたらそこで第1パスの解析をやめて 第2パスへ移行し,最終結果を出力します.その後また入力待ちになる,を繰 り返します. ! 注意 ! マイク入力の場合,最初の第1発話は必ずおかしな認識結果が出ます. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 実時間処理では正確なCMNが与えるのが難しいため,直前の入力で 計算したCMNパラメータを次の入力で使用する仕組みになっています.このため, 起動して最初の発話では正しい特徴抽出ができません. 最初の入力は「マイクテスト」などとして,2回目以降から本入力を開始する ようにしてください. 5.音量・トリガレベルの調節 ============================= うまく認識できないときは,マイクの音量や,音声の開始を検出するための トリガレベルを動作環境に応じて設定してやる必要があります. 調節の流れですが,まずマイクのボリュームを調節してから,トリガレベル を決定します.ボリュームは入力音声が割れない程度に大きくします(他の録 音ツール等で正しく録音できているかチェックすると良いでしょう).周囲の 環境に合わせて増減して調節してください. 感度が鈍くて音声を検出できない場合や,逆に周囲の雑音でトリガして しまう場合は,トリガレベルを調節します.トリガレベルはオプション "-lv" で指定できます.値の範囲はunsigned short の振幅 (0-32767) で,デフォル トは 3000 です.トリガレベルが大きいと感度が鈍り,小さいと感度が鋭くな ります. 6.adinrec によるマイクデバイスの動作チェック =============================================== 2.2 以降の Julius には adinrec というマイク録音テストプログラムが 一緒に収められています.これを使ってJuliusがちゃんとマイク入力を取り込 めているのかどうかを確かめることができます. % ./adinrec/adinrec myfile 上記のように実行すると,adinrec はマイクから1回分の発声をファイル myfile に記録します.この adinrec は Julius 本体と同じ取り込みルーチ ンを使用しているので,この録音ファイルの音質がすなわちJuliusが認識しよ うとしている音声の音質ということになります. 録音ファイルはヘッダなしの 16kHz, monoral, signed 16bit big endian です.以下のコマンドで再生できます(要sox) Linux/OSS: sox -t .raw -r 16000 -s -w -x -c 1 myfile -t ossdsp -s -w /dev/dsp Linux/ALSA: aplay -f s16b -r -s 16000 myfile Solaris2: sox -t .raw -r 16000 -s -w -c 1 aaa -t sunau -w -s /dev/audio また波形を目で見てみることで,ノイズの乗り方やクリッピングの様子など より詳しく分かります.snd という音波形編集ツールが知られています. http://www-ccrma.stanford.edu/CCRMA/Software/snd/snd.html 7.どうしてもうまくいかないときは(Linux) ========================================== Linux ではドライバもサウンドチップも多様で,動く/動かないがあり ます.adinrecでの録音音質が悪い,あるいは動作しないという場合は, 以下の順で試してみてください. 1. (ALSAの方は) OSS 互換モードで使用する Julius の configure 時に "--with-mictype=oss" をつける. % ./configure --with-mictype=oss 2. 入力部をスレッド化する Julius の configure 時に "--enable-pthread" をつける. % ./configure --enable-pthread 3. ドライバを換えてみる ALSAで動いてOSSで動かない場合,逆に OSSで動いてALSAで動かない場合,様々です. 以上