音声を使って楽しげなものを作りたい。AudioRecord研究

最近は、なぜか音声認識機能が面白いのではないかと、思いました。

なので、ちょっと数回は音声認識の記事を書こうかと思います!

 

音声を利用する時に

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(サンプリングレート,チャンネル,音声フォーマット);

で取得ができるようです。

参照:android developpers

ですが、8bitだと不具合がおきているような報告もあります。。

stack overflow

もう少し、研究を重ねてみます。。

前後の記事

前の記事:

次の記事:

関連の記事

コメント

:D

AudioRecordをnewする時の引数が多いですよ。
>エンコーディング,
>ビット,
説明を見る感じだと上記が被っているのでは…

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑