2017-11-18 2 views
1

저는 AudioKit과 IOS 오디오가 일반적으로 처음이므로 매우 어리석은 질문이 될 수 있습니다. 내가 성취하고자하는 것은 마이크에서 클립 (또는 파일에 간단한 레코드)을 녹음하는 것입니다.AudioKit - 출력을 보내지 않고 기본 입력 (마이크로폰)을 녹음하십시오.

출력 (마이크에서 직접 입력)을 출력으로 보내지 않으려면 내 녹음 또는 앱을 사용할 때 마이크를 음소거 시키십시오 (대부분 디버깅 할 때 피드백을 받기 때문에 음소거를 해제하고 싶습니다. 예를 들어 사용자가 헤드폰을 가지고있을 때).

AppDelegate.swift -> application 기능에 AKSettings.audioInputEnabledAKSettings.defaultToSpeaker을 사용해 보았습니다. (적절한 장소입니까?)하지만 원하는대로 작동하지 못했습니다. 부스터를 통해 마이크를 연결하고 게인을 0으로 설정하려고했으나 빈 파일이 기록되었습니다.

어쩌면 올바른 용어를 사용하지 않았을 수 있습니다. 그래서 당신이 나를 바로 잡으면 기쁠 것입니다. 여기

AppDelegate.swift

AKSettings.defaultToSpeaker = true 
AKSettings.audioInputEnabled = false 
try! AKSettings.setSession(category: .playAndRecord) 

기록 코드 코드 내 조각 (클립 레코더를 사용하지만이 질문은 일반 레코더도 추측) :

var mixer: AKMixer? 
let length = 4.0 
let microphone = AKMicrophone() 
/* ... */ 
let booster = AKBooster(microphone) 
booster.gain = 0 
self.mixer = AKMixer(booster) 
AudioKit.output = self.mixer 
AudioKit.start() 
/* ... */ 
self.clipRecorder = AKClipRecorder(node: mixer) 
try clipRecorder.recordClip(time: clipRecorder.currentTime, duration: length, tap: nil, completion: { url, something, err in 
    /* ... */ 
} catch { 
    print("error") 
} 

감사합니다 대단히 AudioKit 녀석들, 내가 왜 잘못했는지에 대해 더 설명해 주시면 고맙겠습니다.

편집 : 현재 코드를 Aurelius가 제공 했으므로 문제는 내가 게인을 0으로 설정하면 실제로 마이크 피드백을 듣지 못하지만 실제로 녹음 된 것은 모두 완전 무음입니다.

AppDelegate.swift

AKSettings.defaultToSpeaker = true 
AKSettings.audioInputEnabled = true 
try! AKSettings.setSession(category: .playAndRecord) 

ViewController.swift 편집은

override func viewDidLoad() { 
    super.viewDidLoad() 
    silence = AKBooster(mic, gain: 0) 
    //mixer = AKMixer(silence) 
    AudioKit.output = silence 
    AudioKit.start() 
    clipRecorder = AKClipRecorder(node: silence!) 
    clipRecorder?.play() 
} 

@IBAction func recordButtonPressed(_ sender: Any) { 
    print("perssed") 
    do { 
     try clipRecorder?.recordClip(time: (clipRecorder?.currentTime)!, duration: 3.0, tap: nil, completion: {url,_,_ in 
      print("done") 
     }) 
    } catch { 
     print("error") 
    } 
} 

2 : 내가 참으로 잘못된 무엇인지 파악하고, 자신과 싸우는 몇 시간 후 확인, 아우렐리우스가 옳았다 그것은 단지 사물의 순서였습니다. 물론 레코더에 침묵 (게인 = 0) 전에 부스터를 제공해야하며, 레코더가 스피커로 갈 때 침묵하는 올바른 값을 얻습니다. 예를 위해 내가 수정 위에 제공 한 꽤 간단합니다 - ViewController.swift

override func viewDidLoad() { 
    super.viewDidLoad() 
    silence = AKBooster(mic) 
    clipRecorder = AKClipRecorder(node: silence!) 
    silence.gain = 0 
    AudioKit.output = silence 
    AudioKit.start() 

    clipRecorder?.play() 
} 

@IBAction func recordButtonPressed(_ sender: Any) { 
    print("perssed") 
    do { 
     try clipRecorder?.recordClip(time: (clipRecorder?.currentTime)!, duration: 3.0, tap: nil, completion: {url,_,_ in 
      print("done") 
     }) 
    } catch { 
     print("error") 
    } 
} 

답변

1

난 당신이 녹음중인 노드 후 부스터를 넣어 필요가 있다고 생각합니다. 일반 레벨을 기록한 다음 게인이 0으로 설정된 부스터를 통해 보냅니다.

+0

감사합니다. Aurelius, 앱을 실행할 때 (녹음 할 때만이 아니라)는 언제나 내 마이크에서 계속 의견을 듣습니다. 부스터 배치를 사용하려고했지만'AudioKit.output = self.mixer, AudioKit.start()'도 변경해야했는데, 뭔가 잘못하고 있다고 느낍니다. –

+0

게인이 0 인 부스터를 넣으면 아무 것도 들리지 않을 것입니다. 프로젝트를 공유 할 수 있습니까? –

+0

다시 한번 감사드립니다. Aurelius, 나중에 집에 돌아 왔을 때 코드를 제공 할 것입니다.이 튜토리얼은 내가 작성한 튜토리얼입니다. http://audiokit.io/examples/MicrophoneAnalysis/이 튜토리얼/예제가 위에 있어야 함 나는 옳은 것이 무엇인가? 당신이 말했듯이 여기에 부스터를 사용하는 것을 볼 수 있습니다. –

관련 문제