- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
OSStatus err = AudioQueueNewOutput(&audioDescription, AudioPlayerAQOutputCallback, ( void* )self, nil, nil, 0, &audioQueue);
if( err != noErr )
NSLog(@"Couldn't open AudioFile.");
err = AudioQueueAddPropertyListener(audioQueue, kAudioQueueProperty_IsRunning, isRunningProc, self);
if( err != noErr )
NSLog(@"Couldn't register for playback state changes.");
这个回调函数只在AudioQueueStart(audioQueue, NULL)之后被调用一次
我怎么称呼 AudioQueuePause(audioQueue);
或音频播放结束。
static void isRunningProc(void * inUserData,
AudioQueueRef inAQ,
AudioQueuePropertyID inID)
我错过了什么?
最佳答案
我对此做了一个简短的测试:
当您恢复暂停时,它确实看起来既没有为暂停也没有为开始调用回调。
但这不是你解决不了的。你以某种方式开始了这首歌。这将触发属性监听器。同样,如果歌曲停止。或者你停止它。您可能必须以某种方式在您的播放例程中使用类似这样的东西自己触发属性监听器:
if (bytesRead == 0) {
//This will trigger the property listener
AudioQueueStop(inAQ, false);
}
else {
AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL);
}
对于 AudioQueue 来说,只要你不断地给它提供音频缓冲区来播放,它就会一直在播放。 (我还测试了根本不提供任何缓冲区,这不会触发停止,因此您必须显式调用停止来触发属性监听器。)
这意味着您已经知道您的歌曲是否正在播放。单击您的按钮请求暂停或取消暂停。如果歌曲没有播放,请不要做任何事情。如果歌曲正在播放,请调用 AudioQueuePause 并设置一个标志,表明您已暂停播放音乐。记得检查错误代码。 (见下文(1))。如果标志表明您已暂停音乐,请调用 AudioQueueStart,并清除指示您是否已暂停的标志。再次检查错误代码。
(1)为什么要查看错误码?
首先,虽然不太可能,但可能会出现错误,因为它是蓝月亮。
但是,我担心的是多线程。 AudioQueue 显然运行在与 GUI 不同的线程上。这意味着如果您测试一个标志是否正在播放音乐,则不能完全信任该状态,因为它可能在您测试该状态后发生了变化。在您的测试和基于该测试的操作之间可能有另一个线程。
假设您检查歌曲是否已在播放。 (这是。)然后你要求歌曲暂停,但是这首歌真的停止了,因为它在你要求歌曲暂停之前就已经结束了。然后你要求暂停这首歌。但它已经停止了。
然后会发生什么?我真的不知道。在这种情况下它甚至可能不是问题,但像这样的事情值得考虑。它需要测试,或者至少需要查阅文档。
另一种情况呢?如果歌曲停止并且您要求重新开始播放怎么办?我认为这是更糟糕的情况,但这可能不是问题。再次考虑这些案例并查看文档,甚至自己测试。
关于iphone - AudioQueue PropertyListener IsRunning 只回调一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13356582/
这就是我的代码: Class A { private boolean valueChanged; public static void main(String args[]) { B
我有课 CustomerBean { Customer customer; public CustomerBean() {...} public getCustomer() {
OSStatus err = AudioQueueNewOutput(&audioDescription, AudioPlayerAQOutputCallback, ( void* )self, ni
我是一名优秀的程序员,十分优秀!