예제 #1
0
        public static PaDeviceInfo PA_GetDeviceInfo(int device)
        {
            IntPtr       ptr  = PA_GetDeviceInfoPtr(device);
            PaDeviceInfo info = (PaDeviceInfo)Marshal.PtrToStructure(ptr, typeof(PaDeviceInfo));

            return(info);
        }
예제 #2
0
        public static List <AudioDevice> GetDevices(DeviceDirection direction)
        {
            List <AudioDevice> list = new List <AudioDevice>();
            int num  = PortAudioAPI.Pa_GetDefaultInputDevice();
            int num2 = PortAudioAPI.Pa_GetDefaultOutputDevice();
            int num3 = PortAudioAPI.Pa_GetDeviceCount();

            for (int i = 0; i < num3; i++)
            {
                PaDeviceInfo    paDeviceInfo    = PortAudioAPI.Pa_GetDeviceInfo(i);
                DeviceDirection deviceDirection = (paDeviceInfo.maxInputChannels <= 0) ? DeviceDirection.Output : ((paDeviceInfo.maxOutputChannels > 0) ? DeviceDirection.InputOutput : DeviceDirection.Input);
                if (deviceDirection == direction || deviceDirection == DeviceDirection.InputOutput)
                {
                    PaHostApiInfo paHostApiInfo = PortAudioAPI.Pa_GetHostApiInfo(paDeviceInfo.hostApi);
                    AudioDevice   audioDevice   = new AudioDevice();
                    audioDevice.Name      = paDeviceInfo.name;
                    audioDevice.Host      = paHostApiInfo.name;
                    audioDevice.Index     = i;
                    audioDevice.Direction = deviceDirection;
                    audioDevice.IsDefault = (i == num || i == num2);
                    list.Add(audioDevice);
                }
            }
            return(list);
        }
예제 #3
0
        public static DeviceInfo FromNative(IntPtr ptr)
        {
            PaDeviceInfo native  = Marshal.PtrToStructure <PaDeviceInfo>(ptr);
            DeviceInfo   managed = new DeviceInfo();

            managed.StructVersion            = native.structVersion;
            managed.Name                     = Marshal.PtrToStringAnsi(native.name);
            managed.HostApi                  = native.hostApi;
            managed.DefaultLowInputLatency   = native.defaultLowInputLatency;
            managed.DefaultLowOutputLatency  = native.defaultLowOutputLatency;
            managed.DefaultHighInputLatency  = native.defaultHighInputLatency;
            managed.DefaultHighOutputLatency = native.defaultHighOutputLatency;
            managed.DefaultSampleRate        = native.defaultSampleRate;
            return(managed);
        }
예제 #4
0
        public static List <AudioDevice> GetDevices(AudioDeviceDirection direction)
        {
            List <AudioDevice> audioDevices = new List <AudioDevice>();
            int count      = Pa_GetDeviceCount();
            int defaultIn  = Pa_GetDefaultInputDevice();
            int defaultOut = Pa_GetDefaultOutputDevice();

            for (int i = 0; i < count; i++)
            {
                PaDeviceInfo         deviceInfo      = Pa_GetDeviceInfo(i);
                AudioDeviceDirection deviceDirection = deviceInfo.maxInputChannels > 0 ? (deviceInfo.maxOutputChannels > 0 ? AudioDeviceDirection.InputOutput : AudioDeviceDirection.Input) : AudioDeviceDirection.Output;
                if (deviceDirection == direction || deviceDirection == AudioDeviceDirection.InputOutput)
                {
                    PaHostApiInfo hostInfo = Pa_GetHostApiInfo(deviceInfo.hostApi);
                    audioDevices.Add(new AudioDevice(deviceInfo.name, hostInfo.name, i, deviceDirection, i == defaultIn || i == defaultOut));
                }
            }

            return(audioDevices);
        }