我有两个字节数组。一个包含背景音乐,第二个包含录制的声音。
我如何将它们组合成单个数组并使用MediaPlayer播放?
我试着做下一个:
1)
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
if (array1 != null && array1 != 0)
outputStream.Write(array1);
if (array2 != null && array2 != 0)
outputStream.Write(array2);
return outputStream.ToByteArray();
2)
byte[] joinedArray = Arrays.CopyOf(array1, array1.Length + array2.Length);
Array.Copy(array2, 0, joinedArray, array1.Length, array2.Length);
return joinedArray;
在这两种情况下,我都没有收到合并的数组(如果我将其传递给MediaPlayer,则仅播放语音或仅播放音乐。)
提前致谢。
答案 0 :(得分:1)
在这两种情况下,我都没有收到合并的数组(如果我将其传递给MediaPlayer,则仅播放语音或仅播放音乐)
您可以参考这个问题:C# : concatenate 2 MP3 files。正如@Matthew Whited所说:
您正在复制第一首歌曲数据。并且MP3数据是流式的,因此您可以将文件相互附加而不必担心比特率(虽然它们可能会出现故障)比特率应该自动调整。
尝试使用以下代码:
using (var fs = File.OpenWrite(Path.Combine(path, "3.mp3")))
{
var buffer = File.ReadAllBytes(Path.Combine(path, "1.mp3"));
fs.Write(buffer, 0, buffer.Length);
buffer = File.ReadAllBytes(Path.Combine(path, "2.mp3"));
fs.Write(buffer, 0, buffer.Length);
fs.Flush();
}
考虑.mp3
个文件的两种情况:
在这种情况下,我们可以将第二个文件附加到第一个文件的末尾。这可以使用Android上提供的文件类来实现。
在这种情况下,必须重新编码其中一个剪辑,以确保两个文件具有相同的采样频率和通道数。要做到这一点,我们需要解码MP3,获取PCM样本,处理它以改变采样频率,然后重新编码为MP3。
Android没有转码或重新编码API。一种选择是通过JNI使用像lame / FFMPEG这样的外部库进行重新编码。