分聲音與震動兩部分來說:
聲音的播放
Q:iOS聲音的播放有方式有哪些?
Google大神:
- System Sound Services
它是最底層也是最簡單的聲音播放服務,呼叫 AudioServicesPlaySystemSound 這個方法就可以播放一些簡單的聲音檔,注意:此方法只適合播放一些很小的提示或者警告音,因為它有很多限制: - 聲音長度要小於 30 秒
- In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
- 打包成 .caf, .aif, 或者 .wav 的文件
- 不能控制播放的進度
- 調用方法後立即播放聲音
- 沒有循環播放和立體聲控制(可透過AudioServicesAddSystemSoundCompletion設定)
- AVAudioPlayer
AVAudioPlayer是 AVFoundation.framework 中定義的一個Class,所以使用之前要先在Project中加入AVFoundation.framework。
AVAudioPlayer類似一個進階的播放器,它支援較廣泛的聲音檔格式,主要是以下這些格式:
- AAC
- AMR(AdaptiveMulti-Rate, aformatforspeech)
- ALAC(AppleLossless)
- iLBC(internetLowBitrateCodec, anotherformatforspeech)
- IMA4(IMA/ADPCM)
- linearPCM(uncompressed)
- µ-lawanda-law
- MP3(MPEG-1audiolayer3
Q:有沒有 SystemSound Services 的範例?
Google大神:
- (void) showReminder{
SystemSoundID sysSoundId = 0;
NSString *path = [[NSBundle mainBundle] pathForResource:@"alarm" ofType:@"caf"];
NSURL *filepath = [NSURL fileURLWithPath: path];
AudioServicesCreateSystemSoundID((__bridge_retained CFURLRef) filepath, &sysSoundId);
AudioServicesPlaySystemSound(sysSoundId);
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
}
Q:為什麼我編譯會失敗啊出現 Unknown type name 'SystemSoundID' 的訊息
Google大神:請在你的.h檔 加上
Q:為什麼我編譯會失敗啊出現 Unknown type name 'SystemSoundID' 的訊息
Google大神:請在你的.h檔 加上
#include
Q:加上那一行還是不行啊,出現 Undefined symbols for architecture armv7:
"_AudioServicesPlayAlertSound", referenced from: xxx 阿?
Google大神:
請在 framework 裡面加上AudioToolBox.framework
作法:在Project上點右鍵->選擇Target底下的BuildPhase -> Link Binary With Libraries
再加入AudioToolBox.framework
Q6:編譯都過了,執行後,為什麼沒有聲音?
Google大神:請檢查檔案格式,跟Encoding 編碼的方法,還有要記得開聲音喔。
另外,可以在Terminal裏使用Developer的工具轉檔,
利用轉檔工具把它轉為CAF格式這樣就萬無一失了。
輸入
afconvert -f caff -d LEI16@44100 -c 1 jj01.mp3 jj01.caf
請在 framework 裡面加上AudioToolBox.framework
作法:在Project上點右鍵->選擇Target底下的BuildPhase -> Link Binary With Libraries
再加入AudioToolBox.framework
Q6:編譯都過了,執行後,為什麼沒有聲音?
Google大神:請檢查檔案格式,跟Encoding 編碼的方法,還有要記得開聲音喔。
另外,可以在Terminal裏使用Developer的工具轉檔,
利用轉檔工具把它轉為CAF格式這樣就萬無一失了。
輸入
afconvert -f caff -d LEI16@44100 -c 1 jj01.mp3 jj01.caf
Q7:那AVAudioPlayer的範例呢?
Google大神:
NSString *soundFilePath =
[[NSBundle mainBundle] pathForResource: @"as01"
ofType: @"caf"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
AVAudioPlayer *newPlayer =
[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
error: nil];
self.player = newPlayer;
[self.player prepareToPlay];
self.player.delegate=self;
self.player.numberOfLoops = -1; // Loop playback until invoke stop method
[self.player play];
沒有留言:
張貼留言