gpt4 book ai didi

objective-c - NSSound 几个小时后停止工作

转载 作者:行者123 更新时间:2023-12-03 17:48:15 25 4
gpt4 key购买 nike

我正在构建一个应该通知某些事件的应用程序。它有声音通知和 NSView/HUD 通知。

在调试时,我让它运行了几个小时。我注意到几个小时后 8+ NSSound 停止发出声音。

我的代码很简单,并且在最初的几个小时内可以工作:

它运行于:

void onStateUpdate(void* context) {
NSSound* myAwesomeSound = [NSSound soundNamed:existingSoundFile];

if (myAwesomeSound == nil)
NSLog(@"\n\nERROR FINDING SOUND!!!?!?!\n\n");
else
NSLog(@"Code is being called!");

[myAwesomeSound play];
[myVisualHUD start];

}

通过注册 CFRunLoopSource 来调用:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
mRunLoopSource = (CFRunLoopSourceRef)IOPSNotificationCreateRunLoopSource(onStateUpdate, (__bridge void *)(self));
if(mRunLoopSource) {
CFRunLoopAddSource(CFRunLoopGetCurrent(), mRunLoopSource, kCFRunLoopDefaultMode);
}
}

此代码附带 HUD 代码和报告事件的 NSLog。所以我知道它实际上按预期运行,但操作系统只是“静音”或忽略 NSSound,因为它没有失败。

我做错了什么?我怎样才能让它继续工作,因为这最终将成为一个带有通知的托盘应用程序。

最佳答案

因此,在阅读了一些线程后,例如 this .

我不敢说 NSSound 是 Apple 的另一个混合结果 API :(。

使用AudioToolbox是要走的路。到目前为止,看起来在下类后仍然可以工作。

这是一个代码片段(有点难看,但不言自明的用法):

            NSString *audioFileName = @"MyResourceFileName";
NSURL *audioURLRef = [[NSBundle mainBundle] URLForResource:audioFileName
withExtension:@"mp3"];
SystemSoundID audioFileId = 0;

AudioServicesCreateSystemSoundID(
(__bridge CFURLRef) audioURLRef,
&audioFileId
);

// Plays the audio file using AudioServices...
AudioServicesPlaySystemSound(audioFileId);
  • 记得导入 AudioToolbox/AudioToolbox.h 并导入 IOKit/IOKitLib.h(对于 iOS,我认为是 IOKit/UIKit.h,当然还包括框架...

关于objective-c - NSSound 几个小时后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42038928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com