Как объединить два mp3 файла в один (объединение/объединение)
Может ли кто-нибудь сказать, как объединить/объединить два медиафайла в один?
Я нашел темы о audioInputStream
, но теперь он не поддерживается в android, и весь код для java.
И на StackOverflow я нашел эту ссылку здесь
но там я не могу найти решение - эти ссылки только для потокового аудио. Кто-нибудь может мне сказать?
P.S и почему я не могу начать баунти?: (
Ответы
Ответ 1
Рассмотрим два случая для файлов .mp3
:
- Файлы с одинаковой частотой дискретизации и количеством каналов
В этом случае мы можем просто добавить второй файл к концу первого файла. Это может быть достигнуто с помощью классов файлов, доступных на Android.
- Файлы с различной частотой дискретизации или количеством каналов.
В этом случае один из клипов должен быть перекодирован, чтобы гарантировать, что оба файла имеют одинаковую частоту дискретизации и количество каналов. Для этого нам нужно будет декодировать MP3, получить образцы PCM, обработать его, чтобы изменить частоту дискретизации, а затем перекодировать в MP3. Из того, что я знаю, у андроида нет API-интерфейса для перекодирования или перекодировки. Один из вариантов - использовать внешнюю библиотеку, такую как lame/FFMPEG, через JNI для повторного кодирования.
Ответ 2
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();
}
}