Записать потоковое аудио в Java? - PullRequest
7 голосов
/ 04 декабря 2010

Я пытаюсь настроить программу для записи части аудиопотока в Интернете и сохранить ее в файл (желательно в формате mp3 или wav).Я искал повсюду, и я не могу найти достойных способов сделать это.Я нашел две разные библиотеки, которые выглядели так, как будто они работали (NativeBass и Xuggle), но ни одна из них не поддерживала 64-битные окна, и это то, что мне нужно.

Кто-нибудь знает какие-либо простые способы сохранить часть файла?Интернет аудио поток с использованием Java?(Если это важно, это поток «аудио / MPEG»).

РЕДАКТИРОВАТЬ: Хорошо, я нашел способ, который, кажется, работает.Но у меня все еще есть вопрос

import java.net.URLConnection;
import java.net.URL;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.File;
public class Test{

    public static void main (String[] args){
        try{
            URLConnection conn = new URL("http://streamurl.com/example").openConnection();
            InputStream is = conn.getInputStream();

            OutputStream outstream = new FileOutputStream(new File("C:/Users/Me/Desktop/output.mp3"));
            byte[] buffer = new byte[4096];
            int len;
            long t = System.currentTimeMillis();
            while ((len = is.read(buffer)) > 0 && System.currentTimeMillis() - t <= 5000) {
                outstream.write(buffer, 0, len);
            }
            outstream.close();
        }
        catch(Exception e){
            System.out.print(e);
        }
    }
}

Я получил большую часть этого от другого ответа здесь после немного большего поиска.Тем не менее, я пытаюсь сделать запись только в течение определенного периода времени.Как вы можете видеть выше, я попытался записать только 5-секундный интервал.

long t = System.currentTimeMillis();
while ((len = is.read(buffer)) > 0 && System.currentTimeMillis() - t <= 5000) {

Однако по тем или иным причинам записанный звук не длится 5 секунд, а равен 16. Кто-нибудь знает, как точнее ограничить длину потока?

1 Ответ

4 голосов
/ 04 декабря 2010

Если вам точно нужно 5 секунд, вы можете рассчитать их самостоятельно на основе количества полученных вами байтов и скорости передачи аудиопотока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...