Итак, вот как 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-файл, который хорошо воспроизводится с аудиоплееров
Теперь я просто читаю этот mp3-файл из InputStream и получаю массив байтов файла:
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-файла без перекодирования?