Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 记录延迟_Java_Android_Audio_Audio Recording - Fatal编程技术网

Java 记录延迟

Java 记录延迟,java,android,audio,audio-recording,Java,Android,Audio,Audio Recording,我正在Android Studio中编写一个应用程序,需要在两台不同的设备上同步录制音频。我的程序必须根据声源的距离检测两个设备之间的延迟 不幸的是,尽管我的程序有一个非常精确的计时器,并在给定的时间发送recorder.start(),但在音频录制的时间和实际开始之前有一个延迟(小于0.5秒) 有没有办法测量延迟,提前一点开始录音? 如果没有,有没有办法消除延误 我看到了一个关于延迟的问题,但解决方案只是确保录音已经开始,然后开始发声,但这对我没有帮助,因为我必须在两台android设备上同时

我正在Android Studio中编写一个应用程序,需要在两台不同的设备上同步录制音频。我的程序必须根据声源的距离检测两个设备之间的延迟

不幸的是,尽管我的程序有一个非常精确的计时器,并在给定的时间发送recorder.start(),但在音频录制的时间和实际开始之前有一个延迟(小于0.5秒)

有没有办法测量延迟,提前一点开始录音? 如果没有,有没有办法消除延误

我看到了一个关于延迟的问题,但解决方案只是确保录音已经开始,然后开始发声,但这对我没有帮助,因为我必须在两台android设备上同时开始录音。如有任何帮助或建议,将不胜感激

这是我的密码:

    int i = 0;
    while((wavFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/JavaApps/"+"output" + i + ".mp4")).isFile())
        i++;
    finalName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/JavaApps/"+"output" + i + ".mp4";
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
    recorder.setOutputFile(wavFile.getAbsolutePath());
    try {
        recorder.prepare();

    } catch (Exception e) {
        e.printStackTrace();
    }
^所有这些都是在录音开始前的准备工作

    recorder.start();
    try {
        Thread.sleep(duration*1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    recorder.stop();

    recorder.release();
    recorder = null;

^这一部分是在时间达到设定值时发生的。

我对Android音频API的了解还不够深入到细节中,但你可能需要降到一个较低级别的API才能获得这种计时精度。我对Java和Android非常陌生,因此,如果没有合适的指南,我不可能一个人解决所有问题:/希望这里有Android音频API经验的其他人能够参与进来并提供一些信息