我正在使用SoundPool播放我的应用程序中的音频剪辑。一切都很好,但我需要知道剪辑播放何时结束。
目前,我通过获取每个片段的持续时间来跟踪它在我的应用程序中。使用MediaPlayer实例可以完成这项工作。这很有效,但似乎浪费了加载每个文件两次的时间。我可以通过已知文件长度(可从AssetFileDescriptor中获得)粗略地计算出持续时间,但我仍然需要知道采样率和通道数。
我看到了解决这个问题的两个潜在方法:
谢谢, Max
我目前正在使用的代码(效果很好,但对于这个目的而言过于重量级):
目前,我通过获取每个片段的持续时间来跟踪它在我的应用程序中。使用MediaPlayer实例可以完成这项工作。这很有效,但似乎浪费了加载每个文件两次的时间。我可以通过已知文件长度(可从AssetFileDescriptor中获得)粗略地计算出持续时间,但我仍然需要知道采样率和通道数。
我看到了解决这个问题的两个潜在方法:
- 找出何时播放片段已经完成(似乎无法使用SoundClip实现)。
- 拥有一个类,它可以只加载音频文件的头,并提供采样率/通道数(最好还有采样计数以获得精确的持续时间)。
谢谢, Max
我目前正在使用的代码(效果很好,但对于这个目的而言过于重量级):
String[] fileNames = ...
MediaPlayer mp = new MediaPlayer();
for (String fileName : fileNames) {
AssetFileDescriptor d = context.getAssets().openFd(fileName);
mp.reset();
mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
mp.prepare();
int duration = mp.getDuration();
// ...
}
顺便说一下,这个问题已经被提出了但没有得到答案。
onCompletionListener
吗?https://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html#onCompletion%28android.media.MediaPlayer%29 - sschrass.start()
之后调用了setOnCompletionListener
吗? - sschrass