Skip to content

Commit

Permalink
Merge pull request #22 from ceammc/inputMixer
Browse files Browse the repository at this point in the history
Manage device audio input
  • Loading branch information
eldarsadykov authored Mar 13, 2024
2 parents 262f89b + a09d907 commit da9bf49
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import SwiftUI

struct Buttons: View {
@EnvironmentObject var rnbo: RNBOAudioUnitHostModel
@State private var enableMic: Bool = false
var body: some View {
HStack {
Button("Test MIDI") {
Expand All @@ -30,12 +31,21 @@ struct Buttons: View {
let message: [Double] = [220, 330, 0.2, 0.3, 0.5]
rnbo.sendMessage(message)
}
Button("Play audio input") {
rnbo.play()
Button("Play Input") {
rnbo.playAudioFile()
}
Button("Pause Input") {
rnbo.pauseAudioFile()
}
Toggle(isOn: $rnbo.showDescription) {
Text("Show description")
}
Toggle(isOn: $enableMic) {
Text("Mic")
}
.onChange(of: enableMic) { newValue in
rnbo.toggleMic(newValue)
}
}
.padding(.bottom)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class RNBOAudioEngine {
private let playerNode = AVAudioPlayerNode()
private let audioFile: AVAudioFile?
private let distortionEffect: AVAudioUnitDistortion
private let inputMixer: AVAudioMixerNode
private let microphoneVolumeMixer: AVAudioMixerNode

private func initInput() {
let input = engine.inputNode
Expand All @@ -21,13 +23,22 @@ class RNBOAudioEngine {

if format.channelCount > 0 {
if input.outputFormat(forBus: 0).sampleRate == format.sampleRate {
engine.connect(input, to: avAudioUnit!, format: format)
} else
{ }
engine.connect(input, to: microphoneVolumeMixer, format: format)
engine.connect(microphoneVolumeMixer, to: inputMixer, format: format)
engine.connect(inputMixer, to: avAudioUnit!, format: format)
} else {
print("Could not connect input node: sample rate mismatch")
}
}
}

func setMicrophoneAmplitude(_ amp: Float) {
microphoneVolumeMixer.outputVolume = amp
}

init() {
inputMixer = AVAudioMixerNode()
microphoneVolumeMixer = AVAudioMixerNode()
#if os(iOS)
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, options: [.defaultToSpeaker, .allowBluetoothA2DP, .mixWithOthers, .allowAirPlay])
Expand Down Expand Up @@ -65,9 +76,13 @@ class RNBOAudioEngine {
self.avAudioUnit = avAudioUnit! // save AVAudioUnit
}
// engine.attach(distortionEffect)
engine.attach(inputMixer)
engine.attach(microphoneVolumeMixer)
engine.attach(playerNode)
engine.attach(avAudioUnit!)


microphoneVolumeMixer.outputVolume = 0.0

switch AVCaptureDevice.authorizationStatus(for: .audio) {
case .authorized:
do {
Expand Down Expand Up @@ -103,7 +118,7 @@ class RNBOAudioEngine {
// engine.connect(playerNode, to: avAudioUnit!, format: audioFile?.processingFormat)
let audioUnitFormat = avAudioUnit!.inputFormat(forBus: 0)
// let procFormat = audioFile?.processingFormat
engine.connect(playerNode, to: avAudioUnit!, format: audioUnitFormat)
engine.connect(playerNode, to: inputMixer, format: audioUnitFormat)
engine.connect(avAudioUnit!, to: engine.mainMixerNode, format: audioUnitFormat)

// test directly, works here:
Expand All @@ -123,7 +138,7 @@ class RNBOAudioEngine {
return avAudioUnit!.auAudioUnit as! RNBOAudioUnit
}

func play() {
func playAudioFile() {
playerNode.stop()
guard let audioFile = audioFile else {
return
Expand All @@ -137,7 +152,7 @@ class RNBOAudioEngine {
playerNode.play()
}

func pause() {
func pauseAudioFile() {
playerNode.pause()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,20 @@ class RNBOAudioUnitHostModel: ObservableObject {
parameters = description?.getParametersArray() ?? []
}

func play() {
audioEngine.play()
func playAudioFile() {
audioEngine.playAudioFile()
}

func pauseAudioFile() {
audioEngine.pauseAudioFile()
}

func toggleMic(_ on: Bool) {
if on {
audioEngine.setMicrophoneAmplitude(1.0)
} else {
audioEngine.setMicrophoneAmplitude(0.0)
}
}

func refreshParameterValue(at parameterIndex: Int) {
Expand Down

0 comments on commit da9bf49

Please sign in to comment.