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

时间:2018-06-06 00:43:49

标签: java android android-studio mp3 lame

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

def main():
    x = [1,2]
    tx = x
    f = False
    while f == False:
        if len(x) == 0:
            f = True
        else:
            del(x[0])
    print('tx',tx)
main()

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

现在我只是从InputStream中读取该mp3文件并获取文件bytes array:

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文件以加入?

有关更多信息导致问题的部分,请阅读注释是第二个代码。

以其他方式解释:

  

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); } } mic -> mp3 ;

那么,我们可以修改现有的mp3文件字节声音数据而无需重新编码吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

让我试着回答你的问题:

  

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

如果通过“添加一些音频”表示将mp3添加到其他音频数据中,或者将其添加到其他音频数据中,答案是肯定的,您可以在不重新编码的情况下执行此操作

您将使用的课程是MediaMuxer 你可以在https://developer.android.com/reference/android/media/MediaMuxer找到有用的信息 https://bigflake.com/mediacodec/