swift2.0 AVAudioRecorder的使用

以下仅仅是部分笔记,环境xcode7 beta6

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的相关文档:
/*
File:  AVAudioSettings.h
Framework:  AVFoundation
*/

/* This file's methods are available with iPhone 3.0 or later */

/* 以下键值对的值都是NSNumbers类型的 */

/* keys for all formats */
public let AVFormatIDKey: String /值是整型 CoreAudioTypes.h */
public let AVSampleRateKey: String /* 用浮点值表示赫兹 */
public let AVNumberOfChannelsKey: String /* 值是整型 */

/* 线性 PCM 关键字 */
public let AVLinearPCMBitDepthKey: String /* 值为下列整数之一: 8, 16, 24, 32 */
public let AVLinearPCMIsBigEndianKey: String /* 值为bool类型 */
public let AVLinearPCMIsFloatKey: String /* 值为bool类型 */

@available(iOS 4.0, *)
public let AVLinearPCMIsNonInterleaved: String /* 值为bool类型 */

/* 编码属性关键字 */
public let AVEncoderAudioQualityKey: String /* 值为枚举类型AVAudioQuality的值之一,为整数 */
@available(iOS 7.0, *)
public let AVEncoderAudioQualityForVBRKey: String /* 值为枚举类型AVAudioQuality的值之一,为整数。 只与AVAudioBitRateStrategy_Variable有关 */

/* AVEncoderBitRateKey 和 AVEncoderBitRatePerChannelKey只有其中一个应该被提供 */
public let AVEncoderBitRateKey: String /* 值是整型 */
@available(iOS 4.0, *)
public let AVEncoderBitRatePerChannelKey: String /* 值是整型 */
@available(iOS 7.0, *)
public let AVEncoderBitRateStrategyKey: String /* 值是一个AVAudioBitRateStrategy常量. 见下文. */
public let AVEncoderBitDepthHintKey: String /* 值是8到32的整型 */

/* 采样率转换属性关键字 */
@available(iOS 7.0, *)
public let AVSampleRateConverterAlgorithmKey: String /*值是一个AVSampleRateConverterAlgorithm的常量. 见下文. */
public let AVSampleRateConverterAudioQualityKey: String /*值是一个枚举类型AVAudioQuality的整型 */

/* 通道布局*/
@available(iOS 4.0, *)
public let AVChannelLayoutKey: String /* 值是包含一个AudioChannelLayout的NSData类型数据 */

/* 可选值 */

/* AVEncoderBitRateStrategyKey值*/
@available(iOS 7.0, *)
public let AVAudioBitRateStrategy_Constant: String
@available(iOS 7.0, *)
public let AVAudioBitRateStrategy_LongTermAverage: String
@available(iOS 7.0, *)
public let AVAudioBitRateStrategy_VariableConstrained: String
@available(iOS 7.0, *)
public let AVAudioBitRateStrategy_Variable: String

/* values for AVSampleRateConverterAlgorithmKey */
@available(iOS 7.0, *)
public let AVSampleRateConverterAlgorithm_Normal: String
@available(iOS 7.0, *)
public let AVSampleRateConverterAlgorithm_Mastering: String

public enum AVAudioQuality : Int { //枚举类型相应值
    
    case Min
    case Low
    case Medium
    case High
    case Max
}

 
下载了极客学院翻译的swift2.0的pdf,400多页的样子。 

另外,部分方法后面都挂有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
         ]
         
     }
原理,如果没有文件则新建,如果有则直接引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

limaning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值