您的位置:首页 > 移动开发 > Swift

swift2.0 AVAudioRecorder的使用

2015-09-05 09:54 656 查看
以下仅仅是部分笔记,环境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 AVSampleRateConverter
16bf8
Algorithm_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就是无法初始化,一直失败,而且找不到原因。

解决方法:

原理,如果没有文件则新建,如果有则直接引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios swift