Обрезать mp3-файл байтовым массивом, не используя библиотеку - PullRequest
0 голосов
/ 04 апреля 2019

После долгого времени я пишу этот пост, прежде всего давайте обсудим, что я хочу ...

Я хочу обрезать аудиофайл в формате .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();
    }
  }

}

В приведенном выше коде я могу кодировать и декодировать файл, но не могу обрезать, если вы предлагаетелюбая библиотека, пожалуйста, подробно опишите, как это реализовать ...

Я просто редактирую свой вопрос, теперь моя проблема в том, как получить начальную и конечную позиции от пользователя во время выполнения ....

Спасибо за ваше внимание

...