Как усилить аудиозапись и подавить фоновый шум в андроиде - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь записать звук с помощью Android AudioRecorder, усилить его (по желанию пользователя, предоставив панель поиска или что-то в этом роде), и я заставил его работать с LoudnessEnhancer, но я слышал много фонового шума с частотой 44100.Я пытался использовать шумоподавитель, но это было бесполезно.Можно ли уменьшить фоновый шум в андроиде?Я знаю, что есть много приложений, устраняющих фоновый шум.Помогите пожалуйста вот мой код:

private int freq = 44100;
    private AudioRecord audioRecord = null;
    private Thread Rthread = null;

    int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.RECORD_AUDIO};

    private AudioTrack audioTrack = null;
    byte[] buffer = new byte[freq];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(!hasPermissions(this, PERMISSIONS)){
            ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
        }

        android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
        final int bufferSize = AudioRecord.getMinBufferSize(freq,
                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT);


        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, freq,
                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                MediaRecorder.AudioEncoder.AMR_NB, bufferSize);

        audioTrack = new AudioTrack(AudioManager.ROUTE_HEADSET, freq,
                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                MediaRecorder.AudioEncoder.AMR_NB, bufferSize,
                AudioTrack.MODE_STREAM);

        LoudnessEnhancer enhancer = new LoudnessEnhancer(audioTrack.getAudioSessionId());
        NoiseSuppressor.create(audioTrack.getAudioSessionId());
        AcousticEchoCanceler.create(audioTrack.getAudioSessionId());

        enhancer.setTargetGain(10000);
        enhancer.setEnabled(true);


        audioTrack.setPlaybackRate(freq);
        buffer = new byte[bufferSize];
        audioRecord.startRecording();
        Log.i("info", "Audio Recording started");
        audioTrack.play();
        Log.i("info", "Audio Playing started");
        Rthread = new Thread(new Runnable() {
            public void run() {
                while (true) {
                    try {
                        audioRecord.read(buffer, 0, bufferSize);
                        audioTrack.write(buffer, 0, buffer.length);

                    } catch (Throwable t) {
                        Log.e("Error", "Read write failed");
                        t.printStackTrace();
                    }
                }
            }
        });
        Rthread.start();
    }


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...