AVaudioEngine 자세히 보기
17114 단어 iOSSwiftavaudioenginetech
먼저 Xcode를 사용하여 프로젝트를 만들고 완성된 프로젝트의 ViewController입니다.swift에서 다음과 같이 해봤어요.
import UIKit
import AVFoundation
class ViewController: UIViewController {
private var audioEngine: AVAudioEngine!
override func viewDidLoad() {
super.viewDidLoad()
audioEngine = AVAudioEngine()
// audioEngine.mainMixerNode.outputVolume = 10.0
audioEngine.connect(audioEngine.inputNode, to: audioEngine.mainMixerNode, format:audioEngine.inputNode.outputFormat(forBus: 0))
do {
try audioEngine.start()
} catch {
print("cannot start audioEngine")
print(error)
}
}
}
상기 코드는 단말기의 음성 입력을 음성 출력에 직접 연결한다.이 코드를 실행하면 마이크에 입력된 소리가 그대로 출력되어야 한다.시뮬레이터로 집행하든 터미널로 집행하든 이어폰을 끼는 것을 추천한다.아이폰은 마이크 확성기가 우수해 설치하기 어렵지만 만일의 사태에 대비했다.
그리고 순수한 스피커의 출력은 이해하기 어렵다.
신중하게 보기 위해서 터미널의 소리 출력 볼륨을 줄여서 실행하십시오.이어폰을 낄 때 갑자기 큰 소리가 나면 깜짝 놀란다.
audioEngine.mainMixerNode.outputVolume = 10
리뷰를 수행합니다.이는 기본적으로 마이크가 입력한 음량이 작아 이어폰을 끼고 있어도 실제 작업 중인지 알 수 없으며 출력 음량을 늘리기 위해 지정한 것이다.필요한 경우 사용하십시오.가공 사운드
마이크 입력을 직접 출력할 수 있다는 것을 알았다면 다음에 이 입력 소리를 가공해 보세요.
AVAudioUnitDelay
를 사용하면 가라오케의 메아리가 울린다.import UIKit
import AVFoundation
class ViewController: UIViewController {
private var audioEngine: AVAudioEngine!
override func viewDidLoad() {
super.viewDidLoad()
audioEngine = AVAudioEngine()
let delay = AVAudioUnitDelay()
delay.delayTime = 0.2
audioEngine.attach(delay)
let format = audioEngine.inputNode.outputFormat(forBus: 0)
audioEngine.connect(audioEngine.inputNode, to: delay, format: format)
audioEngine.connect(delay, to: audioEngine.mainMixerNode, format: format)
do {
try audioEngine.start()
} catch {
print("cannot start audioEngine")
print(error)
}
}
}
아~ 부르고 싶다 ○○.다음은 디스토션을 해보겠습니다.기타 소리를 입력하면 기분이 좋을 것 같아요.
import UIKit
import AVFoundation
class ViewController: UIViewController {
private var audioEngine: AVAudioEngine!
override func viewDidLoad() {
super.viewDidLoad()
audioEngine = AVAudioEngine()
let distortion = AVAudioUnitDistortion()
audioEngine.attach(distortion)
let format = audioEngine.inputNode.outputFormat(forBus: 0)
audioEngine.connect(audioEngine.inputNode, to: distortion, format: format)
audioEngine.connect(distortion, to: audioEngine.mainMixerNode, format: format)
do {
try audioEngine.start()
} catch {
print("cannot start audioEngine")
print(error)
}
}
}
음량에 distotion 효과를 사용하도록 주의하세요.봤어효과 클래스 목록, 발견했어
AVAudioUnitTimePitch
.이걸 쓰면 소리가 높아지거나 낮아지는 효과를 낼 수 있잖아...?그래서 코드를 썼어요.
import UIKit
import AVFoundation
class ViewController: UIViewController {
private var audioEngine: AVAudioEngine!
override func viewDidLoad() {
super.viewDidLoad()
audioEngine = AVAudioEngine()
let pitch = AVAudioUnitTimePitch()
pitch.pitch = 1200
audioEngine.attach(pitch)
let format = audioEngine.inputNode.outputFormat(forBus: 0)
audioEngine.connect(audioEngine.inputNode, to: pitch, format: format)
audioEngine.connect(pitch, to: audioEngine.mainMixerNode, format: format)
do {
try audioEngine.start()
} catch {
print("cannot start audioEngine")
print(error)
}
}
}
하지만 결론적으로 이것은 움직이지 않는다.컴파일은 가능하지만, 실행 중 오류가 발생하면 붕괴됩니다.그건 AVAudioUnitTimePitch
가 물려받았기 때문이야AVAudioUnitTimeEffect
, 봐봐문서A class that processes audio in non-real time.
위에 쓰여 있다.마이크 입력과 같은 실시간 사운드 처리에는 사용할 수 없다는 것이다.유감!
Reference
이 문제에 관하여(AVaudioEngine 자세히 보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/niusounds/articles/b29846f3827648d8a123텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)