Android - 连接编码的 mp3 数据和 mp3 文件数据
Android - Concatenate encoded mp3 data and mp3 file data
我需要创建由来自两个不同来源的音频数据组成的音频文件。一个来自麦克风,另一个来自已录制的音频 mp3 文件。
我正在使用 Lame 库将读取的数据从麦克风转换为 mp3,并将其写入 FileOutputStream,如下所示:
bytesRead = audioRecord.read(buffer, 0, minBuffer);
int bytesEncoded = androidLame.encode(buffer, buffer, bytesRead, mp3buffer);
outputStream.write(mp3buffer, 0, bytesEncoded);
而且我有 InputStream(mp3 文件),我正在将其写入同一个 FileOutputStream,如下所示:
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int readBytes = 0;
while ((readBytes = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, readBytes);
}
我需要交替使用这两个来源,并且一次只从一个来源写入。而且,我希望输出为 mp3 格式。
目前,如果我只从一个来源写入数据,这些代码可以正常工作。
但是,例如,当我首先写入来自文件的数据并停止它,然后继续写入来自 Mic 的数据时,它不起作用。
我找到了 reason。事实证明,要连接来自不同来源的 mp3 数据,它们应该具有相同的通道和相同的采样率。
解决方案是将 mp3 文件解码回 PCM,并使用我用于编码从 Mic 读取的数据的相同配置对其进行编码。
我需要创建由来自两个不同来源的音频数据组成的音频文件。一个来自麦克风,另一个来自已录制的音频 mp3 文件。
我正在使用 Lame 库将读取的数据从麦克风转换为 mp3,并将其写入 FileOutputStream,如下所示:
bytesRead = audioRecord.read(buffer, 0, minBuffer);
int bytesEncoded = androidLame.encode(buffer, buffer, bytesRead, mp3buffer);
outputStream.write(mp3buffer, 0, bytesEncoded);
而且我有 InputStream(mp3 文件),我正在将其写入同一个 FileOutputStream,如下所示:
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int readBytes = 0;
while ((readBytes = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, readBytes);
}
我需要交替使用这两个来源,并且一次只从一个来源写入。而且,我希望输出为 mp3 格式。
目前,如果我只从一个来源写入数据,这些代码可以正常工作。
但是,例如,当我首先写入来自文件的数据并停止它,然后继续写入来自 Mic 的数据时,它不起作用。
我找到了 reason。事实证明,要连接来自不同来源的 mp3 数据,它们应该具有相同的通道和相同的采样率。
解决方案是将 mp3 文件解码回 PCM,并使用我用于编码从 Mic 读取的数据的相同配置对其进行编码。