处理音频中断 AVAudioPlayer

发布于 2024-11-30 21:33:19 字数 2125 浏览 0 评论 0原文

当单击按钮等时,我在我的应用程序中播放“声音效果”,并且我在让代表在 AVAudioPlayer 类中正常工作以保持音乐在声音之后播放时遇到了一些困难。我已经导入了框架并设置了委托,但我似乎无法让 AVAudioSession 共享实例正常工作...我知道我错过了一些东西,但即使在苹果文档中,似乎也无法在任何地方找到明确的答案。这是我用来尝试完成此操作的代码。

#import "AVFoundation/AVAudioPlayer.h
#import "MediaPlayer/MediaPlayer.h"

@interface HomeViewController : UIViewController <AVAudioPlayerDelegate, MPMediaPlayback   
> {

当按下按钮时,

-(IBAction)About
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"button" ofType:@"caf"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudio.delegate = self;
    [theAudio play]; 

    AboutViewController *about = [[AboutViewController alloc] init];
    [self presentModalViewController:about animated:YES];

    NSString *path1 = [[NSBundle mainBundle] pathForResource:@"move" ofType:@"caf"];
    AVAudioPlayer* theAudio1 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path1] error:NULL];
    theAudio.delegate = self;
    [theAudio1 play];     
}

代表试图将我的声音作为“环境噪音”播放,或者在我的声音发生后恢复播放

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{

}

-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{

}

-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)player
{

}

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags
{
    if (flags)
    {
        AVAudioPlayer *audio = [[AVAudioPlayer alloc] init];
        [audio setDelegate:self];
        [audio play];
    }
}

现在,据我所知,最后一个代表是真正在我的情况下使用的唯一代表,而我所拥有的不会工作,因为我需要像这样使用 [AVAudioSession SharedInstance] 但我似乎无法让 AVAudioSession 工作!

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags
{
    if (flags == AVAudioSessionFlags_ResumePlay)
    {
        [player play];
    }
 }

任何帮助或建议将不胜感激。我基本上只需要知道如何获取 [AVAudio SharedInstance] 因此,如果有人知道我需要导入什么类或需要添加什么框架才能使其正常工作,那么我将非常感激!

谢谢

I am playing "sound effects" in my app when buttons are clicked and such and I have been having some difficulties getting the delegates to work properly within the AVAudioPlayer class to keep the music playing after the sound. I have the framework imported and delegates set but I can not seem to get the AVAudioSession shared instance to work... I know I am missing something but can not seem to find a clear answer anywhere even within apples docs. Here is the code I am using trying to accomplish this.

#import "AVFoundation/AVAudioPlayer.h
#import "MediaPlayer/MediaPlayer.h"

@interface HomeViewController : UIViewController <AVAudioPlayerDelegate, MPMediaPlayback   
> {

When a button is pushed

-(IBAction)About
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"button" ofType:@"caf"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudio.delegate = self;
    [theAudio play]; 

    AboutViewController *about = [[AboutViewController alloc] init];
    [self presentModalViewController:about animated:YES];

    NSString *path1 = [[NSBundle mainBundle] pathForResource:@"move" ofType:@"caf"];
    AVAudioPlayer* theAudio1 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path1] error:NULL];
    theAudio.delegate = self;
    [theAudio1 play];     
}

Delegates trying to either play my sound as a "ambient noise" or just resume play after my sound happens

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{

}

-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{

}

-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)player
{

}

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags
{
    if (flags)
    {
        AVAudioPlayer *audio = [[AVAudioPlayer alloc] init];
        [audio setDelegate:self];
        [audio play];
    }
}

Now the last delegate from what I understand is the only delegate of use really in my case and what I have will not work since I need to be using the [AVAudioSession SharedInstance] like this but I can not seem to get the AVAudioSession to work!

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags
{
    if (flags == AVAudioSessionFlags_ResumePlay)
    {
        [player play];
    }
 }

Any help or suggestions would be greatly appreciated. I basically just need to know how to get the [AVAudio SharedInstance] so if anyone knows what class I need to import or framework I need to add to get this working it would be very much obliged!

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文