gpt4 book ai didi

Android - 如何录制简单的声音 fragment ?

转载 作者:行者123 更新时间:2023-12-03 02:22:59 25 4
gpt4 key购买 nike

编辑:当我第二次单击录制按钮(停止录制)时,它会强制关闭应用程序。该事件的具体代码:

else if(isrec) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
isrec = false;
Toast.makeText( getApplicationContext(),"No longer recording!",Toast.LENGTH_SHORT).show();
}

(原始问题):
我在尝试让应用程序在单击按钮时录制声音时遇到问题。我已经包含了代码......这是我的 Toasts 告诉我的:
  • 在 setAudioSource
  • 之后
  • 在 setOutputFile
  • 之后
  • isrec 不正确
  • 尝试...
  • 捕获 IO 异常...

  • 任何帮助是极大的赞赏。
    private OnClickListener micListener = new OnClickListener() {
    boolean isrec = false;
    public void onClick(View v) {
    MediaRecorder recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    Toast.makeText( getApplicationContext(),"after setAudioSource",Toast.LENGTH_SHORT).show();
    recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
    File outputFile = null;
    outputFile = getFileStreamPath("output.amr");
    recorder.setOutputFile(outputFile.getAbsolutePath());

    Toast.makeText( getApplicationContext(),"after setOutputFile",Toast.LENGTH_SHORT).show();
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    if(!isrec) {
    Toast.makeText( getApplicationContext(),"isrec is not true",Toast.LENGTH_SHORT).show();
    try {
    Toast.makeText( getApplicationContext(),"trying...",Toast.LENGTH_SHORT).show();
    recorder.prepare();
    recorder.start();
    isrec = true;
    Toast.makeText( getApplicationContext(),"Recording!",Toast.LENGTH_SHORT).show();
    } catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Toast.makeText( getApplicationContext(),"caught IllegalState Exception...",Toast.LENGTH_SHORT).show();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Toast.makeText( getApplicationContext(),"caught IO Exception...",Toast.LENGTH_SHORT).show();
    }
    } else if(isrec) {
    recorder.stop();
    recorder.reset();
    recorder.release();
    recorder = null;
    isrec = false;
    Toast.makeText( getApplicationContext(),"No longer recording!",Toast.LENGTH_SHORT).show();
    }
    }
    };

    最佳答案

    首先,您应该使用 bool 值 对于 isrec而不是字符串

    那 :

     FileDescriptor fileName = null;
    recorder.setOutputFile(fileName);

    这意味着您要记录在一个为空的文件上

    如果您创建一个文件,并将其作为记录器的参数传递,它应该可以工作。

    编辑 : 当你想停止录音机时,有时释放不起作用。
    所以,只要保留 stop()reset()

    关于Android - 如何录制简单的声音 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386169/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com