簡體   English   中英

使用AVAudioPlayer播放的MP3無法在設備上運行

[英]MP3 playing using AVAudioPlayer not working on device

我在iOS 4.2的3GS iPhone上測試我的應用程序

我使用以下代碼在我的IBAction中播放聲音。 它在模擬器(iPad和iPhone)中完美運行 - 我聽到了聲音。

NSString *pathToMusicFile1 = [[NSBundle mainBundle] pathForResource:@"alarm" ofType:@"mp3"];
NSError *error;
alarmSound = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:pathToMusicFile1] error:&error]; 
NSLog(@"Song1 Loaded");
if (alarmSound == nil) {
    NSLog(@"Error playing sound");
} else {
    alarmSound.numberOfLoops = 20;
    alarmSound.volume = 1.0;
    [alarmSound play];
}

我已經將所有聲明正確(標題和框架等),因為我可以在模擬器中聽到聲音。

我還檢查過我的手機沒有處於靜音模式! 我聽到了通用iphone GUI的其他聲音。 (來自日期選擇器的例子)。

我還清理了所有目標並刪除了應用程序以重新安裝。

有什么想法有什么不對?!

所以,我也有這個問題 - 我很確定它是同一個......

我們已經在應用程序商店中安裝了一年左右的應用程序,最近我們需要更改一些內容,盡管沒有任何功能。

突然,聲音停止工作 - 最新的sdk版本(版本4.0)和設備上的模擬器(再次運行iOS 4)。

總是對我們有用的代碼就是這個......

NSString *sound_file;
if ((sound_file = [[NSBundle mainBundle] pathForResource:@"track1" ofType:@"mp3"])){

NSURL *url = [[NSURL alloc] initFileURLWithPath:sound_file];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
audioPlayer.delegate = self;
[url release];

[audioPlayer prepareToPlay];
[audioPlayer play];

}

最后,我發現你現在需要設置AVAudioSession播放的類型,以便通過揚聲器播放聲音,就像它已經做到的那樣! 將以下代碼行放入app appid applicationDidFinishLaunching事件處理程序中......

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

不要忘記在你的app delegate .h文件中添加include(顯然你還需要導入AVFoundation框架,如果還沒有這樣做的話)...

#import <AVFoundation/AVAudioSession.h>

希望這會讓你的聲音在設備上播放。

不要因為我認為可能是一個單獨的問題而變得明白,那聲音仍然沒有在模擬器中播放。 我見過其他帖子暗示這是事實,但我不確定這是多么普遍。 我發現如果我選擇iPad 3.2作為我的模擬器,它至少可以解決這個問題。 歡樂!

對我來說似乎很瘋狂的是,這肯定會影響到大量的人,但很難找到關於某些應該是一個眾所周知的問題的信息或建議 - 畢竟,我在論壇上看到過很多帖子似乎沒有得到回答。

無論如何,希望這有助於其他人。

將“audioPlayer”變量作為屬性非常重要 否則使用ARC,它會在有機會玩之前釋放!

我花了半個小時和一些谷歌搜索這個A-ha時刻。

我的聲音現在完美無缺!

我的問題是iOS在文件有機會播放之前自動釋放我的AVAudioPlayer實例。 奇怪的是,這只發生在MP3而非AU文件中。 解決方法是不將其設置為自動釋放,然后在委托方法中釋放它...

- (void)playSound:(NSString *)sound
{
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:sound ofType:@""]] error:NULL];
    audioPlayer.delegate = self;
    [audioPlayer play];
}

...然后在委托方法中......

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    [player release];
}

......現在很棒。

你試過[NSURL URLWithString:pathToMusicFile1]; 而不是fileURLWithPath:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM