2

我尝试使用带有 FileDescriptor 的 SoundPool 的加载函数,因为我希望能够设置偏移量和长度。该文件不是存储在资源中,而是存储卡上的一个文件。即使 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);

有什么想法吗?

谢谢

4

1 回答 1

4

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

于 2011-01-24T01:51:55.190 回答