最近は、なぜか音声認識機能が面白いのではないかと、思いました。
なので、ちょっと数回は音声認識の記事を書こうかと思います!
音声を利用する時に
1、自前で用意する。
2、googleの音声認識を利用する。
の2通り(2のような外部のアプリを使う方法なら無限にありますが。。)あるのですが、
今回は自前で作成をしたいと思います。
AudioRecordと言うクラスで入力された値を取得できるようです。
AudioRecord audioRecore = new AudioRecord( 取得のデバイス, サンプリングレート, チャンネル, エンコーディング, ビット, バッファーサイズ );
上記で、引数の値が、日本語であって日本語でない単語なので、ここで利用する値をまずは研究したいと思います。
■取得デバイス
取得のデバイスに関しては
MediaRecorder.AudioSource.CAMCORDER MediaRecorder.AudioSource.DEFAULT MediaRecorder.AudioSource.MIC MediaRecorder.AudioSource.VOICE_CALL MediaRecorder.AudioSource.VOICE_DOWNLINK MediaRecorder.AudioSource.VOICE_RECOGNITION MediaRecorder.AudioSource.VOICE_UPLINK
が用意されているのですが、
TECH BOOTHさんで見ると、普通に遊び用をつくりたい場合はMICを使ったもので、
それ以外に関しては、通話最中のデータのやり取りのような感じでした。
■サンプリングレート
サンプリングレートですが、wikipediaで調べると
耳に聞き取れる範囲を全て取得するには、22kHzくらいまできけるので、その倍の値の44.1kHzを設定すればよい。
以前だと、8kHzとかで、モバイル系は対応をしていたようです。
もちろん容量の問題もありますが、8000に設定をしようかと思います。
自分の好きな値にしてしまうとのちのち互換性に問題がでる可能性があるので
8000 22050 44100
あたりがよさげです。
前に33000くらいのデータを頂いた時に、それに気づかず、不具合を巻き起こした事があります。。
値は割りと決まった値を使うのが一般的かと思います。
■チャンネル
AudioFormat.CHANNEL_CONFIGURATION_DEFAULT デフォルト AudioFormat.CHANNEL_CONFIGURATION_INVALID 構成なし AudioFormat.CHANNEL_CONFIGURATION_MONO モノラル AudioFormat.CHANNEL_CONFIGURATION_STEREO ステレオ
構成なしって言うのが良くわからないのですが、結局マイクで取得など集音が1つなので集音機を接続しないのであればモノラル設定がよいかと思います。
ステレオって右と左で音が違うって言う感じの意味ですよね(謎)
■エンコーディング
エンコーディングに関してですが、ビット数を決める事ができます。
ビット数って言うのが更に不明さったりするのですが、
ENCODING_DEFAULT デフォルト ENCODING_INVALID 構成なし ENCODING_PCM_16BIT 16bit ENCODING_PCM_8BIT 8bit
ですが、ビット数がよくわかたなかったのですが、
http://www.voice-com.net/product/dialogic/voice.html
によりますとビットとは、「1秒間に何回数値化するか?」らしいです。
ここは素直に8bitで良いのかと思います。
16bitに関しては観測とかじっくり聞く人用、と言う認識で。
(不具合の報告もあるので16bitの方がよいかも。。)
■バッファーサイズ
バッファーサイズですが、
http://e-words.jp/w/E38390E38383E38395E382A1.html
に記載されていたのですが、転送速度の差を補う為のデータの保存分。
と言う、更に不明になってしまったのですが。。
意味としては多分、
「運動会で次の徒競走の出場者は後ろにならんでください」
と一緒で、次に取り出すデータを出力待機状態にしたい。
と言う状況だと思います。(意味がますます混乱してしまった人はすいません。無視してください。)
どれだけの量を待機させておくかですが、あんまり大量に待機させる事にすると、重くなるので、
最小量のバッファーサイズにする為の関数が用意されています。
AudioRecord.getMinBufferSize(サンプリングレート,チャンネル,音声フォーマット);
で取得ができるようです。
ですが、8bitだと不具合がおきているような報告もあります。。
もう少し、研究を重ねてみます。。