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

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

ただいまの
回答率

90.33%

  • Android Studio

    3909questions

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

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 301

slvg8122

score 2

 前提・実現したいこと

Android Studio(Java)で、録音終了後に内部ストレージから録音した音声を取得し、その音声ファイルに記録されている音声(=例:「◯◯ありがとう」「ありがとう◯◯」「◯◯ありがとう◯◯」など)から取得したい指定の言葉(例:「ありがとう」)が含まれているかを認識したあと、その指定の言葉(例:「ありがとう」)の音声のみを取得し、端末に保存したいです。
※①部分で処理を書き込みたいです。
 

 発生している問題点・エラーメッセージ

現時点では、他のサイトを調べていますが、録音終了後に音声認識を行う処理が調べても出てこないため、どのようにしていくのかもわからない状態です。

 ソースコード

### MainActivity.java
import android.content.Intent;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.speech.RecognizerIntent;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    AudioRecord audioRecord; //録音用のオーディオレコードクラス
    MediaRecorder mediaRecorder;
    final static int SAMPLING_RATE = 44100; //オーディオレコード用サンプリング周波数
    private int bufSize;//オーディオレコード用バッファのサイズ
    private short[] shortData; //オーディオレコード用バッファ
    private MyWaveFile wav1 = new MyWaveFile();
    private static final int REQUEST_CODE = 0;
    TextView textView;
    TextView textView2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initAudioRecordButton();
        initAudioRecord();

    }

    //AudioRecordの初期化
    private void initAudioRecord(){
        wav1.createFile(Environment.getExternalStorageDirectory() + "/test.wav");
        // AudioRecordオブジェクトを作成
        bufSize = android.media.AudioRecord.getMinBufferSize(SAMPLING_RATE,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT);
        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                SAMPLING_RATE,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT,
                bufSize);

        shortData = new short[bufSize / 2];

        // コールバックを指定
        audioRecord.setRecordPositionUpdateListener(new AudioRecord.OnRecordPositionUpdateListener() {
            // フレームごとの処理
            @Override
            public void onPeriodicNotification(AudioRecord recorder) {
                // TODO Auto-generated method stub
                audioRecord.read(shortData, 0, bufSize / 2); // 読み込む
                wav1.addBigEndianData(shortData); // ファイルに書き出す
            }

            @Override
            public void onMarkerReached(AudioRecord recorder) {
                // TODO Auto-generated method stub

            }
        });
        // コールバックが呼ばれる間隔を指定
        audioRecord.setPositionNotificationPeriod(bufSize / 2);
    }

    /**
     * オーディオレコード用のボタン初期化
     */
    private void initAudioRecordButton(){
        View.OnClickListener startButtonClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startAudioRecord();


            }
        };
        findViewById(R.id.startButton).setOnClickListener(startButtonClickListener);

        View.OnClickListener stopButtonClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stopAudioRecord();

            }
        };
        findViewById(R.id.stopButton).setOnClickListener(stopButtonClickListener);

//        playButton.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                playRecord();
//            }
//        });
    }

    private void startAudioRecord(){
        audioRecord.startRecording();
        audioRecord.read(shortData, 0, bufSize/2);
    }

    //オーディオレコードを停止する
    private void stopAudioRecord(){
        audioRecord.stop();
        File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.wav");
        if(file.exists()){
            MediaRecorder mediaRecorder = new MediaRecorder();
            mediaRecorder.start();
            System.out.println("あります");
            System.out.println(file);
            ①**//↓ここに処理を書き込みたいです。↓//**
            //fileの音声から言葉を認識する

            //認識した音声から「ありがとう」がふくまれているのか

            //「ありがとう」が含まれていれば、「ありがとう」を取得し、保存

       ①**//↑ここに処理を書き込みたいです↑//**
        }else{
            System.out.println("ありません");
        }
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Android Studio

    3909questions

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