2010-06-16 115 views
2

我有一個即將完成的應用程序,但遇到了一個煩人的問題。在應用程序中,當我點擊某個對象時,我想播放聲音,然後對象消失。這是一段代碼我使用:音頻在iPhone模擬器中播放良好,但在iPhone中不能播放

在Object.h

#import <UIKit/UIKit.h> 
#import <AudioToolbox/AudioServices.h> 

@interface Object: UIView { 
    UIImageView *image; 
    CGPoint location; 
    SystemSoundID soundFileID; 
} 

在Object.m

- (void)initWithSound { 
    //a bunch of code to define the image and location 
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Sound" ofType:@"caf"]; 
    CFURLRef soundURL = (CFURLRef)[NSURL fileURLWithPath:soundPath]; 
    AudioServicesCreateSystemSoundID(soundURL, &soundFileID); 
    return self; 
} 

然後在我的mainViewController,幾個對象將根據用戶的動作來創建並添加以不同圖像在不同位置的屏幕。在敲擊物體本身時,它會產生聲音並消失。

在Object.m

- (void)tapped { 
    AudioServicesPlaySystemSound(soundFileID); 
    image.image = nil; 
    [self removeFromSuperview]; 
} 

一切工作發現在模擬器。但是當我在iPhone上嘗試時,該物體按照預期敲擊時消失,但聲音不起作用。嘗試在3G和3GS上,都不會播放聲音。我認爲這應該工作。我犯了什麼錯誤嗎?謝謝你的幫助。

編輯:只是想到了一些我不知道相關與否。我還使用麥克風來檢測AVAudioRecorder從用戶輸入的聲音。不確定這是否會影響音頻輸出。

+1

檢查,如果你的聲音文件被命名爲「Sound.caf」,而不是「的聲音.caf「 - iPhone上的文件系統區分大小寫,而在MacOS中則不是 - 它通常會導致此類問題。 – Vladimir 2010-06-16 15:19:35

+0

感謝您的建議弗拉基米爾。檢查文件名是否正確。 – Anthony 2010-06-16 15:32:02

+0

要檢查一個簡單的事情就是註釋'[self removeFromSuperview];'只是爲了查看聲音是否會自行播放,而不添加從視圖中刪除按鈕。有時更容易「調整」調試以找出哪個部分導致問題。如果聲音播放正常,那麼您知道這是導致錯誤的移除部分。我不知道爲什麼,但從視圖中刪除它可能會取消該操作,因此您可能必須首先延遲刪除或隱藏它,並在音頻完成後刪除隱藏的對象。 – iwasrobbed 2010-06-16 16:17:01

回答

2

終於找到問題所在!我不得不建立一個音頻會話。就是這樣!顯然我需要更多的關於音頻和視頻的研究。

只是有人誰可能會遇到同樣的情況我,這裏是我在viewDidLoad方法中添加的代碼:

AVAudioSession * audioSession = [AVAudioSession sharedInstance]; 

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error]; 

[audioSession setActive:YES error: &error]; 
+0

您是否包含AudioToolbox以外的任何其他框架? – 2011-04-30 07:54:56

+0

我還添加了AVFoundation和CoreAudio。 – Anthony 2011-05-17 17:17:14

+0

謝謝! AVAudioSession位於AVFoundation框架中,因此請確保將其包含在您的構建中。 – deepwinter 2013-02-01 06:46:21