소리를 재생하여 휴대 전화의 마이크에서 녹음하고 파일 (3gp 형식)에 기록하려고합니다.
일부 테스트 목적의 스레드를 사용했습니다. 문제가 나는 어떤 시스템 파일도 접근하려고하지 않고 있지만열기 실패 : EROFS 읽기 전용 파일 시스템 android
> caused by libcore.io.ErrnoException: open failed: EROFS (read only file system)
과 같은 오류가 발생합니다. 주위를 둘러 보았습니다. this :
쓰기/읽기 권한을 모두 추가했지만 여전히 작동하지 않습니다.
public void startRecording(){
MediaRecorder mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"xfile.3gp");
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
mRecorder.start();
} catch (Exception e) {
e.printStackTrace();
}
}
및 스레드 블록 :
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread thread=new Thread(new Runnable()
{
public void run()
{
try
{
genTone();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.post(new Runnable()
{
public void run()
{
playSound();
} });
}
});
thread.start();
사운드 방법을 플레이
void playSound(){
AudioTrack audioTrack= null;
try{
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length, AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
audioTrack.play();
Thread thr=new Thread(new Runnable(){
public void run(){
startRecording();
}
});
thr.start();
}
catch(Exception e)
{
System.out.print(e);
}
}
업데이트 된 답변보기 – Ne0
오, 알았어. 나는 그것에 신경 쓰지 않았다. 고맙습니다. 이제 파일이 나타나지만 재생할 수 없습니다. 문제가 여전히 파일이나 스레드에 있다고 생각합니까? – hanaa
파일에 데이터가있는 경우 파일이 잘되어야하며 플레이어가 될 수 있습니다. 크기가 0이면 뭔가 잘못되었다는 의미입니다. – Ne0