按下home键后iPhone应用程序没有声音

Posted

技术标签:

【中文标题】按下home键后iPhone应用程序没有声音【英文标题】:No sound in iPhone app after pressing home button 【发布时间】:2011-12-11 14:43:51 【问题描述】:

我的声音在模拟器中运行良好,但是当我在手机上运行应用程序时,在按下主页按钮然后返回应用程序后声音停止工作。这是在ios5中。我该如何解决这个问题? AVAudioPlayer 的委托似乎也停止了。应用不会崩溃。

NSString *path = [[NSBundle mainBundle]
    pathForResource:@"Beep01" ofType:@"wav"];
clickSound =[[AVAudioPlayer alloc] initWithContentsOfURL:
    [NSURL fileURLWithPath:path] error:NULL];
clickSound.delegate = self;
[clickSound prepareToPlay];

后来我用[clickSound play]播放它;

【问题讨论】:

【参考方案1】:

确保你有

#import <AVFoundation/AVFoundation.h>

在您的标题中。 然后在你的 AppDelegate 中你应该有这个方法:

- (AVAudioPlayer *) getSound: (NSString *) soundName   
@try               
    AVAudioPlayer *sound = [[self getDictionary] objectForKey: soundName];      
    if (!sound)            
        NSError *error;
        NSString *path = [[NSBundle mainBundle] pathForResource: soundName ofType: nil];             
        sound = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath: path] 
                                                       error: &error];             
        if (!sound) 
            //NSLog(@"ERROR: Wrong sound format: %@. Description: %@",  soundName,  [error localizedDescription]);
         else 
            sound.volume = 0.7;
            //int len = sound.duration;
            [[self getDictionary] setObject: sound forKey: soundName];
            // NSLog(@"%@ loaded, duration: %i sec", soundName, len);
            [sound release];
            
     
    return sound;
 
@catch (id theException) 
    NSLog(@"ERROR: %@ not found!", soundName);
 
return nil;



- (NSMutableDictionary *) getDictionary 
if (!dictionary)  //Hashtable
    dictionary = [[NSMutableDictionary alloc] init]; 
    NSLog(@"new Dictionary");

return dictionary;

- (void) playSound: (NSString *) soundName 
AVAudioPlayer *sound = [self getSound: soundName];
if (sound)    
    sound.currentTime = 0;        
    if (!sound.playing) 
        sound.numberOfLoops = 0;
        [sound play];
        
 


- (void) stopSound: (NSString *) soundName 
AVAudioPlayer *sound = [self getSound: soundName];
if (sound && sound.playing)            
    [sound stop];         
 

在您的 AppDelegateDidFinishLaunching 中预加载您将使用的所有声音:

//pre-Load sounds
[self getSound: @"testSong.wav"];

在你的 - (void)play 方法中

    YourAppDel *appDel = [UIApplication sharedApplication].delegate;
    [appDel playSound:@"testSong.wav"];

享受

【讨论】:

谢谢。它并没有真正解决我的问题,但它是一个优雅的解决方案。我认为它与我同时运行的 AVAudioRecorder (某种 VU Meter)发生冲突。所以我将此作为解决方案,并将找出一个新问题。谢谢!【参考方案2】:

当您的应用进入后台(或闹钟响起、手机接听电话或屏幕锁定)时,您的应用的音频会话会中断,并且您的音频播放器会暂停。处理此中断的推荐方法是在音频播放器的委托中实现AVAudioPlayerDelegate 方法– audioPlayerBeginInterruption:-audioPlayerEndInterruption:。来自苹果的documentation:

- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player 
    if (playing) 
        playing = NO;
        interruptedOnPlayback = YES;
        [self updateUserInterface];
    


- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player 
    if (interruptedOnPlayback) 
        [player prepareToPlay];
        [player play];
        playing = YES;
        interruptedOnPlayback = NO;
    

请注意,当调用-audioPlayerEndInterruption: 时,您会再次将-prepareToPlay 发送到您的音频播放器实例。如果您在中断后不调用它,您的音频会话可能不会为您重新启动,这会产生您上面描述的效果 - 神秘的死音频。

【讨论】:

以上是关于按下home键后iPhone应用程序没有声音的主要内容,如果未能解决你的问题,请参考以下文章

录制在 iPhone 应用程序中创建的声音

使用 Javascript 在 iPhone 网络应用程序中播放声音?

有谁能告诉我iphoneXR 玩音游的时候 老划到home键然后界面就出去了 怎么破

有没有办法在使用 GLFW 按下一个键后只处理一个输入事件?

AVPlayer 没有声音

需要访问 iPhone 使用的默认相机快门声音