在实现钢琴软件的录音过程中,出现java.lang.RuntimeException: setAudioSource failed报错。
好多资料说需要在AndroidManifest.xml文件中增加如下配置以授予程序录制声音的权限:
<uses-permission
android:name="android.permission.RECORD_AUDIO">
</uses-permission>
添加之后,依旧出现如上报错,考虑到可能跟SDcard有关系,于是又增加了以下语句:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
问题解决,可以实现正常录音。
录音部分主要JAVA代码:
recordStop = (ImageButton) findViewById(R.id.button1);
recordStopText=(TextView) findViewById(R.id.textView2);
recordStop.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
count++;
int i=count%2;
switch (i)
{
// 开始录音
case 1:
recordStopText.setText(" Stop");
if (!Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))
{
Toast.makeText(NewPianoActivity.this
, "SD卡不存在,请插入SD卡!"
, 5000)
.show();
return;
}
try
{
// 创建保存录音的音频文件
soundFile = new File(Environment
.getExternalStorageDirectory()
.getCanonicalFile() + "/Recondsound.amr");
mRecorder = new MediaRecorder();
// 设置录音的声音来源
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置录制的声音的输出格式(必须在设置声音编码格式之前设置)
mRecorder.setOutputFormat(MediaRecorder
.OutputFormat.THREE_GPP);
// 设置声音编码的格式
mRecorder.setAudioEncoder(MediaRecorder
.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(soundFile.getAbsolutePath());
mRecorder.prepare();
// 开始录音
mRecorder.start();
}
catch (Exception e)
{
e.printStackTrace();
}
break;
// 按两次停止录音 case 0:
recordStopText.setText(" Record");
try
{
// 停止录音
mRecorder.stop();
// 释放资源
mRecorder.release();
mRecorder = null;
}
catch(Exception e)
{
e.printStackTrace();
}
break;
}
初始按钮状态: 点击一次后: 再次点击(录音停止):