2017-11-18 3 views
1

Dies kann eine sehr dumme Frage sein, wie ich AudioKit und IOS Audio im Allgemeinen wirklich neu bin. Was ich versuche, ist, einen Clip (oder einfach nur eine Aufnahme in Datei) von meinem Mikrofon aufzunehmen.AudioKit - Aufnahme der Standard-Eingang (Mikrofon), ohne es an den Ausgang zu senden

Ich möchte nicht, dass meine App den Eingang (vom Mikrofon) direkt an den Ausgang sendet, ich möchte, dass das Mikrofon beim Aufnehmen oder Verwenden meiner App stummgeschaltet wird (meistens weil ich beim Debuggen Feedback bekomme, möchte ich die Stummschaltung aufheben Wenn der Benutzer zum Beispiel Kopfhörer benutzt).

Versuchte mit AKSettings.audioInputEnabled und AKSettings.defaultToSpeaker in meiner AppDelegate.swift -> application Funktion (ist dies der richtige Ort, dies zu tun?) Zu spielen, konnte aber nicht, wie ich will arbeiten. Versucht auch, das Mikrofon über einen Booster anzuschließen und die Verstärkung auf 0 zu setzen, aber dann wurde eine leere Datei aufgenommen.

Vielleicht verwende ich nicht die richtigen Bedingungen, also werde ich mich freuen, wenn Sie mich korrigieren.

Hier ist mein Stück Code

AppDelegate.swift

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

Aufnahmecode (mit Cliprecorder aber ich denke, diese Frage auch für die regelmäßige Recorder):

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") 
} 

Danke Sehr viel AudioKit Jungs, ich würde mich auch über mehr erklären, was und warum ich falsch gemacht habe, bitte, wenn es nicht störend ist.

EDIT: Bereitstellung der aktuellen Code wie Aurelius gefragt, das Problem ist, wenn ich Verstärkung auf 0 einstellen, ich höre nicht das Mikrofon Feedback in der Tat, aber alles aufgezeichnet ist komplette Stille.

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") 
    } 
} 

Edit 2: ok, nach wenigen Stunden mit mir selbst zu kämpfen ich herausgefunden, was falsch war, und in der Tat Aurelius war richtig Es war nur die Reihenfolge der Dinge. Der Rekorder muss natürlich vor dem Stummschalten mit dem Booster versorgt werden (Gain = 0), der Rekorder erhält die korrekten Werte, die bei den Lautsprechern zum Schweigen gebracht werden. für das Beispiel i über dem Update zur Verfügung gestellt haben, ist recht einfach - 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") 
    } 
} 

Antwort

1

Ich glaube, Sie den Booster nach dem Knoten die Sie aufnehmen, setzen müssen. Sie möchten die regulären Pegel aufzeichnen und anschließend über einen Booster senden, dessen Verstärkung auf Null gesetzt ist.

+0

Danke Aurelius, was ist mit all der anderen Zeit die App läuft (nicht nur bei der Aufnahme), höre ich immer noch das Feedback von meinem Mikrofon. Versucht, mit der Booster-Platzierung zu spielen, musste aber auch den 'AudioKit.output = self.mixer, AudioKit.start()' ändern, ich habe das Gefühl, dass ich etwas falsch mache. –

+0

Wenn der Booster mit einem Gewinn von Null eingesetzt wird, sehe ich nicht, wie Sie etwas darin hören können. Können Sie Ihr Projekt teilen? –

+0

Danke nochmal Aurelius, ich werde Code zur Verfügung stellen, wenn ich später nach Hause komme, ich habe jetzt dieses von dir geschriebene Tutorial gesehen, http://audiakit.io/examples/MicrophoneAnalysis/ wenn ich deine Antwort oberhalb dieses Tutorials/Beispiels verstanden habe Was brauche ich richtig? Ich kann sehen, dass es hier den Booster benutzt, wie du gesagt hast. –

Verwandte Themen