0

好吧,我有两个问题。我正在使用 AVAudioPlayer 播放 .caf 格式的简单音频文件。我想做的是有一个播放和暂停按钮。这是一个简单的 IBAction 示例,用于从按钮播放音频。

- (IBAction) clear {
NSString *path = [[NSBundle mainBundle] pathForResource:@"clear" ofType:@"caf"];
AVAudioPlayer* myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
myAudio.delegate = self;
myAudio.volume = 1.0;
myAudio.numberOfLoops = 0;
[myAudio play]; 
}

因此,当我继续使用该方法创建另一个 IBAction 时...

- (IBAction) stopaudio {
[myAudio stop];
audioPlayer.currentTime = 0;
}

我编译并且 xcode 告诉我 stopaudio IBAction 中的 myAudio 没有定义。如何修复它以便能够在另一个 IBAction 中访问 myAudio?

我的第二个问题是我正在使用 NavigationController 来设置 TableView,当我进行选择时,它会将我带到带有后退按钮的 UIView 以返回到 TableView。当我回到 TableView 时,我想要做的是杀死我在 UIView 中播放的任何音频。上面的代码是我将在 UIView 中使用的代码的一部分。

还有一个快速的问题。假设我有一个 1 分钟长的音频文件。再次单击播放将在旧实例完成播放之前重叠该音频的新实例。如何检查 myAudio 是否正在播放,并且在 myAudio 完成播放之前不允许再次播放?

谢谢你!

4

1 回答 1

3

首先,您应该阅读文档。它将消除您几乎所有的问题。不过,要从类的所有方法访问您的 AVAudioPlayer 实例,您应该在 .h 文件中定义它。要阻止播放器返回上一个屏幕,请调用[myAudio stop]您的viewWillDisappear:(BOOL)animated方法。关于你的最后一个问题。如果您myAudio在 .h 文件中定义,您将能够检查它是否正在播放。喜欢

- (IBAction) clear {
    if(![myAudio isPlaying]){
        [myAudio play]; 
    }

}

于 2009-12-14T07:22:49.557 回答