1

我正在开发一个音频应用程序,但是在尝试创建 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");

}
}

所以当我打电话时

记录对象.记录();

该应用程序因错误而崩溃:

?:??: 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)

所以

  1. 是什么让我的应用程序崩溃,

  2. 为什么我的 logCat 显示为 ?问号??,

谢谢!

4

1 回答 1

2

“崩溃”的原因是您的应用程序IllegalStateException在尝试(并且失败)创建文件时抛出 am。为什么你得到一个IOException是任何人的猜测。你把证据扔了!(提示:使用IllegalStateException包含异常参数的构造函数...并通过e

您的 logcat 输出中的问号可以通过以下方式解释:

于 2013-01-02T03:01:30.817 回答