修剪不带库的带字节数组的mp3文件

时间:2019-04-04 11:11:21

标签: java android arrays mp3 trim

经过长时间的讨论,我首先写这篇文章,让我们讨论一下我想要的...

我想整理一个.mp3格式的音频文件,我认为这将是一个好问题,因为许多用户都需要答案,这是获得

的最佳位置

对此有太多问题,但没有完全可接受的答案,许多答案建议使用不同的库,例如RingDroid和FFMPEG,但问题是没有人告诉我如何使用它们来修剪文件,之后我从帖子中得到了一些建议。 ...

将mp3转换为字节数组,然后修剪文件,然后再次在文件中解码,或者您可以直接播放

我能够实现编码和解码,但是请任何人建议我如何切割字节数组,然后将其生成文件并将其保存在内存中

我要这样做的代码。...

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    InputStream inStream = getApplicationContext().getResources().openRawResource(R.raw.ed);

    byte[] music = new byte[0];
    try {
        music = new byte[inStream.available()];
        music = convertStreamToByteArray(inStream);
        convertBytesToFile(music);
        inStream.close();
        Toast.makeText(this, ""+music.length, Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

public static byte[] convertStreamToByteArray(InputStream is) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buff = new byte[10240];
    int i = Integer.MAX_VALUE;
    while ((i = is.read(buff, 0, buff.length)) > 0) {
        baos.write(buff, 0, i);
    }
    return baos.toByteArray(); // be sure to close InputStream in calling function
}

private void convertBytesToFile(byte[] bytearray) {
    try {

        File outputFile = File.createTempFile("file", "mp3", getCacheDir());
        outputFile.deleteOnExit();
        FileOutputStream fileoutputstream = new FileOutputStream(outputFile);
//Now i found something to divide byte array and mp3 file copyOfRange()
         byte[] hello= Arrays.copyOfRange(bytearray,0,bytearray.length/2);
        fileoutputstream.write(hello);        
       // fileoutputstream.write(bytearray);
        fileoutputstream.close();
        MediaPlayer mp=new MediaPlayer();
        FileInputStream fis = new FileInputStream(outputFile);
        mp.setDataSource(fis.getFD());

        mp.prepare();
        mp.start();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
  }

}

在上面的代码中,我能够对文件进行编码和解码,但是如果您建议使用任何库,则无法进行修剪,请提供详细信息以实现此目的...

我现在只是编辑我的问题,我的问题是如何在运行时从用户那里获得开始和结束位置。...

感谢您的关注

0 个答案:

没有答案