Как объединить два mp3-файла в один (объединить / объединить) - PullRequest
11 голосов
/ 18 июля 2011

Может кто-нибудь сказать, как объединить / объединить два медиа-файла в один?

Я нашел темы о audioInputStream, но теперь он не поддерживается в Android, и весь код для Java.

И на StackOverflow я нашел эту ссылку здесь но там я не могу найти решение - эти ссылки только на потоковое аудио. Кто-нибудь может мне сказать?

P.S. и почему я не могу начать щедрость?: (

Ответы [ 2 ]

10 голосов
/ 26 июля 2012
import java.io.*;
public class TwoFiles
{
    public static void main(String args[]) throws IOException
    {
        FileInputStream fistream1 = new FileInputStream("C:\\Temp\\1.mp3");  // first source file
        FileInputStream fistream2 = new FileInputStream("C:\\Temp\\2.mp3");//second source file
        SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
        FileOutputStream fostream = new FileOutputStream("C:\\Temp\\final.mp3");//destinationfile

        int temp;

        while( ( temp = sistream.read() ) != -1)
        {
            // System.out.print( (char) temp ); // to print at DOS prompt
            fostream.write(temp);   // to write to file
        }
        fostream.close();
        sistream.close();
        fistream1.close();
        fistream2.close();
    }
}
4 голосов
/ 18 июля 2011

Рассмотрим два случая для .mp3 файлов:

  • Файлы с одинаковой частотой дискретизации и количеством каналов

В этом случае мы можем просто добавить второй файл в конец первого файла. Это может быть достигнуто с помощью классов файлов, доступных на Android.

  • Файлы с различной частотой дискретизации или количеством каналов.

В этом случае один из клипов необходимо перекодировать, чтобы оба файла имели одинаковую частоту дискретизации и количество каналов. Для этого нам нужно будет декодировать MP3, получить сэмплы PCM, обработать его для изменения частоты сэмплирования и затем перекодировать в MP3. Из того, что я знаю, Android не имеет транскодирования или перекодирования API. Одним из вариантов является использование внешней библиотеки, такой как lame / FFMPEG через JNI, для перекодирования.

...