Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 增加声池持续时间_Java_Android_Soundpool - Fatal编程技术网

Java 增加声池持续时间

Java 增加声池持续时间,java,android,soundpool,Java,Android,Soundpool,所以我有6.5秒长的声音,当我用soundpool播放时,它只播放5秒…我试过使用mediaplayer,但对于这种应用程序来说太慢了。 声音池代码: SoundPool sp; OnCreate sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); dub1s = sp.load(this, R.raw.dub1, 1); Button if (dub1s != 0) sp.play(d

所以我有6.5秒长的声音,当我用soundpool播放时,它只播放5秒…我试过使用mediaplayer,但对于这种应用程序来说太慢了。 声音池代码:

    SoundPool sp;
    OnCreate
    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
dub1s = sp.load(this, R.raw.dub1, 1);
Button
    if (dub1s != 0)
            sp.play(dub1s, 1, 1, 0, 0, 1);
    }

尝试使用以下加载函数

public int load (FileDescriptor fd, long offset, long length, int priority)
第三个参数是声音的长度。 比方说,您正在读取一个文件作为

FileInputStream in = new FileInputStream(new File(soundFile));
load()应该如下所示

sp.load(in.getFD(), start, length, 0);

迟做总比不做好,所以为了将来参考,每个磁道有1Mb缓冲区大小限制。但该限制不适用于文件大小,而是适用于解压缩的原始PCM数据

SoundPool将把加载的音频解压缩为PCM数据,这样它就可以立即播放,而无需解码延迟。如果您正在加载的音频被严重压缩,如MP3,则可能会被放大很多

您可以使用Soundpool播放超过5秒的声音(我已经播放了大约30秒的声音)。但您可能需要修改您的文件。您可以尝试将您的声音文件转换为ogg,它似乎可以在Soundpool中提供更好的效果

另外,进行以下更改:

  • 将声音文件的采样率更改为16000 Hz
  • 将音频频道更改为单声道,而不是立体声
  • 确保这些处理后的文件大小小于1 mb

对于这些更改,您可以使用这样的在线转换器。

如果我们传递的长度大于声音文件UHMM,该怎么办?我应该在FileDescriptor中输入什么?