我正在制作音频应用, 但是在尝试创建PCM文件时崩溃了,这里是代码:
public class RecordPCM {
public void record() {
Log.d("mensaje","Recording testeo started");
int frequency = 11025;
//int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int channelConfiguration = AudioFormat.CHANNEL_IN_MONO; //cambiado por el de arriba por deprecado
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/reverseme.pcm");
// Delete any previous recording.
if (file.exists()) {
file.delete();
Log.d("mensaje","file exists!!!");
}
// Create the new file.
try {
file.createNewFile();
} catch (IOException e) {
throw new IllegalStateException("Failed to create :::: " + file.toString());
}
try {
// Create a DataOuputStream to write the audio data into the saved file.
OutputStream os = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);
// Create a new AudioRecord object to record the audio.
int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
frequency, channelConfiguration,
audioEncoding, bufferSize);
short[] buffer = new short[bufferSize];
audioRecord.startRecording();
boolean isRecording = false; //metido para arreglar
while (isRecording) {
int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
for (int i = 0; i < bufferReadResult; i++)
dos.writeShort(buffer[i]);
}
audioRecord.stop();
dos.close();
} catch (Throwable t) {
Log.d("mensaje","Recording Failed");
}
}
public void copio(){
Log.d("mensaje","Recording testeo");
}
}
所以当我打电话
recordObject.record();
应用程序因错误而崩溃:
?:??: W/?(?): FATAL EXCEPTION: main
?:??: W/?(?): java.lang.IllegalStateException: Could not execute method of the activity
?:??: W/?(?): at android.view.View$1.onClick(View.java:3597)
?:??: W/?(?): at android.view.View.performClick(View.java:4202)
?:??: W/?(?): at android.view.View$PerformClick.run(View.java:17340)
?:??: W/?(?): at android.os.Handler.handleCallback(Handler.java:725)
?:??: W/?(?): at android.os.Handler.dispatchMessage(Handler.java:92)
?:??: W/?(?): at android.os.Looper.loop(Looper.java:137)
?:??: W/?(?): at android.app.ActivityThread.main(ActivityThread.java:5039)
?:??: W/?(?): at java.lang.reflect.Method.invokeNative(Native Method)
?:??: W/?(?): at java.lang.reflect.Method.invoke(Method.java:511)
?:??: W/?(?): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
?:??: W/?(?): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
?:??: W/?(?): at dalvik.system.NativeStart.main(Native Method)
?:??: W/?(?): Caused by: java.lang.reflect.InvocationTargetException
?:??: W/?(?): at java.lang.reflect.Method.invokeNative(Native Method)
?:??: W/?(?): at java.lang.reflect.Method.invoke(Method.java:511)
?:??: W/?(?): at android.view.View$1.onClick(View.java:3592)
?:??: W/?(?): ... 11 more
?:??: W/?(?): Caused by: java.lang.IllegalStateException: Failed to create :::: /storage/emulated/0/reverseme.pcm
?:??: W/?(?): at com.hyper.reverspeech.RecordPCM.record(RecordPCM.java:48)
?:??: W/?(?): at com.hyper.reverspeech.ReverSpeechActivity.buttonRecPressed(ReverSpeechActivity.java:20)
所以
是什么让我的应用程序崩溃,
为什么我的logCat会显示?问号??,
谢谢!
答案 0 :(得分:2)
“崩溃”的原因是您的应用程序在尝试(并且失败)创建文件时抛出IllegalStateException
。为什么你得到IOException
是任何人的猜测。你丢掉了证据! (提示:使用包含异常参数的IllegalStateException
构造函数...并传递e
)
logcat输出中的问号可以解释为: