質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

209閲覧

wavファイルのトリミングをしたいです。

slvg8122

総合スコア6

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/06/04 16:31

前提・実現したいこと

 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問