コード例 #1
0
        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);
                }
            }
        }