gpt4 book ai didi

java - 将一些声音数据添加到现有的 mp3 文件 Android,lame encoder

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:35:53 26 4
gpt4 key购买 nike

所以,这就是 mp3 在 android 中从麦克风编码到文件的方式:

private void startBufferedWrite(final File file) {
new Thread(new Runnable() {
@Override
public void run() {
output = null;
try {
output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
while (mIsRecording) {
int readSize = mRecorder.read(buffer, 0, buffer.length);
if (readSize > 0) {
int bytesEncoded = androidLame.encode(buffer, buffer, readSize, mp3buffer);
if (bytesEncoded > 0) {
try {
output.write(mp3buffer, 0, bytesEncoded);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
} catch (IOException e) {
Log.e("Error writing file : ", e.getMessage());
}
}
}).start();
}

上面的一切都正常工作,并提供了一个新的 mp3 文件,可以从音频播放器正常播放

现在我只是从 InputStream 读取 mp3 文件并获取文件字节数组:

private void old_mp3_to_new_mp3(final File mp3, final File mp3_new) throws IOException {
try {
int size = 4;
byte[] rawData = new byte[(int) mp3.length()];
RandomAccessFile input = new RandomAccessFile(mp3, "rw");
byte[] header = new byte[size];
input.read(header, 0, size);
//noinspection ResultOfMethodCallIgnored
input.read(rawData);
input.close();
byte[] bytes = new byte[100000]; //create random bytes to write to mp3 as Random audio ???
new Random().nextBytes(bytes);
FileOutputStream output = new FileOutputStream(mp3_encrypted);
FileChannel channel = output.getChannel();
channel.write(ByteBuffer.wrap(header));
channel.write(ByteBuffer.wrap(rawData));
channel.write(ByteBuffer.wrap(bytes)); // if comment this line the mp3 new file is generated ok but it's the same with recording, but if wanted to write new random bytes the mp3 is generated but the file says that is corrupted...
output.close();
//noinspection ResultOfMethodCallIgnored
mp3.delete();
callbackListener.perfundoi_shkrimi_dhe_enkriptimi(mp3_encrypted);
} catch (Exception ignored) {
callbackListener.perfundoi_shkrimi_dhe_enkriptimi(mp3_encrypted);
}
}

那么如何将一些新的音频数据添加到现有的 mp3 文件中,或者是否有任何选项可以将旧字节 + 新字节编码为新的 mp3 文件以连接在一起?

有关导致问题的部分在哪里的更多信息,请阅读评论是第二个代码。

换句话说:

mic -> mp3 ; mp3 file -> bytes + new_bytes -> mp3;

那么,我们是否可以在不重新编码的情况下修改现有的 mp3 文件字节声音数据?

最佳答案

试试这个:

String wavFile1 = "C:\\1.mp3";
String wavFile2 = "C:\\2.mp3";
FileInputStream fistream1 = new FileInputStream(wavFile1); // first source file
FileInputStream fistream2 = new FileInputStream(wavFile2);//second source file
SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
FileOutputStream fostream = new FileOutputStream("D://merge1.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();

Reference

关于java - 将一些声音数据添加到现有的 mp3 文件 Android,lame encoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com