Вырезать звук из запущенного звукового клипа

#blackberry #java-me

#ежевика #java-me

Вопрос:

Кто-нибудь знает, как вырезать звуковой клип из запущенного звукового файла? Я работаю над одним приложением blackberry, у кого-нибудь есть какой-либо пример кода или ссылка, пожалуйста, дайте мне это.

Спасибо

С уважением, Ви Сингх

Ответ №1:

Можно вырезать часть звукового файла. Вы должны изучить форматы звуковых файлов и разобраться с двоичной структурой звукового файла.

Нет, у меня нет примера кода, но вы можете написать его самостоятельно, изучив форматы звуковых файлов.

Комментарии:

1. Привет, Рафаэль, спасибо за ваш ответ, но у меня есть вопрос, как мы можем вырезать клип из запущенного звукового файла по времени, предположим, у меня есть звуковой клип продолжительностью 60 секунд, и я хочу клип от 20 до 35 секунд из существующего клипа.

2. Как я уже говорил, вам нужно знать формат звукового файла (mp3, ogg и т. Д.). Когда вы знаете формат, вы можете разобрать заголовок файла, извлечь звуковой поток и вырезать необходимую двоичную часть звукового файла и создать новый звуковой файл с новым заголовком и новым (более коротким) звуковым потоком.

3. Чтобы найти информацию о форматах звуковых файлов, используйте Google. Существует много информации по этому вопросу.

Ответ №2:

//Пример кода для вырезания звукового файла (AMR)

длительное время начала = player.getMediaTime(); длительное время окончания = player.getMediaTime();

     private void cutByTimeDuration(long startTime, long endTime) {
    // TODO Auto-generated method stub
    byte[] byte1 = readDSoundFile("hello.amr"); //custom method original file 
    int noFramesStart = (int) (startTime / 20000);
    long noBytesStart = (noFramesStart * 32)   6;
    int noFramesEnd = (int) (endTime / 20000);
    long noBytesEnd = (noFramesEnd * 32)   6;
    byte[] byte2 = new byte[(int) (noBytesEnd - noBytesStart   6)];
    System.arraycopy(byte1, 0, byte2, 0, 6);
    System.arraycopy(byte1, (int) noBytesStart, byte2, 6,
            (int) (noBytesEnd - noBytesStart));

    try {

        FileConnection file = (FileConnection) Connector.open(filePath
                  "/"   "xyz.amr", Connector.READ_WRITE);
        if (file.exists())
            file.delete();

        // if (!file.exists() )
        {
            file.create();
            OutputStream out = file.openOutputStream();
            int length = byte2.length;// -1;
            out.write(byte2, 0, length);
            Thread.yield();

            out.flush();
            out.close();
            file.close();

        }
    } catch (Exception e) {
    }

}