前提・実現したいこと
Android Studio(Java)で、録音終了後に内部ストレージから録音した音声を取得し、その音声ファイルに記録されている音声(=例:「◯◯ありがとう」「ありがとう◯◯」「◯◯ありがとう◯◯」など)から取得したい指定の言葉(例:「ありがとう」)が含まれているかを認識したあと、その指定の言葉(例:「ありがとう」)の音声のみを取得し、端末に保存したいです。
※①部分で処理を書き込みたいです。
発生している問題点・エラーメッセージ
現時点では、他のサイトを調べていますが、録音終了後に音声認識を行う処理が調べても出てこないため、どのようにしていくのかもわからない状態です。
ソースコード
Android
1### MainActivity.java 2import android.content.Intent; 3import android.media.AudioFormat; 4import android.media.AudioRecord; 5import android.media.MediaRecorder; 6import android.os.Bundle; 7import android.os.Environment; 8import android.speech.RecognizerIntent; 9import android.support.v7.app.AppCompatActivity; 10import android.view.View; 11import android.widget.TextView; 12import android.widget.Toast; 13 14import java.io.File; 15import java.util.ArrayList; 16 17public class MainActivity extends AppCompatActivity { 18 19 AudioRecord audioRecord; //録音用のオーディオレコードクラス 20 MediaRecorder mediaRecorder; 21 final static int SAMPLING_RATE = 44100; //オーディオレコード用サンプリング周波数 22 private int bufSize;//オーディオレコード用バッファのサイズ 23 private short[] shortData; //オーディオレコード用バッファ 24 private MyWaveFile wav1 = new MyWaveFile(); 25 private static final int REQUEST_CODE = 0; 26 TextView textView; 27 TextView textView2; 28 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 setContentView(R.layout.activity_main); 33 34 initAudioRecordButton(); 35 initAudioRecord(); 36 37 } 38 39 //AudioRecordの初期化 40 private void initAudioRecord(){ 41 wav1.createFile(Environment.getExternalStorageDirectory() + "/test.wav"); 42 // AudioRecordオブジェクトを作成 43 bufSize = android.media.AudioRecord.getMinBufferSize(SAMPLING_RATE, 44 AudioFormat.CHANNEL_IN_MONO, 45 AudioFormat.ENCODING_PCM_16BIT); 46 audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 47 SAMPLING_RATE, 48 AudioFormat.CHANNEL_IN_MONO, 49 AudioFormat.ENCODING_PCM_16BIT, 50 bufSize); 51 52 shortData = new short[bufSize / 2]; 53 54 // コールバックを指定 55 audioRecord.setRecordPositionUpdateListener(new AudioRecord.OnRecordPositionUpdateListener() { 56 // フレームごとの処理 57 @Override 58 public void onPeriodicNotification(AudioRecord recorder) { 59 // TODO Auto-generated method stub 60 audioRecord.read(shortData, 0, bufSize / 2); // 読み込む 61 wav1.addBigEndianData(shortData); // ファイルに書き出す 62 } 63 64 @Override 65 public void onMarkerReached(AudioRecord recorder) { 66 // TODO Auto-generated method stub 67 68 } 69 }); 70 // コールバックが呼ばれる間隔を指定 71 audioRecord.setPositionNotificationPeriod(bufSize / 2); 72 } 73 74 /** 75 * オーディオレコード用のボタン初期化 76 */ 77 private void initAudioRecordButton(){ 78 View.OnClickListener startButtonClickListener = new View.OnClickListener() { 79 @Override 80 public void onClick(View view) { 81 startAudioRecord(); 82 83 84 } 85 }; 86 findViewById(R.id.startButton).setOnClickListener(startButtonClickListener); 87 88 View.OnClickListener stopButtonClickListener = new View.OnClickListener() { 89 @Override 90 public void onClick(View view) { 91 stopAudioRecord(); 92 93 } 94 }; 95 findViewById(R.id.stopButton).setOnClickListener(stopButtonClickListener); 96 97// playButton.setOnClickListener(new View.OnClickListener() { 98// @Override 99// public void onClick(View view) { 100// playRecord(); 101// } 102// }); 103 } 104 105 private void startAudioRecord(){ 106 audioRecord.startRecording(); 107 audioRecord.read(shortData, 0, bufSize/2); 108 } 109 110 //オーディオレコードを停止する 111 private void stopAudioRecord(){ 112 audioRecord.stop(); 113 File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.wav"); 114 if(file.exists()){ 115 MediaRecorder mediaRecorder = new MediaRecorder(); 116 mediaRecorder.start(); 117 System.out.println("あります"); 118 System.out.println(file); 119 ①**//↓ここに処理を書き込みたいです。↓//** 120 //fileの音声から言葉を認識する 121 122 //認識した音声から「ありがとう」がふくまれているのか 123 124 //「ありがとう」が含まれていれば、「ありがとう」を取得し、保存 125 126 ①**//↑ここに処理を書き込みたいです↑//** 127 }else{ 128 System.out.println("ありません"); 129 } 130 } 131} 132
あなたの回答
tips
プレビュー