Проблемы со звуком при загрузке подкаста - PullRequest
0 голосов
/ 11 марта 2011

Недавно я разработал приложение для загрузки определенного подкаста.Приложение загружает аудиофайл, но звук каждые несколько секунд воспроизводит небольшие «икоты» (как на устройстве, так и в эмуляторе).Когда я скачал файл на свой компьютер, «икоты» не было.Я также заметил, что файл, загруженный на устройство, на ~ 5 МБ больше, чем файл, загруженный на мой компьютер.

Вот мой код для загрузки аудиофайла:

URLConnection conn = url.openConnection();
conn.connect();

int fileSize = conn.getContentLength();

InputStream input = new BufferedInputStream(url.openStream());
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file));

byte data[] = new byte[1024];

long total = 0;

while((count = input.read(data)) != -1)
{
    total += count;
    if((total % 512000) <= 1000)
        publishProgress((int)(total*100/fileSize));
    output.write(data);
}

output.flush();
output.close();
input.close();

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

Спасибо за вашу помощь

1 Ответ

1 голос
/ 11 марта 2011

Попробуйте проверить счетчик 0 байт. Чтение 0 байтов допустимо для потоков на основе сокетов, чтобы справиться с сетевыми задержками и т. Д. Для предотвращения блокировки (поэтому число -1 считается EOF, а не числом 0).

Попробуйте это ...

while((count = input.read(data)) != -1) {
    // Check for count being 0 bytes read
    if (0 != count) {
        total += count;
        if((total % 512000) <= 1000)
            publishProgress((int)(total*100/fileSize));
        // Write count bytes to the output stream
        output.write(data, 0, count);
    }
}

Не уверен, исправит ли это, но это хорошая практика.

РЕДАКТИРОВАТЬ: Подумайте об этом, даже лучше записать фактическое число, прочитанное входным потоком.

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