来自文件的SoundPool.load()和FileDescriptor

时间:2010-06-04 22:52:53

标签: android audio soundpool

我尝试使用带有FileDescriptor的SoundPool的加载功能,因为我希望能够设置偏移量和长度。文件不存储在Ressources中,而是存储在存储卡上。即使SoundPool的加载和播放功能都没有抛出任何异常或打印任何东西到控制台,声音也不会播放。使用相同的代码,但使用SoundPool构造函数中的文件路径字符串可以很好地工作。

这是我尝试加载的方式(start equals为0,length是文件的长度,以毫秒为单位):

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 个答案:

答案 0 :(得分:3)

也许你已经想到了这一点,但是阅读文档似乎长度可能是以字节为单位,而不是毫秒。它声明如果在单个二进制文件中存储多个声音,则传递文件描述符很有用。这意味着你要告诉系统要提取多个声音的声音,但我认为它必须能够将它作为单个声音处理。因此,如果您将多个wave文件连接在一起,并希望告诉它从二进制文件中播放单个wave文件,则会使用此方法。