Android - извлеките один канал из стерео .mp3, примените его через оба канала AudioStream - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь загрузить файл .mp3 и различать левый и правый каналы. Я хотел бы скопировать данные из левого канала и создать AudioStream, который воспроизводит данные из левого канала через левый и правый каналы.

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

    InputStream inputStream = getApplicationContext().getResources().openRawResource(R.raw.flume);

    soundBytes1 = new byte[inputStream.available()];
    soundBytes1 = toByteArray(inputStream);



    public byte[] toByteArray(InputStream in) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    int read = 0;
    byte[] buffer = new byte[1024];
    while (read != -1) {
        read = in.read(buffer);
        if (read != -1)
            out.write(buffer,0,read);
    }
    out.close();
    return out.toByteArray();
}

Я бы предпочел иметь возможность выполнять этот процесс с любым файлом .mp3. Нужно ли преобразовывать звук в какой-либо другой формат для различения каналов?

1 Ответ

0 голосов
/ 29 апреля 2018

Необходимо ли преобразовывать звук в какой-либо другой формат для различения каналов?

Да. MP3, как и большинство форматов с потерями, объединяет аудиоканалы вместе (в большинстве случаев) и эффективно сохраняет различия между ними. Это экономит значительную полосу пропускания, поскольку левая и правая дорожки обычно очень похожи. Сохранение этой полосы пропускания увеличивает общее качество для данного битрейта.

Следовательно, вы не можете просто прочитать кадр для одного канала, а затем прочитать кадр для следующего канала. Сначала вы должны декодировать аудио MP3 обратно в PCM.

...