目次へ
声を録音したら、すぐにその声で返事をしてくれるアプリを作りたかったので、 まずは、録音と再生のしかたを、忘れないようにまとめておきます。
今後、これを変更して、「こんにちは」というと、ちょっと違う声で「こんにちは」と 同じ言葉をしゃべってくれるアプリをつくりたいのですが、まだ、いろいろわからないことだらけです。
■■■■音声の録音と再生■■■■
録音はMediaRecorder、再生はMediaPlayerを使います。下のような画面が表示され、開始ボタンで録音開始、終了ボタンで録音終了、再生ボタンで今録音したものが再生されます。
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.View;
import android.widget.TextView;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private boolean isRecording = false;
private TextView text;
private MediaRecorder recorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//textは説明を表示しているTextViewです
text = (TextView) findViewById(R.id.text1);
}
//-------- 開始ボタンを押したときの処理
public void onStart(View view) {
if (isRecording) return;
//-------- 保存先 「内部ストレージ\test.3gp」ができる
String path = Environment.getExternalStorageDirectory() + "/test.3gp";
//-------- Recorder作成
recorder = new MediaRecorder();
//-------- オーディオソースをマイクとする
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//-------- ファイルのフォーマットを3GPPとする
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//-------- エンコーダをデフォルトとする
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//-------- 出力先ファイル名指定
recorder.setOutputFile(path);
//-------- レコーディング
try {
//-------- 録音開始するには prepare,startを呼び出す
recorder.prepare();
recorder.start();
isRecording = true;
text.setText("isRecording");
} catch (IOException e) {
e.printStackTrace();
}
}
//-------- 終了ボタンを押したときの処理
public void onStop(View view) {
if (!isRecording) {
text.setText("録音中ではありません");
return;
}
//-------- 終了には stop,reset,releaseを呼び出す
recorder.stop();
recorder.reset();
recorder.release();
isRecording = false;
text.setText("録音終了");
}
//-------- 再生ボタンを押したときの処理
public void onPlay(View view) {
VoicePlayer player = new VoicePlayer();
player.play();
}
}
|
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Environment;
import android.widget.TextView;
import java.io.IOException;
public class VoicePlayer implements MediaPlayer.OnCompletionListener {
private MediaPlayer player = new MediaPlayer();
private String path;
public VoicePlayer() {
//-------- 再生が終わった時のリスナを設定
player.setOnCompletionListener(this);
//-------- 再生ボリューム 左、右を0.0f~1.0fで設定
player.setVolume(1.0f, 1.0f);
path = Environment.getExternalStorageDirectory() + "/test.3gp";
}
//-------- 再生
public void play() {
try {
player.setDataSource(path);
//-------- 再生するには、prepare、startを呼び出す
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
}
//-------- 再生が終わった時に呼び出される
public void onCompletion(MediaPlayer mp) {
//-------- 終了したら、stop、releaseを呼び出す
player.stop();
player.release();
}
}
|
にほんブログ村
