我想得到两个音频文件作为输入,然后按字节合并它们,并将其保存为单个文件。
在这个代码中,我试图在Java中做到这一点,它工作正常,但我不知道如何在android中做到这一点。
如何在Android系统中做到这一点?
import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
public class FileMixer {
public static void main(String[] args)
{
try
{
Path path1 = Paths.get("C:\\Srini\\Wav\\welcome.wav");
Path path2 = Paths.get("C:\\Srini\\Wav\\goodbye.wav");
String path3 ="C:\\Srini\\Wav\\srini12.wav";
File Newfilepath=new File(path3);
byte[] byte1 = Files.readAllBytes(path1);
byte[] byte2 = Files.readAllBytes(path2);
byte[] out = new byte[byte1.length];
for (int i=0; i<byte1.length; i++)
{
out[i] = (byte) ((byte1[i] + byte2[i]) >> 1);
}
InputStream byteArray = new ByteArrayInputStream(out);
AudioInputStream ais = AudioSystem.getAudioInputStream(byteArray);
AudioSystem.write(ais, AudioFileFormat.Type.WAVE,Newfilepath);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
太迟了。但是,有人可能需要一个合适的解决方案。这就是为什么我建议使用AudioMixer-android库。你也可以执行很多音频处理的事情。
要组合两个wav文件,请使用以下代码:,
import java.io.File;
import java.io.IOException;
import java.io.SequenceInputStream;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
public class WavAppender {
public static void main(String[] args) {
String wavFile1 = "D:\\wavOne.wav";
String wavFile2 = "D:\\wavTwo.wav";
try {
AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1));
AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));
AudioInputStream appendedFiles =
new AudioInputStream(
new SequenceInputStream(clip1, clip2),
clip1.getFormat(),
clip1.getFrameLength() + clip2.getFrameLength());
AudioSystem.write(appendedFiles,
AudioFileFormat.Type.WAVE,
new File("D:\\wavAppended.wav"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void mergeSongs(File mergedFile,File...mp3Files){
FileInputStream fisToFinal = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mergedFile);
fisToFinal = new FileInputStream(mergedFile);
for(File mp3File:mp3Files){
if(!mp3File.exists())
continue;
FileInputStream fisSong = new FileInputStream(mp3File);
SequenceInputStream sis = new SequenceInputStream(fisToFinal, fisSong);
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fisSong.read(buf)) != -1;)
fos.write(buf, 0, readNum);
} finally {
if(fisSong!=null){
fisSong.close();
}
if(sis!=null){
sis.close();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(fos!=null){
fos.flush();
fos.close();
}
if(fisToFinal!=null){
fisToFinal.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
问题内容: 我有2个音频文件。第一个是背景音乐,第二个是演讲。(每个大约四分钟长) 现在,我想将它们混合并接收4分钟的语音和背景音乐。 问题答案: 您不需要FFMPEG,可以使用android中提供的标准编解码器。 上面的代码处理1个文件的读取。“处理”例程(尚未定义)接收交错的样本数组(左/右/左/右/左/右)。您现在要做的就是将这些通道添加到目标缓冲区。例如 生成的目标数组将包含您覆盖的样本。
我正在尝试使用FFMPEG合并2个mp4文件。其中一个文件同时具有视频和音频(),而另一个只有音频()。这些文件的名称以以下方式列在名为的文本文件中: 然后执行下面的ffmpeg命令来合并它们。 但是,生成的连接文件只包含。也就是说,如果
问题内容: 我想使用Xuggler 将无音频的视频文件与音频文件合并。此刻,我已经采取了两个流,并将这些流的视频和音频部分分别合并为画中画。现在,我想将音频和视频文件相互组合。任何建议或提示将不胜感激。我正在使用red5服务器。谢谢。 问题答案: 使用MediaConcatenator。请参见示例代码“连接音频和视频”
我想把两个音频文件合并成一个新文件。我尝试使用MP4parser库,它会导致一些问题,使用SquenceInputStream组合两个音频文件,它会增加音频文件的大小,但只播放初始歌曲。 参考:https://stackoverflow.com/a/43650758/8775993 与StackOverflow答案核对无任何效果。 请提出解决方案。提前谢谢。
我知道这个片段。stop()方法,但是当我把它放在key_events中时,它似乎在里面不起作用。它只会导致错误。我知道为什么它会导致错误。因为我要求它基本上停止一个直到几行之后才存在的剪辑。但是,如果可能的话,使用相同的逻辑或接近它,我怎么能重新编码,这样它就知道选择从上一个key_event播放的上一个剪辑。我想要的功能是:按下F1键时,会播放wav。按下F2时,当前波形停止,新波形开始。按下
我有一个ffmpeg,它可以合并3个mp4视频,然后另一个命令可以将音频从第一个命令添加到输出文件中。命令如下: vid-1。mp4(没有音频流) 有没有在一个命令中执行此操作?我还想将音频添加到在第一个命令中创建的视频中。这可能吗? “ffmpeg-i vid-1.mp4-i vid-2.mp4-i vid-3.mp4-i audio.mp3”的控制台输出