在Objective中没有延迟播放音效

当人们在我的应用程序中按下某些按钮时,我想播放一些简单的声音效果,并尝试了几件事情,但我总是得到延迟,导致声音看起来不同步。

我在这里遵循了教程,所以我尝试了音频服务中的构建,但那有一个延迟,我尝试过AVAudioPlayer,但也有延迟,即使我使用了“prepareToPlay”。

我是否真的必须安装像Finch这样庞大而杂乱的图书馆才能在简单的应用程序中获得简单的声音效果而无延迟?

希望你能为我澄清事情!

UPDATE

音频服务代码:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4"
                                      withExtension:@"aif"];
AudioServicesCreateSystemSoundID((CFURLRef)soundURL, &sound1);
AudioServicesPlaySystemSound(sound1);

viewDidLoad中AVAudioPlayer的代码:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4"
                                      withExtension:@"aif"];
self.avSound = [[AVAudioPlayer alloc] 
       initWithContentsOfURL:soundURL error:nil];
[self.avSound prepareToPlay]

代码为AVAudioPlayer在我想要播放文件的方法:

[self.avSound play];

我得到这个工作的方式(我认为我从另一篇文章中得到了这个想法)是创建一个空的1秒.wav文件,并在初始化时“播放”它。 之后,当我打电话给其他音响效果时,没有任何延迟。

在我的声音播放器对象中就像这样

    SystemSoundID blID;
    SystemSoundID cID;

    +(void)doInit
    {
            if (spinitialized){
                    AudioServicesPlaySystemSound (blID);
                    return;
            }



            NSString *str = [[NSBundle mainBundle] pathForResource:@"ding.wav" ofType:@""];
            NSURL *uref = [NSURL fileURLWithPath:str];
            OSStatus error = AudioServicesCreateSystemSoundID ((CFURLRef)uref, &cID);
            if (error) NSLog(@"SoundPlayer doInit Error is %ld",error);

            str = [[NSBundle mainBundle] pathForResource:@"blank.wav" ofType:@""];
            uref = [NSURL fileURLWithPath:str];
            error = AudioServicesCreateSystemSoundID ((CFURLRef)uref, &blID);
            if (error) NSLog(@"SoundPlayer doInit Error is %ld",error);

            AudioServicesPlaySystemSound (blID);

            spinitialized = YES;
    }

然后,我可以毫不拖延地播放“丁”,使用:

    AudioServicesPlaySystemSound (cid);

我最终做了类似于迈克的事情。 我结束了在viewDidLoad中播放声音的音量:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"PlopsX4"
                                              withExtension:@"aif"];
self.plops = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil];
[self.plops setVolume:0.0];
[self.plops play];

然后在我玩这个游戏的功能上,我会这样做:

[self.plops setVolume:1.0];
[self.plops play];

我发现似乎有帮助的一件事是,进入可能播放声音的屏幕后,播放声音的一小部分。 这似乎是“声音”的声音机制 - 分配内部对象,分页内容等。

(我观察到这与Mike M的方法类似。)

链接地址: http://www.djcxy.com/p/11645.html

上一篇: Playing sound effect with no latency in Objective

下一篇: SCons to generate variable number of targets