5minho / DreamRecorder

mino & bran BoostCamp Project
6 stars 0 forks source link

AVAudioEngine????? #53

Closed 5minho closed 6 years ago

5minho commented 6 years ago

Speech Framework에서 Live Speech Recognition 을 하려면 AVAudioEngine object 가 필요하다 마이크에서 유저의 음성신호를 처리하기 위해서 이다. CSR api 를 쓸때 CSR 음성인식 예제 앱에서는 audio에 대한 코드가AVAudioSession.setCategory() 밖에 없었는데, 이번에 Speech Framework 예제들을 공부하면서 audioEngine에 대한 코드가 있었다.

5minho commented 6 years ago

AVAudioEngine은 AVAudioNode의 그룹을 정의하고, 이 audio node는 오디오 신호 처리, 오디오 입출력을 수행한다. (AVAudioNode class는 이러한 작업을 할 수 있는 추상클래스!!!!) image

하나의 node에는 각각 입출력 버스가 있고, 이 입출력 버스들은 각각의 노드의 연결지점 이라고 생각할 수 있다. 예를들어 'effect'는 하나의 입력버스, 출력버스가 있고, mixer는 다수의 입출력 버스가 있다.

버스는 sample rate 와 channel count로 표현된 format을 가지고 있다. 노드간 연결을 할때 이 형식들이 일치해야 한다.(AVAudioMixerNode, AVAudioMixerNode 는 예외) 노드는 엔진에 연결이 될 때까지는 기능을 하지 않는다.

speech recognize 코드에서는 audioEngine의 inputNode를 얻고 그 inputNode의 출력버스에 AVAudioNodeTapBlock으로 SFSpeechAudioBufferRecognitionRequest객체에 buffer에 있는 데이터를 추가하는 로직을 짠다.