SoundPool.load () и FileDescriptor из файла - PullRequest
2 голосов
/ 05 июня 2010

Я попытался использовать функцию загрузки SoundPool, которая принимает FileDescriptor, потому что я хотел иметь возможность установить смещение и длину. Файл хранится не в ресурсах, а на карте памяти. Даже если ни загрузка, ни функция воспроизведения SoundPool не выдают никаких исключений и не распечатывают что-либо на консоли, звук не воспроизводится. Использование того же кода, но использование строки пути к файлу в конструкторе SoundPool работает отлично.

Вот как я пытался загрузить (начало равно 0, а длина - это длина файла в миллисекундах):

FileInputStream fileIS = new FileInputStream(new File(mFile));
mStreamID = mSoundPool.load(fileIS.getFD(), start, length, 0);
mPlayingStreamID = mSoundPool.play(mStreamID, 1f, 1f, 1, 0, 1f);

Если бы я использовал это, это работает:

mStreamID = mSoundPool.load(mFile, 0);
mPlayingStreamID = mSoundPool.play(mStreamID, 1f, 1f, 1, 0, 1f);

Есть идеи у кого-нибудь?

Спасибо

1 Ответ

3 голосов
/ 24 января 2011

Возможно, вы уже поняли это, но, читая документацию, кажется, что длина в байтах, а не в миллисекундах. В нем говорится, что передача дескриптора файла полезна, если вы храните несколько звуков в одном двоичном файле. Это подразумевает, что вы сообщаете системе, какой звук из нескольких магазинов вытащить, но я думаю, что он должен быть в состоянии обработать его как один звук. Так что это используется, если вы объединяете несколько волновых файлов вместе и хотите, чтобы он воспроизводил один волновой файл из двоичного файла.

...