session.setPreferredInput 在 Swift 中?

session.setPreferredInput in Swift?

我正在尝试为我的 AVAudioEngine 设置首选输入。我有以下代码:

var iphoneInput: AVAudioSessionPortDescription = AVAudioSession.sharedInstance().availableInputs[0] as! AVAudioSessionPortDescription

var error: NSError?

session.setPreferredInput(inPort: iphoneInput, error: error)

但是 Xcode 一直给我最后一行的错误,指出它不能使用类型为“(AVAudioSessionPortDescription, NSError?)”的参数列表调用 setPreferredinput

我假设它需要一个 NSErrorPointer 来表示错误,但我不知道如何在 swift 中创建一个。这是我的问题吗?如果是,我该如何创建一个?谢谢!

在变量前加一个&字符使其成为指针:

var myError: NSError?
session.setPreferredInput(iphoneInput, error: &myError)
if myError == nil {
    // do stuff
}

注意:在 Swift 中,您不必使用方法的第一个参数名称。

for swift 3 不起作用...你必须做(翻译自 ADC: https://developer.apple.com/library/content/qa/qa1799/_index.html )

private func setupSession(){


let session = AVAudioSession.sharedInstance()

// setup session:
do {
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .defaultToSpeaker)
    try session.setActive(true)
}
catch _{

}

// https://developer.apple.com/library/content/qa/qa1799/_index.html

// let portDescr = AVAudioSessionPortDescription()

// headers:
// AVAudioSessionPortLineIn: String // Line level input on a dock connector
// AVAudioSessionPortBuiltInMic: String // Built-in microphone on an iOS device
// AVAudioSessionPortHeadsetMic: String // Microphone on a wired headset.  Headset refers to an accessory that has headphone outputs paired with a microphone.

// You cannot set directly..
// portDescr.portType = AVAudioSessionPortLineIn

guard let availableInputs = session.availableInputs else {
    return
}


var mic : AVAudioSessionPortDescription? = nil
for input in availableInputs {      
    if input.portType == AVAudioSessionPortBuiltInMic{
        mic = input
    }
}

guard mic != nil else{
    return
}

do {
    try session.setPreferredInput(mic)
}catch _ {
    print("cannot set mic ")
}   

}