0

Я сделал аудиозапись в режиме реального времени, а затем воспроизвел, но когда я начал , это звучало очень шумно и звучит. поэтому я хочу, чтобы мой голос только с чистым тономдля записи звука, а затем для воспроизведения с помощью AudioRecord, AudioTrack.trouble

им реализации этого приложения с реверберацией, усиление низких частот, эквалайзер и визуализатора эффектов

я просто хочу, чтобы чистые звуки без этих эффектов

, как для этой цели приложения версия, по крайней мере, для Android 2.3.3 (api 10)

Вопрос: как мне изменить эту существенную часть кода? (Для audioRecord.startRecording, audioTrack.record, audioTrack.write)

вот мой фрагмент кода, как показано ниже:

/////////////////// /////////////////

private void main() { 

     for (;;) { 

      Log.d("AFX", "Starting audio thread"); 
      this.audioRecord.startRecording(); 
      this.audioTrack.play(); 

      int i; 

      if (!this.running) { 
       this.audioRecord.stop(); 
       this.audioTrack.stop(); 
       this.audioRecord.release(); 
       return; 
      } 

      i = this.audioRecord.read(this.buffer, 0, this.chunkSize); 
      Log.v("AudioRecord", "read " + this.chunkSize + "bytes"); 

      try { 

       // Log.d("AFX", "Starting audio thread"); 
       this.audioRecord.startRecording(); 
       this.audioTrack.play(); 
       Log.d("AFX", "Starting audio thread"); 

       boolean flag = this.running; // df value : false 

       if (!flag) { 
        this.audioRecord.stop(); 
        this.audioTrack.stop(); 
        // this.audioRecord.release(); // added 
        // this.audioTrack.release(); // added 
        Log.d("AFX", "Exiting audio thread"); 
        return; 
       } 

       i = this.audioRecord.read(this.buffer, 0, this.chunkSize); 
       Log.v("AudioRecord", "read " + this.chunkSize + "bytes"); 

       if (i < 0) { 
        Log.e("AFX", "Record error: " + i); 
        this.running = false; 
        continue; 
        // break; 
       } 
       if (!this.running) { 
        continue; 
        // break; 
       } 

      } finally { 
       this.audioRecord.stop(); 
       // this.audioRecord.release(); // added 
       this.audioTrack.stop(); 
       // this.audioTrack.release(); // added 
      } 

      this.audioTrack.write(this.buffer, 0, i); 
      // Log.d("AFX", "Starting audio thread"); 
      // this.audioRecord.startRecording(); 
      // this.audioTrack.play(); 
     } 
    } 

любой idea'll быть оценены

спасибо много

ответ

2

Попробуйте AudioEffects.

ar = new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bs * 10); 

     if(AutomaticGainControl.isAvailable()) 
     { 
      AutomaticGainControl agc =AutomaticGainControl.create(ar.getAudioSessionId()); 
      //agc.g 
      Log.d("AudioRecord", "AGC is " + (agc.getEnabled()?"enabled":"disabled")); 
      agc.setEnabled(true); 
      Log.d("AudioRecord", "AGC is " + (agc.getEnabled()?"enabled":"disabled" +" after trying to enable")); 
     }else 
     { 
      Log.d("AudioRecord", "AGC is unavailable"); 
     } 

     if(NoiseSuppressor.isAvailable()){ 
      NoiseSuppressor ns = NoiseSuppressor.create(ar.getAudioSessionId()); 
      Log.d("AudioRecord", "NS is " + (ns.getEnabled()?"enabled":"disabled")); 
      ns.setEnabled(true); 
      Log.d("AudioRecord", "NS is " + (ns.getEnabled()?"enabled":"disabled" +" after trying to disable")); 
     }else 
     { 
      Log.d("AudioRecord", "NS is unavailable"); 
     } 
     if(AcousticEchoCanceler.isAvailable()){ 

      AcousticEchoCanceler aec = AcousticEchoCanceler.create(ar.getAudioSessionId()); 
      Log.d("AudioRecord", "AEC is " + (aec.getEnabled()?"enabled":"disabled")); 
      aec.setEnabled(true); 
      Log.d("AudioRecord", "AEC is " + (aec.getEnabled()?"enabled":"disabled" +" after trying to disable")); 

     }else 
     { 
      Log.d("AudioRecord", "aec is unavailable"); 
     } 

Они работают на api 16+, но у них есть также эквалайзер, усиление баса и другие вещи, которые вы упоминаете. Установите их перед началом записи.

+0

мое приложение предназначено, по крайней мере, для android 2.3.3 (API 10). @Raiv –

0

В вашем вопросе вы немного неспецифичны относительно типа шума, который вы испытываете. Но если вы записываете и воспроизводите тот же звук, вы, вероятно, испытаете серьезную обратную связь или эхо. Обычно очень громкий звук высокого тона.

Android разработал эхоподавление для решения этой проблемы. Она включена по умолчанию, если вы используете AudioSource.VOICE_COMMUNICATION, как это:

recorder = new AudioRecord(AudioSource.VOICE_COMMUNICATION, 
          44100, 
          AudioFormat.CHANNEL_IN_MONO, 
          AudioFormat.ENCODING_PCM_16BIT, 
          n); 

Кроме того, 44100 является единственной частотой дискретизации, которая гарантирована работать на всех Android устройств. Не используйте ничего, иначе вы можете получить странные результаты.

+0

этот шум очень нестабилен, чтобы проверить его, я хочу, чтобы вы напрямую играли в моем приложении, если это возможно. hmm @TimmyBrolin –

+0

VOICE_COMMUNICATION доступен с API уровня 11. Вы можете использовать VOICE_CALL в качестве резервного. Обычно он должен иметь эхоподавление, но не гарантируется. Он доступен с API уровня 4. VOICE_COMMUNICATION лучше определен, поэтому он ведет себя более единообразно на разных устройствах. http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html#VOICE_COMMUNICATION –

+0

целевая версия этого приложения предназначена, по крайней мере, для api 10+ (android 2.3.3 over). : (, но я чувствую себя благодарным за вашу идею! –

 Смежные вопросы

  • Нет связанных вопросов^_^