2017-04-24 111 views
0

我在網上找到了這個示例代碼:https://developer.apple.com/library/content/samplecode/AVCam/Introduction/Intro.html如何爲IOS視頻應用選擇底部麥克風?

我正在嘗試將輸入麥克風從默認麥克風更改爲iPhone上的底部麥克風。有沒有人在Swift中有過這方面的經驗?我發現的唯一例子是Obj-C,並且在實現它們時導致錯誤。我使用蘋果的AVCam示例應用程序進行參考,音頻部分包含在下面。

// Add audio input. 
    do { 
     let audioDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio) 
     let audioDeviceInput = try AVCaptureDeviceInput(device: audioDevice) 

     if session.canAddInput(audioDeviceInput) { 
      session.addInput(audioDeviceInput) 
     } 
     else { 
      print("Could not add audio device input to the session") 
     } 
    } 
    catch { 
     print("Could not create audio device input: \(error)") 
    } 

回答

0

你應該使用嘗試設置會話的類別:

session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker, error: nil) 

本應利用底部的麥克風默認

0

如果你只需要音頻,你應該使用AVAudioSession - https://developer.apple.com/reference/avfoundation/avaudiosession

未測試您可以使用的示例代碼:

import AVFoundation 
. 
. 
private var session: AVAudioSession! 
private var input: AVAudioSessionPortDescription! 
. 
. 
. 
session = AVAudioSession.sharedInstance() 
do { 
    try session.setCategory(AVAudioSessionCategoryRecord) 

// Fetch Built in Mic 
if let availableInputs = session.availableInputs { 
    for inputSource in availableInputs { 
     if inputSource.portType == AVAudioSessionPortBuiltInMic { 
      input = inputSource 
      break 
     } 
} 

// Set preferred data source by location 
if let dataSources = input.dataSources { 
    for dataSource in dataSources { 
     if dataSource.location == AVAudioSessionLocationLower { 
      input.setPreferredDataSource(dataSource) 
      break 
     } 
    }  
} 

session.setPreferredInput(input) 
. 
.  
} catch { 
    .... 
}