Невозможно воспроизвести аудио из ресурсов «возможно, оно сжато» - PullRequest
1 голос
/ 04 апреля 2011

Привет, я пишу приложение для Android, которое будет воспроизводить набор аудиофайлов, которые я поставляю вместе с приложением, а также позволит пользователям создавать и воспроизводить свои собственные аудио.Проблема в том, что я не знаю, где хранить файлы.Если я храню их во внешнем (sdcard) месте, я не уверен, как я отправлю эти файлы во внешнее хранилище пользователя при установке моего приложения.Я думал, что я мог бы в активах и обычай звучит внешне.

при попытке сделать это, однако, я получаю следующую ошибку: java.io.FileNotFoundException: этот файл не может быть открыт как дескриптор файла;это вероятно сжато

вот мой код:

try {
                Constants.mPlayer = new MediaPlayer();
                AssetFileDescriptor afd = this.getApplicationContext().getAssets().openFd("songid.mus");
                Constants.mPlayer.setDataSource(afd.getFileDescriptor());
                Constants.mPlayer.prepare();
                Constants.mPlayer.start();
            } catch (Exception e) {
                Log.e("", "prepare() failed", e);
            }

Любые идеи или предложения?

Спасибо!Радха

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

В качестве быстрого исправления вы можете избежать сжатия , изменив имя вашего файла на songid.mp3.

Автор этого поста также предлагает передать расширение с -0опция aapt в командной строке:

Во-первых, вы можете дать вашему файлу расширения расширение в списке выше.Хотя это не обязательно имеет смысл, это может быть простой обходной путь, если вы не хотите иметь дело с aapt в командной строке.Другой вариант - передать определенное расширение флагу -0, например, -0 дБ, чтобы отключить сжатие для ресурсов с этим расширением.Вы можете пропустить флаг -0 несколько раз и каждый раз с отдельным расширением, если вам нужно более одного типа для разархивирования.

Если вы чувствуете себя авантюрным, вы можете попробовать заменить aapt со скриптом, который вызывает aapt с -0 mus как в этом посте .

0 голосов
/ 05 апреля 2011

Спасибо, Мэтью! Я изменил название с songid.mus на songid.3gp. Это исправило мое первое исключение. Очень признателен.

Я получил еще одно исключение после этого момента, которое хочу описать для тех, кто совершает ту же ошибку, что и я. :-) Я получил java.io.IOException: Prepare failed.: status=0x1

Мне потребовалось некоторое время, чтобы понять, что мне нужно также добавить начало и продолжительность:

Constants.mPlayer = new MediaPlayer();
AssetFileDescriptor afd = this.getApplicationContext().getAssets().openFd("songid.3gpp");
long start = afd.getStartOffset();
long end = afd.getLength();
Constants.mPlayer.setDataSource(afd.getFileDescriptor(), start,end);
Constants.mPlayer.prepare();
Constants.mPlayer.start();  

Это работает! Спасибо!

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