使用Finch在iphone上播放声音

时间:2009-07-15 03:10:10

标签: iphone iphone-sdk-3.0 ios-simulator avaudioplayer

我有一个有两种声音的应用程序: 1.背景声音,永远循环到下一个视图。 2.听起来可以单独播放或一次播放的剪辑。

之前我尝试过使用AVAudioPlayer,但两个剪辑之间总是有很小的静音间隔(我没有找到任何解决方案,如果你有一个,请发帖回复),所以转移到Finch,例如http://github.com/zoul/Finch/tree/master

现在这是交易: 我正在使用AVAudioPlayer播放循环永远的声音,而Finch则播放那些背对背的剪辑。我这样做:

- (void)viewDidLoad {
    [super viewDidLoad];

    soundEngine = [[Finch alloc] init];
/***
CLIPPED
***/
}
-(void) playclip:(id) sender {
    NSString *fullPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sitar.wav"];
    NSLog(@"Song is %@", fullPath);
    clip = [[Sound alloc] initWithFile:fullPath];
    NSLog(@"Clip Length: %@", clip.length);
    NSLog(@"Clip Playing ? : %d", clip.playing);
    [clip play];
    NSLog(@"Played Clip");
}

这与git存储库中提供的演示项目几乎相同。但出于某种原因,我在控制台上得到了这个:

Song is /Users/shoaibi/Library/Application Support/iPhone Simulator/User/Applications/17FBA26F-6047-4D56-9E45-ADAFE07B7234/Test.app/sitar.wav
Failed to create OpenAL source, error code a004.
Clip Length: (null)
Clip Playing ? : 0
Played Clip

控制台上打印的目录上的ls显示sitar.wav具有正确的权限。可能是什么问题?可能是我停止使用的背景音AVAudioPlayer:

- (void)viewWillAppear:(BOOL)animated {

    //Stop the background music before my ears bleed :P
    d = [[UIApplication sharedApplication] delegate];
    if (d.bg.playing)
    {
        [d.bg stop];
        NSLog(@"Background music stoped");
    }

}

没有释放声音资源?

2 个答案:

答案 0 :(得分:3)

最新的Finch现在会检查初始化新Sound时是否初始化OpenAL。如果由于您忘记或无法初始化Finch而未设置当前的OpenAL上下文,则会收到更好的错误消息。试一试,可能是您的初始化代码有问题。

答案 1 :(得分:0)

当我在viewWillAppear中调用声音片段alloc时,我得到了同样的错误 - 好像它是在awakeFromNib完成其内容之前调用的。无论如何,转移分配,以便以后修复它。