現在、卒業研究に関するテーマでAndroid Studioを使って、研究しています。それでaudioRecord.read()の使い方をいろいろ調べましたが、あまり結果が出なかったか曖昧な部分が多かったです。そのため、自分が理解できることをここで簡単にまとめます。
Androidで音声処理をするためにAudioRecordクラスを利用しました。録音するため、audioRecord.read()を使うことになります。それの基本の使い方を紹介したいと思います。
まず、録音を開始するため、audioRecorder.startRecording()から始まります。
その次、read(short[] audioData, int offsetInShorts, int sizeInShorts)により録音した音声がbuf配列に入ります。
このメソッドを呼び出したときに"buf"に格納されている値は何かというと、サンプルの配列です。各サンプルはチャンネルの配列です。各チャンネルは、求めたものに応じて、8ビットまたは16ビットの値を持ちます。データはスキップされず、常に固定サイズのフォーマットになります。
したがって、1チャンネルと8ビットを選択した場合、各バイトは1つのサウンドが聞こえます。16ビットを選択した場合、核サウンドは2バイト長です。2つのチャンネルを使用する場合は、サンプルごとにチャンネル1、チャンネル2の順に並べます。
私は使っている16ビットなので何もしゃべらないとき、buf配列に入った値は
[96、0、101、-1、101、2、110、-1、-41、2、-80、0、-117、1、119、-1、………]
になります。
個々の値は、要求された周波数でサンプリングされたときのサウンドデータの振幅です。実験した結果から、0、-1、2、…(奇数番)の値は入力した音声の振幅です。もう一つの数字は何か現時点でまだ理解できません。その数字は勝手に変動します。
あくまで基本です。 パフォーマンス等のより高度な見識が得られればまた記します。間違ったところを指摘お願いします。
Comments
Post a Comment