我正在女巫中创建一个项目,我必须找到录制声音的响度。

无论我调用getMaxAmplitude()多少次,它始终显示0,而通过编写amplitudeDb则始终显示-infinity。

请帮助我。

这是我的代码。

record1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        record[0] = new MediaRecorder();
        record[0].setAudioSource(MediaRecorder.AudioSource.MIC);
        record[0].getMaxAmplitude();
        record[0].setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        record[0].setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        record[0].setOutputFile(FilePath);

        try {
            record[0].prepare();
            record[0].getMaxAmplitude();
        } catch(IOException e) {
            e.printStackTrace();
        }
        try {
            record[0].start();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

});

stop.setOnClickListener(new View.OnClickListener() {@Override
    public void onClick(View v) {
        try {
            record[0].stop();
        }

        catch(Exception e) {
            e.printStackTrace();
        }
        try {
            int amp = record[0].getMaxAmplitude();
            //String ampl = amp.toString();
            int x = 1;
            System.out.println("amp: " + amp);
            System.out.println("hello");
            //double amplitudeDb = 20 * Math.log10((double) Math.abs(amp));
            ampli.setText("" + amp);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        try {
            record[0].release();
        }
        catch(Exception e) {
            e.printStackTrace();
        }

    }

});

最佳答案

最后,我了解了getMaxAmplitude()的逻辑,只是必须在record [0] .stop()之前写record [0] .getMaxAmplitude()

那一切都会好起来的:)

10-08 14:47