iPhone/OpenAL 获取样本的声音长度(播放时间)
我是 OpenAL 新手。我设法获得了一个封装 iPhone 版 OpenAL 的声音管理器代码,这样我就可以加载声音并播放它们。
但我确实需要知道每个声音文件的长度(以秒为单位),因为我需要在声音完成后立即调用一个事件。
我注意到有一种方法可以在填充缓冲区时计算声音的长度(?)。有人可以帮我解决这个问题吗?提前致谢。
I'm new to OpenAL. I managed to get a soundmanager code that wraps OpenAL for iPhone, so I can load sounds and play them.
But I really need to know how long each sound file is in seconds because I need to call an event as soon as the sound as finished.
I've noticed that there is a way to calculate the length of a sound when populating the buffers(?). Can someone help me with this? Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用此代码片段来获取声音的当前播放时间。
You can use this snippet to get the current playback time of the sound.
如果您使用已知格式的原始 PCM 音频样本填充已知大小的缓冲区,则:
其中,样本帧的数量通常是单声道 16 位样本的 number_of_bytes/2,或立体声的 number_of_bytes/4,等等。
If you are populating known size buffers with raw PCM audio samples of a known format, then:
where, typically, the number of sample frames is the number_of_bytes/2 for mono 16-bit samples, or the number_of_bytes/4 for stereo, etc.
我有同样的问题并提出了以下解决方案。第一个功能是可选的,但允许补偿经过的时间。然后我用生成的时间间隔触发 NSTimer。
玩得开心!短剑
I have the same problem and came up with the following solution. The first function is optional, but allows to compensate for the elapsed time. I'm then firing an NSTimer with the resulting time interval.
Have fun! Dirk