【发布时间】:2014-06-01 20:14:43
【问题描述】:
我正在尝试播放声音并从手机的麦克风录制,然后将其写入文件(3gp 格式)。
我出于某些测试目的使用了线程。问题是我收到类似
> 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);
}
}
【问题讨论】:
标签: android multithreading file audio io