Как воспроизвести несколько файлов PCM одновременно с помощью AudioTrack - PullRequest
0 голосов
/ 01 июля 2019

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

Вот код, который я использую для воспроизведения звука из файла .pcm

class PlayThread extends Thread {
    public void run() {
        try {
            System.out.println("~~Playing audio");
            byte[] buffer = new byte[playBufSize];
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(pcmFile), playBufSize);

            audioTrack.play();

            int readSize = -1;
            while (isPlaying && (readSize = bis.read(buffer)) != -1) {
                audioTrack.write(buffer, 0, readSize);
            }
            audioTrack.stop();
            MainActivity main = (MainActivity) ctx;
            main.audioStopped();
            bis.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

Я запускаю это с помощью этой функции:

   public void startPlaying()
    {
        isPlaying = true;
        new PlayThread().start();
    }

pcmФайлполный путь к аудиофайлу.Однако я могу записать 4 из них (channel0.pcm, channel1.pcm, channel2.pcm и channel3.pcm).Прямо сейчас, когда я нажимаю play, он играет только один.Как я могу настроить этот код для одновременного воспроизведения нескольких файлов?

Бонус, если вы можете сказать мне, как это зациклить, это тоже очень поможет.Я хотел бы, чтобы эти файлы постоянно зацикливались, пока поток не остановился.

...