Post

Replies

Boosts

Views

Activity

Mac app Audio Recording with Visualizations best approach
Hey I wonder if someone can point me in the right direction. I am building a Mac Audio App that I need to perform the following actions Select audio input device Show a live audio graph of device input (think GarageBand/ Logic) Capture the audio for replay Output the sound or make itself selectable as an input device for another app - Similar to how plugins work for GarageBand Logic etc I have looked into using the following so far: AudioKit AVFoundation / AVCaptureDevice AudioKit This framework looks amazing and has sample apps for most of the things I want to do, however it seems that it will only accept the audio input that the Mac has selected in settings. This is a non starter for me as I want the user to be able to chose in App (like GarageBand does or Neural Dsp plugins) Using AudioEngine I can get the available input devices, but everything I have found points to them not being changeable in App - here's code to display them struct InputDevicePicker: View { @State var device: Device var engine: AudioEngine var body: some View { Picker("Input: \(device.deviceID)", selection: $device) { ForEach(getDevices(), id: \.self) { Text($0.name) } } .pickerStyle(MenuPickerStyle()) .onChange(of: device, perform: setInputDevice) } func getDevices() -> [Device] { AudioEngine.inputDevices.compactMap { $0 } } func setInputDevice(to device: Device) { // set the input device on the AudioEngine } } } Alternatively AVFoundation This has a nice API for listing devices and setting the input, but when it comes to working with the data the delegate provides, I don't have the first clue how I would handle this in terms creating an audio graph and saving the data for replay. Here's the delegate method for reference extension Recorder: AVCaptureAudioDataOutputSampleBufferDelegate { func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { print("Audio data recieved") // Needs to save audio here // Needs to play through speakers or other audio source // Need to show audio graph } } It would be great if someone with experience using these could advise if this is possible on either and where I can look for examples / guidance Any help pointers, life savers would be appreciated Thanks if you got this far !
0
2
618
Jan ’23