java - Android:使用 MediaRecorder 中的 getMaxAmplitude(),同时使用 TarsosDSP 中的 PercussionOnsetDetector

标签 java android audio mediarecorder tarsosdsp

我试图从它检测到的每个拍手中获取振幅读数,但每次它检测到拍手时,我总是得到 IllegalStateException0来自getMaxAmplitude() 。我做错了什么吗?有没有解决的办法?请告诉我!

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Checks Permission
    checkPermission(Manifest.permission.RECORD_AUDIO,REQUEST_RECORD_AUDIO_PERMISSION);

    double threshold = 8;
    double sensitivity = 45;

    PercussionOnsetDetector mPercussionDetector = new PercussionOnsetDetector(22050, 1024,
            new OnsetHandler() {

                @Override
                public void handleOnset(double time, double salience) {
                   /* try {
                        new MediaRecorder().setAudioSource(MediaRecorder.AudioSource.MIC);
                        new MediaRecorder().setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                        new MediaRecorder().setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                        new MediaRecorder().setOutputFile("dev/null");
                        new MediaRecorder().prepare();
                        new MediaRecorder().start();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } */

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            System.out.println(new MediaRecorder().getMaxAmplitude());
                            System.out.println("YAAAYYY");
                        }
                    });
                }
            }, sensitivity, threshold);

    dispatcher.addAudioProcessor(mPercussionDetector);
    new Thread(dispatcher,"Audio Dispatcher").start();
}

最佳答案

检查javadoc for MediaRecorder#getMaxAmplitude method
它说应该先调用 setAudioSource 方法。
请注意本 javadoc 开头的状态和使用示例。 getMaxAmplitude 只是一个 getter,它不执行实际记录。

关于java - Android:使用 MediaRecorder 中的 getMaxAmplitude(),同时使用 TarsosDSP 中的 PercussionOnsetDetector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58947471/

相关文章:

android - 在设备中运行 React Native 应用程序

android - 音频延迟问题

android - 在没有用户交互的情况下在设备中运行 Android apk

java - 单击下一步播放新的音轨

java - Java AudioClip-没有声音,没有错误

java - 如何在单个 JOptionPane 方法中输出数组的所有值?

java - Java 格式验证数字?

qt - QML:SoundEffect 不起作用,Audio 起作用

java - Hazelcast为Map添​​加索引,其中不同类的对象实现相同的接口(interface)

java.lang.IllegalStateException : Cannot access request header fields after connection is set 错误