void ASIODeviceControlLoad(object sender, EventArgs e)
        {
            int deviceCount = PortAudio.Pa_GetDeviceCount();

            Console.WriteLine("Device count: " + paHostApiInfo.deviceCount + " default input device: " + paHostApiInfo.defaultInputDevice);

            deviceComboBox.Items.Clear();
            for (int i = 0; i < deviceCount; i++)
            {
                PortAudio.PaDeviceInfo  paDeviceInfo = PortAudio.Pa_GetDeviceInfo(i);
                PortAudio.PaHostApiInfo paHostApi    = PortAudio.Pa_GetHostApiInfo(paDeviceInfo.hostApi);
                if (paHostApi.type == PortAudio.PaHostApiTypeId.paASIO)
                {
                    Console.WriteLine("\n#" + i + "\n" + paDeviceInfo);
                    if (paDeviceInfo.maxOutputChannels > 0)
                    {
                        deviceComboBox.Items.Add(new DeviceItem(i, paDeviceInfo));
                        if (i == paHostApiInfo.defaultOutputDevice)
                        {
                            deviceComboBox.SelectedIndex = deviceComboBox.Items.Count - 1;
                        }
                    }
                }
            }

            bufferSizeComboBox.Items.Clear();
            int bufferSize = 256;

            while (bufferSize < 44100 / 2)
            {
                bufferSizeComboBox.Items.Add(bufferSize);
                bufferSize *= 2;
            }
            bufferSizeComboBox.SelectedIndex = 2;
        }
Esempio n. 2
0
        public HostApiItem(PortAudio.PaHostApiInfo hostApiInfo, IUpdatableControl updatableControl)
        {
            this.hostApiInfo = hostApiInfo;

            int deviceCount = PortAudio.Pa_GetDeviceCount();
            int selectedHostApiDeviceCount = 0;

            for (int i = 0; i < deviceCount; i++)
            {
                PortAudio.PaDeviceInfo  paDeviceInfo = PortAudio.Pa_GetDeviceInfo(i);
                PortAudio.PaHostApiInfo paHostApi    = PortAudio.Pa_GetHostApiInfo(paDeviceInfo.hostApi);
                if (paHostApi.type == hostApiInfo.type)
                {
                    selectedHostApiDeviceCount++;
                }
            }

            if (selectedHostApiDeviceCount > 0)
            {
                switch (hostApiInfo.type)
                {
                case PortAudio.PaHostApiTypeId.paMME:
                    hostApiDeviceControl = new MMEDeviceControl(hostApiInfo, updatableControl);
                    break;

                case PortAudio.PaHostApiTypeId.paDirectSound:
                    hostApiDeviceControl = new DirectSoundDeviceControl(hostApiInfo, updatableControl);
                    break;

                case PortAudio.PaHostApiTypeId.paASIO:
                    hostApiDeviceControl = new ASIODeviceControl(hostApiInfo, updatableControl);
                    break;

                case PortAudio.PaHostApiTypeId.paALSA:
                    hostApiDeviceControl = new ALSADeviceControl(hostApiInfo, updatableControl);
                    break;
                }
            }
            else
            {
                hostApiDeviceControl = new NoDevicesDeviceControl(hostApiInfo, updatableControl);
            }
        }