Воспроизведение аудио с микрофона в режиме реального времени

У меня есть функция, которая записывает аудио и сохраняет его в файл. Вот как это выглядит:

private void startRecord(){

      File file = new File(Environment.getExternalStorageDirectory(), "test.pcm"); 

      int sampleFreq = (Integer)spFrequency.getSelectedItem();

      try {
       file.createNewFile();

       OutputStream outputStream = new FileOutputStream(file);
       BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
       DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream);

       int minBufferSize = AudioRecord.getMinBufferSize(sampleFreq, 
         AudioFormat.CHANNEL_CONFIGURATION_MONO, 
         AudioFormat.ENCODING_PCM_16BIT);

       short[] audioData = new short[minBufferSize];

       AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
         sampleFreq,
         AudioFormat.CHANNEL_CONFIGURATION_MONO,
         AudioFormat.ENCODING_PCM_16BIT,
         minBufferSize);

       audioRecord.startRecording();

       while(recording){
        int numberOfShort = audioRecord.read(audioData, 0, minBufferSize);
        for(int i = 0; i < numberOfShort; i++){
         dataOutputStream.writeShort(audioData[i]);
        }

       }

       audioRecord.stop();
       dataOutputStream.close();

      } catch (IOException e) {
       e.printStackTrace();
      }

     }

У меня есть другая функция, названная playrecord, которая воспроизводит этот записанный звук:

void playRecord(){

      File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");

            int shortSizeInBytes = Short.SIZE/Byte.SIZE;

      int bufferSizeInBytes = (int)(file.length()/shortSizeInBytes);
      short[] audioData = new short[bufferSizeInBytes];

      try {
       InputStream inputStream = new FileInputStream(file);
       BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
       DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);

       int i = 0;
       while(dataInputStream.available() > 0){
        audioData[i] = dataInputStream.readShort();
        i++;
       }

       dataInputStream.close();

       int sampleFreq = (Integer)spFrequency.getSelectedItem();

       AudioTrack audioTrack = new AudioTrack(
         AudioManager.STREAM_MUSIC,
         sampleFreq,
         AudioFormat.CHANNEL_CONFIGURATION_MONO,
         AudioFormat.ENCODING_PCM_16BIT,
         bufferSizeInBytes,
         AudioTrack.MODE_STREAM);

       audioTrack.play();
       audioTrack.write(audioData, 0, bufferSizeInBytes);


      } catch (FileNotFoundException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
     }

Эти две функции работают нормально независимо. Если я вызываю startRecord (), а затем вызываю playRecord, я могу слышать звук.Но я хочу воспроизвести звук в РЕАЛЬНОМ ВРЕМЕНИ, т. Е. Как только я начну записывать, я хочу, чтобы звук воспроизводился. Что я должен сделать, чтобы достичь этого?

Ответы на вопрос(1)

Ваш ответ на вопрос