2012-12-11 104 views
4

我知道這是一個問題已經被詢問了很多次,並且我已經檢查了與SO有關的大多數答案,但是我沒有運氣找到我的問題的正確答案。聲音不在iPad揚聲器上播放,但在耳機和iPod Touch/iPhone揚聲器上正常工作

這裏的問題是:

我嘗試在觸發一些事件在比賽中發揮一個MP3文件(僅2秒,最多),我用的是AudioPlayer這樣做,下面是代碼塊:

NSError *error; 
AVAudioPlayer *audioPlayer = [[[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource: @"ding" withExtension: @"mp3"] error:&error] autorelease]; 
if (error) { 
    NSLog(@"Error creating audio player: %@", [error userInfo]); 
} 
else { 
    BOOL success = [audioPlayer play]; 
    // This always is "Play sound succeeded" 
    NSLog(@"Play sound %@", success ? @"succeeded" : @"failed"); 
} 

當我運行在iPhone 4S,iTouch的3/4這段代碼時,聲音總是發揮出色,清晰,但在iPad上1或iPad2的,沒有來自揚聲器的聲音出來。但是,當我插入耳機時,發生了耳機發出聲音的奇怪現象! iPad不處於靜音模式,URL正確。

我很困惑,爲什麼會發生這種情況。

PS:我嘗試下面的代碼(從HERE GOT)輸出音頻輸出端口類型:

CFDictionaryRef asCFType = nil; 
UInt32 dataSize = sizeof(asCFType); 
AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &dataSize, &asCFType); 
NSDictionary *easyPeasy = (NSDictionary *)asCFType; 
NSDictionary *firstOutput = (NSDictionary *)[[easyPeasy valueForKey:@"RouteDetailedDescription_Outputs"] objectAtIndex:0]; 
NSString *portType = (NSString *)[firstOutput valueForKey:@"RouteDetailedDescription_PortType"]; 
NSLog(@"first output port type is: %@!", portType); 

當我在我的耳機插好,產量爲「第一輸出端口類型爲耳機! 「當我拔掉它,輸出原來是「第一個輸出端口類型是揚聲器!」

如果有人能提供一些幫助或建議,那將會很棒。

回答

5

有一個代碼更改解決方案,而且是最終用戶解決方案:將「Ring/Silent開關」打開。具體而言,問題在於,如果手機處於靜音模式,AVAudioSessions的默認設置AVAudioSessionCategorySoloAmbient將保持沉默。

正如樓主所說,你可以通過調用覆蓋此行爲:

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

AVAudioSession Reference建議設置AVAudioSessionCategoryPlayback類別:

用於播放錄製的音樂或其他聲音認爲是中央您的應用程序的成功使用。

0

找到解決方案! 後,我加入這行代碼播放之前,最後的聲音從揚聲器播放出來

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

我現在還是不明白爲什麼,我就鑽進去了。:)

+0

酷。現在你應該將你的答案標記爲正確:) –

+0

OriginalWood,你有沒有發現更多的東西?我有一個類似的問題,通過播客應用程序以及Dropbox應用程序在iPhone上播放的MP3文件。使用耳機它播放良好,但沒有耳機(通過揚聲器)它是失真的。我在其他一些手機上嘗試了這一點,這是同樣的問題。在我看來,這是我如何導出MP3或其他東西。可能是你要看的東西是音頻文件本身,因爲這似乎是我的問題。你有沒有試過通過其中一個標準iOS應用播放特定的mp3文件? – 2012-12-11 16:32:19

2

要更新@JonBrooks與斯威夫特2語法上面的回答,我把我的viewDidLoad()覆蓋靜音開關,讓我的聲音播放以下:

do { 

    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 

} catch let error as NSError { 

    print(error) 
} 
相關問題