マイク入力について

Julius/Julian-3.3 でマイクロフォンから直接入力する際の,留意点や環境設定,制限事項等について説明します.
  1. 使用可能な音響モデル
  2. サポートするOS
  3. コンパイル時の設定
  4. マイク入力の認識手順
  5. 音量・トリガレベルの調節
  6. 録音音声の検証

1.使用可能な音響モデル

Julius/Julian 内部で可能な特徴抽出量は,現在のところIPAの音響モデルと同じ特徴量(MFCC_E_D_N_Z)のみです.よってLPC等の異なるタイプの音響モデルを使用する場合,マイク入力は使用できず,特徴パラメータファイル(HTK形式)での入力のみとなりますので注意してください.

2.サポートするOS

現在マイク入力がサポートされているOSは,以下の通りです.
  1. Linux (kernel driver, OSS/Linux, ALSA)
  2. Sun Solaris 2.x
  3. Sun SunOS 4.x
  4. SGI IRIX
  5. FreeBSD
各OSに関する詳細と注意事項は以下のとおりです:

  1. Linux

    Linux では,以下のサウンドドライバに対応しています.

    これらは configure 実行時に自動判別されます.

    使用ドライバを明示的に指定したい場合は,configure で"--with-mictype=TYPE" を指定してください(TYPEには oss もしくは alsa を指定).

    16bit,16kHz,monoral で録音できることが必須です.

    正しく録音できるどうかは,現状ではドライバやチップとの相性に大きく左右されます.よくある "Sound-Blaster Pro 互換" の設定ではおそらく正しく動作しません.特に,NotePC についてはドライバの相性が問題となることが多く,16bit,16kHz録音がサポートされているとされるチップであっても,実際には録音音質が非常に悪く使用に耐えないものもあります.ご留意下さい.

    Juliusはミキサーデバイスの設定を行いません.録音デバイスの選択や各デバイスのボリューム調節は xmixer などで別途行ってください.

    関連リンク:

  2. Sun Solaris 2.x

    Solaris 2.5.1 および 2.6 で動作確認をしています.

    デフォルトのデバイス名は "/dev/audio" です.環境変数 AUDIODEV で指定できます.

    起動後オーディオ入力がマイクに自動的に切り替わります.また音量は 14 に自動設定されます.

  3. Sun SunOS 4.x

    SunOS 4.1.3 で動作確認をしています.コンパイルにはヘッダ が必要です.

    デフォルトのデバイス名は "/dev/audio" です.環境変数 AUDIODEV で指定できます.

    起動後オーディオ入力がマイクに自動的に切り替わります.音量は 20 に自動設定されます.

  4. SGI IRIX

    IRIX 6.3 で動作確認をしています.(5.x でも動作する可能性は大)

    起動後オーディオ入力はマイクに自動的に切り替わりますが,ボリュームは自動調節されません.apanelコマンドで別途調節してください.

  5. FreeBSD

    FreeBSD 3.2-RELEASEで、ドライバはsndで動作確認をしました."--with-mictype=oss" で動作します.

    ミキサーの設定は行われません.入力デバイスの選択(MIC/LINE)やボリューム調節を他のツールで行うようにしてください.

    サウンドカードなどの注意点は Linux の項をご覧下さい.

3.コンパイル時の設定

基本的に特別な設定は必要ありません."configure" がOSを自動判別し,必要なライブラリを組み込みます.うまく検出されたかどうかは,configure の最後に出力される以下のメッセージをチェックしてください.
mic API type    : oss (Open Sound System compatibles)
自動判別に失敗する場合は,configure にオプション"--with-mictype=TYPE"を指定してください.TYPEは oss, alsa, freebsd, sol2,sun4, irix のどれかを指定します.

なお 3.1p1 よりドライバが ALSA であっても OSS API使用がデフォルトとなりました。ALSA ドライバーをお使いの方も OSS emulation での使用をお奨めします.ALSA native API 使用版(β版)を使用したい方は "--with-mictype=alsa" を指定してください.

4.マイク入力の認識手順

ここで Julius の起動からマイク入力までの流れを説明します.途中で不具合が起きた場合は 5,6 へ進んでください.

マイク入力を認識させるには,起動時に "-input mic" を指定します.すると起動後,以下のようなプロンプトが出て音声のトリガ待ちになります.(プロンプトが出る前に発声した内容は無視されます)

<<< please speak >>>
プロンプトを確認後,マイクに向かって発声します.口の位置はマイクから15cm程度離し,できるだけはっきり発声して下さい.

一定以上のレベルの入力があるとJuliusは第1パスの処理をはじめます.解析は入力と平行して進みます.次に長い無音区間が現れたらそこで第1パスの解析をやめて第2パスへ移行し,最終結果を出力します.その後また入力待ちになる,を繰り返します.

! 注意 !
マイク入力の場合,基本的に最初の第1発話は正しく認識できません.

これは,実時間処理では直前の入力で計算したCMNパラメータを次の入力で使用する仕組みになっているため,最初の入力では CMN を行えないためです.

最初の入力は「マイクテスト」などと適当な入力を行い,2回目以降から本 入力を開始するようにしてください.

ただし "-cmnload filename" で初期 CMN パラメータをファイル から読み込み,第1発話からCMNを適用することができます.また Julius/Julian 内のCMNパラメータは "-cmnsave filename" で保存できます.

なお起動時に "-demo" を指定することで第1パスの解析途中の候補をリアルタイムに出力することができます.

5.音量・トリガレベルの調節

うまく認識できないときは,マイクの音量や,音声の開始を検出するためのトリガレベルを動作環境に応じて設定してやる必要があります.

調節の流れですが,まずマイクのボリュームを調節してから,トリガレベルを決定します.ボリュームは入力音声が割れない程度に大きくします(他の録音ツール等で正しく録音できているかチェックすると良いでしょう).

感度が鈍くて音声を検出できない場合や,逆に周囲の雑音でトリガしてしまう場合は,トリガレベルを調節します.トリガレベルはオプション "-lv" で指定できます.値の範囲はunsigned short の振幅 (0-32767) で,デフォルトは 3000 です.トリガレベルが大きいと感度が鈍り,小さいと感度が鋭くなります.

また,発話開始や発話終了部分の音声が切れてしまう場合は,トリガレベルを下げると 途切れずに収録できることがあります.

6.録音音声の検証

Rev.2.2 以降の Julius には,1発話をマイクから録音するプログラム 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
記録した音声波形を見るには,例えば以下のツールを使用してみてください.
$Id: mic.html,v 1.5 2002/09/11 21:00:39 ri Exp $