@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(); } |
Этот код будет читать аудиофайл, выбирать аудио-трек исходного файла, преобразовывать его в моно и сохранять преобразованный файл по указанному пути.