2016-04-29 17 views
2

マイクアプリケーションを構築しようとしていますが、マイクからのサウンドをスピーカーで直接再生しています。コードを以下に示します。この遅れを避ける方法はありますか?私はc/C++でネイティブコードを追加することでこれを避けることができると聞きましたが、javaから呼び出すことができます。出来ますか?もしそうなら、どのように?マイクからスピーカーへの直接ストリーミングアプリケーション用のオーディオの遅延Android

public class MainActivity extends AppCompatActivity { 
    boolean isRecording; 
    AudioManager am; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
     Record record = new Record(); 
     record.run(); 

    } 
    public class Record extends Thread 
    { 

     static final int bufferSize = 200000; 
     final short[] buffer = new short[bufferSize]; 
     short[] readBuffer = new short[bufferSize]; 

     public void run() { 
      isRecording = true; 
      android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); 
      int buffersize = AudioRecord.getMinBufferSize(11025,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 
      AudioRecord arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,buffersize); 
      AudioTrack atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM); 
      am.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL); 
      atrack.setPlaybackRate(11025); 
      byte[] buffer = new byte[buffersize]; 
      arec.startRecording(); 
      atrack.play(); 
      while(isRecording) { 
       arec.read(buffer, 0, 
         buffersize); 
       atrack.write(buffer, 0, 
         buffer.length); 
      } 
      arec.stop(); 
      atrack.stop(); 
      isRecording = false; 
     } 
    } 
} 
+0

'buffersize'は何になるのですか? – jaket

答えて

1

さてあなたは、あなた自身のネイティブコードを書くのではなく、低レイテンシーのオーディオを持っていると主張してsuperpoweredと呼ばれるこのライブラリを試すことができます。 これがうまくいくと思います。ソースはgit hubでも利用できます。

関連する問題