let recordUrl:NSURL! = NSURL.fileURLWithPath(NSTemporaryDirectory().stringByAppendingString("record.lpcm"))
let recordSetting = [AVFormatIDKey:kAudioFormatLinearPCM,
AVSampleRateKey:44100,
AVNumberOfChannelsKey:1,
AVLinearPCMBitDepthKey:16,
AVLinearPCMIsFloatKey:false,
AVLinearPCMIsBigEndianKey:false,
AVEncoderAudioQualityKey:AVAudioQuality.Medium] as Dictionary
print(recordUrl)
let audioSession = AVAudioSession.sharedInstance()
do{
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setActive(true)
try recorder = AVAudioRecorder.init(URL: recordUrl, settings: recordSetting)
print("成功初始化")
}
catch{
}
在 recordSetting中,xcode提示: type of expression is ambiguous without more context,有可能是字典配置不完整,需要参考API补充完整。
阅读AVFormatIDKey的相关文档:
另外,部分方法后面都挂有throws(抛出函数),表示需要用do try catch来写。
修改为:
let recordUrl:NSURL = NSURL.fileURLWithPath(NSTemporaryDirectory().stringByAppendingString("record.caf"))
print(recordUrl)
let recordSetting = [AVFormatIDKey:"kAudioFormatLinearPCM",
AVSampleRateKey:"44100.0",
AVNumberOfChannelsKey:"1",
AVLinearPCMBitDepthKey:"16",
AVLinearPCMIsFloatKey:"false",
AVLinearPCMIsBigEndianKey:"false",
AVLinearPCMIsNonInterleaved:"false",
AVEncoderAudioQualityKey:"AVAudioQuality.Medium",
AVEncoderAudioQualityForVBRKey:"false",
AVEncoderBitRateKey:"16",
AVEncoderBitRateStrategyKey:"AVAudioBitRateStrategy_Constant.lowercaseString",
AVEncoderBitDepthHintKey:"8",
AVSampleRateConverterAlgorithmKey:"AVSampleRateConverterAlgorithmKey.lowercaseString",
AVSampleRateConverterAudioQualityKey:"AVAudioQuality.Medium",
AVChannelLayoutKey:"1"
]
do{
try recorder = AVAudioRecorder.init(URL: recordUrl, settings: recordSetting)
print("初始化recorder成功")
}
catch{
}
现在的问题是, recorder就是无法初始化,一直失败,而且找不到原因。
解决方法:
let fileManager =
NSFileManager
()
let documentsFolderUrl:
NSURL
?
do
{
documentsFolderUrl =
try
fileManager.URLForDirectory(.DocumentDirectory,
inDomain: .UserDomainMask,
appropriateForURL:
nil
,
create:
false
)
}
catch
{
documentsFolderUrl =
nil
}
return
documentsFolderUrl!.URLByAppendingPathComponent(
"Recording.m4a"
)
func audioRecordingSettings() -> [String : AnyObject]{
return
[
AVFormatIDKey :
NSNumber
(unsignedInt: kAudioFormatMPEG4AAC),
AVSampleRateKey : 16000.0 as
NSNumber
,
AVNumberOfChannelsKey : 1 as
NSNumber
,
AVEncoderAudioQualityKey : AVAudioQuality.Low.rawValue as
NSNumber
]
}