Oi pesssoal, =)
Alguém pode me tirar uma dúvida? Quero salvar uma gravação de audio em meu sd card do android.
Até ai tudo bem, consigo fazer. Mas percebi que ele não salva corretamente o que eu falo, tem um corte, como se fosse um DELAY para iniciar a gravação.
Eu devo inicializar a gravação em uma Thread() na classe que importa meu AudioRecorder?
Existe algum método que diminua este DELAY?
AudioRecorder.class
import java.io.File;
import java.io.IOException;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.Handler;
public class AudioRecorder implements Runnable {
private final MediaRecorder mr = new MediaRecorder();
private final int DELAY = 5500;
private final String path;
private boolean gravando = false;
public AudioRecorder(String titulo) {
this.path = checkPath(titulo);
}
private String checkPath(String titulo) {
if(!titulo.startsWith("/")) {
titulo = "/" + titulo;
}
if(!titulo.contains(".3gp")) {
titulo += ".3gp";
}
return Environment.getExternalStorageDirectory().getAbsolutePath() + titulo;
}
public void start() throws IOException {
String state = android.os.Environment.getExternalStorageState();
if(!state.equals(android.os.Environment.MEDIA_MOUNTED)) {
throw new IOException("SD Card ainda não foi carregado... Ele está "+ state + ".");
}
File dir = new File(path).getParentFile();
if(!dir.exists() && !dir.mkdirs()) {
throw new IOException("Diretorio para o arquivo não pode ser criado...");
}
//Tipo de gravação = Microfone.
mr.setAudioSource(MediaRecorder.AudioSource.MIC);
//Formato da nossa gravação = .3gp [Padrão Android].
mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//Encoder.
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//Informando local aonde salvaremos o arquivo.
// path = "/mnt/sdcard/NOME_DO_ARQUIVO.3gp
mr.setOutputFile(path);
//Preparando o MediaRecorder.
mr.prepare();
//Gravando...
mr.start();
new Handler().postDelayed(this, DELAY);
}
public void stop() throws IOException {
mr.stop();
mr.release();
}
//Método Runnable que dará um stop() na gravação depois de 5 seg de gravação.
@Override
public void run() {
try {
stop();
} catch (IOException e) {
e.printStackTrace();
}
}
}
