エフェクターアプリ製作日誌(2)-とりあえずエフェスト実装編
SwiftUIでDelay実装してみたけどAppleの用意したDelayだとギターように使うには厳しいレベルのノイズ?(長く引くと入力音に対してジリジリ言ってくる)
このままだとAudioUnitを自分で作るか、既存のAUを束ねるアプリにするかな〜
とりあえず参考にコード置いときます
//
// ContentView.swift
// iEffects
//
// Created by 新村彰啓 on 2021/06/21.
//
import SwiftUI
import AVFoundation
struct ContentView: View {
@State private var delayTime: Double = 1
@State private var toneValue: Double = 5
@State private var driveValue: Double = 5
@State var audioPlayerNode = AVAudioPlayerNode()
@State var audioEngine = AVAudioEngine()
@State var speedControl = AVAudioUnitVarispeed()
@State var pitchControl = AVAudioUnitTimePitch()
@State var distortion = AVAudioUnitDistortion()
@State var delay = AVAudioUnitDelay()
let bufferDuration: TimeInterval = 0.008
var body: some View {
ZStack {
VStack {
HStack {
Button("Start") {
try! AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default)
//try! AVAudioSession.sharedInstance().setPreferredIOBufferDuration(bufferDuration)
try! AVAudioSession.sharedInstance().setActive(true)
let formatZ = audioEngine.inputNode.inputFormat(forBus: 0)
//audioPlayerNode = AVAudioPlayerNode()
//audioEngine.attach(audioPlayerNode)
self.distortion.preGain = 10.0
self.distortion.loadFactoryPreset(.multiDistortedFunk)
self.distortion.wetDryMix = 0
delay.delayTime = self.delayTime
delay.wetDryMix = 45
audioEngine.attach(distortion)
audioEngine.attach(delay)
audioEngine.connect(audioEngine.inputNode, to: distortion, format: formatZ)
audioEngine.connect(distortion, to: delay, format: formatZ)
audioEngine.connect(delay, to: audioEngine.outputNode, format: formatZ)
try? audioEngine.start()
//audioPlayerNode.play()
}.padding()
}
Text(" delayTime : \(delayTime)").font(.largeTitle)
Slider(value: Binding(
get: {
self.delayTime
},
set: { newValue in
self.delayTime = newValue
delay.delayTime = self.delayTime
}
), in:0...2)
Text("tone : \(toneValue)").font(.largeTitle)
Slider(value: $toneValue, in:0...10)
Text("drive : \(driveValue)").font(.largeTitle)
Slider(value: $driveValue, in: -80...20)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
いいなと思ったら応援しよう!
よろしければ、サポートお願いいたします!
エフェクターアプリ製作に必要な時間や、書籍などに当てさせていただこうと思います。