public void Callbacks() { var audioComponent = AudioComponent.FindComponent(AudioTypeOutput.VoiceProcessingIO); using var audioUnit = new global::AudioUnit.AudioUnit(audioComponent); var rv = audioUnit.SetInputCallback(InputCallback, AudioUnitScopeType.Input, 1); if (rv == AudioUnitStatus.CannotDoInCurrentContext) { Assert.Ignore("Can't set input callback"); // No microphone? In a VM? This seems to happen often on bots. } Assert.AreEqual(AudioUnitStatus.OK, rv, "SetInputCallback"); Assert.AreEqual(AudioUnitStatus.OK, audioUnit.Initialize(), "Initialize"); try { Assert.AreEqual(AudioUnitStatus.OK, audioUnit.Start(), "Start"); Assert.IsTrue(inputCallbackEvent.WaitOne(TimeSpan.FromSeconds(1)), "No input callback for 1 second"); } finally { Assert.AreEqual(AudioUnitStatus.OK, audioUnit.Stop(), "Stop"); } }
AudioUnitStatus InputCallback(AudioUnitRenderActionFlags actionFlags, AudioTimeStamp timeStamp, uint busNumber, uint numberFrames, global::AudioUnit.AudioUnit audioUnit) { inputCallbackEvent.Set(); return(AudioUnitStatus.NoError); }