Как преобразовать аудиофайл из stereo в mono на android?

Пользователь

от urban_will , в категории: Другие , месяц назад

Как преобразовать аудиофайл из stereo в mono на android?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от dayna , 25 дней назад

@urban_will 

Чтобы преобразовать аудиофайл из стерео в моно на устройствах Android, вы можете использовать библиотеку Android MediaCodec.


Вот пример кода, который демонстрирует, как это сделать:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import android.media.MediaCodec;
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.media.MediaMuxer;

import java.io.IOException;
import java.nio.ByteBuffer;

public class AudioConverter {

    public static void convertToMono(String inputPath, String outputPath) throws IOException {
        MediaExtractor extractor = new MediaExtractor();
        extractor.setDataSource(inputPath);

        int audioTrackIndex = getAudioTrackIndex(extractor);

        extractor.selectTrack(audioTrackIndex);
        MediaFormat format = extractor.getTrackFormat(audioTrackIndex);

        MediaMuxer muxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);

        int audioTrack = muxer.addTrack(format);
        muxer.start();

        ByteBuffer buffer = ByteBuffer.allocate(1024 * 256);
        MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
        int sampleSize;
        while ((sampleSize = extractor.readSampleData(buffer, 0)) != -1) {
            info.offset = 0;
            info.size = sampleSize;
            info.presentationTimeUs = extractor.getSampleTime();
            info.flags = extractor.getSampleFlags();
            muxer.writeSampleData(audioTrack, buffer, info);
            extractor.advance();
        }

        muxer.stop();
        muxer.release();
        extractor.release();
    }

    private static int getAudioTrackIndex(MediaExtractor extractor) {
        for (int index = 0; index < extractor.getTrackCount(); index++) {
            MediaFormat format = extractor.getTrackFormat(index);
            String mime = format.getString(MediaFormat.KEY_MIME);
            if (mime.startsWith("audio/")) {
                return index;
            }
        }
        return -1;
    }

}


Вы можете использовать этот код, вызвав метод convertToMono с указанием пути к исходному аудиофайлу и пути, по которому необходимо сохранить преобразованный файл.

1
2
3
4
5
6
7
8
String inputPath = "/path/to/input/file.wav";
String outputPath = "/path/to/output/file.wav";

try {
    AudioConverter.convertToMono(inputPath, outputPath);
} catch (IOException e) {
    e.printStackTrace();
}


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