2012-02-26 118 views
1

我正在製作一個小型iOS遊戲,並且完成了一切,除了聲音。我已經檢查過這些文件格式,嘗試過.wav和.aiff,但都沒有工作。相關的代碼如下:在iOS中播放的聲音

.h文件:

#import <AudioToolbox/AudioToolbox.h> 

@public SystemSoundID mBeep; 
NSString* path; 
NSURL* url; 

.m文件:

path = [[NSBundle mainBundle]pathForResource:@"hit" ofType:@"wav"]; 
url = [NSURL URLWithString:path]; 
AudioServicesCreateSystemSoundID((CFURLRef)url, &mBeep); 

AudioServicesPlaySystemSound(mBeep); //Gets called, doesn't play 

如果我使用無證ID之一,像1103AudioServicesPlaySystemSound,聲音正常播放。

我敢肯定我的文件都很好,因爲相同的.wav文件完美的作品在Android上,VLC時,iTunes等

有誰知道我做錯了嗎?

回答

6

最有可能的罪魁禍首是對WAV編碼。如this answer所示,iOS僅支持某些編解碼器,並且您嘗試播放的WAV可能使用不支持的WAV。

就像那個回答說,最簡單的解決方案將是使用命令行afconvert工具(無損)您的WAV轉換成蘋果的默認CAF格式,並使用它:

afconvert sound1.wav sound1.caf 

另一種可能性,和OP所具有的實際問題是該文件不存在和/或pathForResource沒有成功找到它,這將由path指示爲nil

+2

我試過了。您提供的命令不起作用,但通過一些Google搜索,轉換髮生在「afconvert -f caff -d aac -c 1 /Users/raghavsood/Desktop/iOS/Shared/Resources/hit.wav/Users/raghavsood/Desktop/iOS/Shared/Resources/hit.caf「即使在此之後,聲音也不會播放。我也試過使用aiff格式。你還有其他建議嗎? – 2012-03-06 15:56:40

+0

你能檢查你是否成功閱讀文件?嘗試對文件做其他事情,比如將其加載到NSData中。 – yuji 2012-03-06 17:58:11

+0

我使用以下命令來讀取文件中的數據: NSData * fileData = [NSData dataWithContentsOfFile:path];如果(fileData!= NULL) { NSLog(@「File read」); } 日誌語句不顯示,所以我猜這個文件沒有被讀取。我試過改變資源路徑。該文件存儲在/ Shared/Resources中。我嘗試過使用相對路徑,替代路徑以及沿途發明的其他路徑。他們都沒有工作。你還有其他建議嗎? – 2012-03-06 18:41:01