public async Task TestAudioMidiDeviceAccess() { string midimod = "mme"; string audiomod = "portaudio"; using (Csound6Net cs = new Csound6Net()) { var mods = cs.GetAudioModuleList();//Csound6Net initializes to "pa"; confirm this is true. int cnt = mods.Count; Assert.IsTrue(cnt > 0); Assert.IsTrue(mods.ContainsKey("pa")); Assert.IsFalse(mods.ContainsKey(audiomod)); cs.SetAudioModule(audiomod); //"portaudio" won't be there yet... add it. mods = cs.GetAudioModuleList(); Assert.AreEqual(cnt + 1, mods.Count); Assert.IsTrue(mods.ContainsKey(audiomod)); //confirm it was added IDictionary <string, CS_AUDIODEVICE> outputDevices = await cs.GetAudioDeviceListAsync(true); Assert.IsNotNull(outputDevices); Assert.AreNotEqual(0, outputDevices.Count); foreach (string id in outputDevices.Keys) { Assert.IsNotNull(outputDevices[id]); Assert.IsInstanceOfType(outputDevices[id], typeof(CS_AUDIODEVICE)); var dev = outputDevices[id]; Assert.IsTrue(dev.isOutput); Assert.AreEqual(id, dev.device_id); Assert.AreEqual(audiomod, dev.rt_module); } IDictionary <string, CS_AUDIODEVICE> inputDevices = await cs.GetAudioDeviceListAsync(false); Assert.IsNotNull(inputDevices); Assert.AreNotEqual(0, inputDevices.Count); foreach (string id in inputDevices.Keys) { Assert.IsNotNull(inputDevices[id]); Assert.IsInstanceOfType(inputDevices[id], typeof(CS_AUDIODEVICE)); var dev = inputDevices[id]; Assert.IsFalse(dev.isOutput); Assert.AreEqual(id, dev.device_id); } mods = cs.GetMidiModuleList(); Assert.IsTrue(mods.Count > 0); Assert.IsTrue(mods.ContainsKey("portmidi")); //unlike for audio, csounds sets and keeps it. Csound6Parameters.SetOption(cs, "-+rtmidi=winmme"); //none this has an effect... stays portaudio cs.SetMidiModule(midimod); mods = cs.GetMidiModuleList(); //count not increased - winmme and portmidi considered same? although, devices will say winmme or anything else you put there. bool hasMME = mods.ContainsKey(midimod); var midiInput = await cs.GetMidiDeviceListAsync(false); Assert.IsNotNull(midiInput); Assert.AreNotEqual(0, midiInput.Count); foreach (string id in midiInput.Keys) { Assert.IsNotNull(midiInput[id]); Assert.IsInstanceOfType(midiInput[id], typeof(CS_MIDIDEVICE)); var dev = midiInput[id]; Assert.IsFalse(dev.isOutput); Assert.AreEqual(id, dev.device_id); Assert.AreEqual(midimod, dev.midi_module); } var midiOutput = await cs.GetMidiDeviceListAsync(true); Assert.IsNotNull(midiOutput); Assert.AreNotEqual(0, midiOutput.Count); foreach (string id in midiOutput.Keys) { Assert.IsNotNull(midiOutput[id]); Assert.IsInstanceOfType(midiOutput[id], typeof(CS_MIDIDEVICE)); var dev = midiOutput[id]; Assert.IsTrue(dev.isOutput); Assert.AreEqual(id, dev.device_id); } } }