public PortAudioOutputDevice(IOutputController controller, bool isDefault, PortAudioDevice device)
 {
     Name       = device.Name;
     Controller = controller;
     IsDefault  = isDefault;
     _dev       = device;
 }
            public PortAudioPlaybackHandle(AudioStream baseStream, PortAudioDevice dev)
            {
                BaseStream = new BufferedAudioStream(baseStream, baseStream.Format.SampleRate * baseStream.Format.BytesPerFrame);

                PortAudioSampleFormat.PortAudioNumberFormat numberFormat;
                switch (baseStream.Format.DataFormat.NumberFormat)
                {
                case NumberFormat.FloatingPoint:
                    numberFormat = PortAudioSampleFormat.PortAudioNumberFormat.FloatingPoint;
                    break;

                case NumberFormat.Signed:
                    numberFormat = PortAudioSampleFormat.PortAudioNumberFormat.Signed;
                    break;

                case NumberFormat.Unsigned:
                    numberFormat = PortAudioSampleFormat.PortAudioNumberFormat.Unsigned;
                    break;

                default: throw new ArgumentException();
                }

                _pump = new PortAudioDevicePump(dev, baseStream.Format.Channels,
                                                new PortAudioSampleFormat(numberFormat, baseStream.Format.DataFormat.BytesPerSample),
                                                dev.DefaultHighOutputLatency, baseStream.Format.SampleRate, DataCallback);

                _pump.StreamFinished += PumpOnStreamFinished;
            }
Beispiel #3
0
        /// <summary>
        /// Starts the media capturing/source devices.
        /// </summary>
        public override async Task Start()
        {
            if (!_isStarted)
            {
                await base.Start();

                var apiType = PortAudioHostApiType.DirectSound;

                if (Environment.OSVersion.Platform == PlatformID.Unix)
                {
                    apiType = PortAudioHostApiType.Alsa;
                }

                _portAudioOutputDevice = PortAudioHostApi.SupportedHostApis.Where(x => x.HostApiType == apiType).First().DefaultOutputDevice;

                _outputDevicePump = new PortAudioDevicePump(_portAudioOutputDevice, AUDIO_CHANNEL_COUNT,
                                                            new PortAudioSampleFormat(PortAudioSampleFormat.PortAudioNumberFormat.Signed, AUDIO_BYTES_PER_SAMPLE),
                                                            TimeSpan.FromMilliseconds(SAMPLING_PERIOD_MILLISECONDS), AUDIO_SAMPLING_RATE, ReadAudioDataCalback);

                _portAudioInputDevice = PortAudioHostApi.SupportedHostApis.Where(x => x.HostApiType == apiType).First().DefaultInputDevice;

                _inputDevicePump = new PortAudioDevicePump(_portAudioInputDevice, AUDIO_CHANNEL_COUNT,
                                                           new PortAudioSampleFormat(PortAudioSampleFormat.PortAudioNumberFormat.Signed, AUDIO_BYTES_PER_SAMPLE),
                                                           TimeSpan.FromMilliseconds(SAMPLING_PERIOD_MILLISECONDS), AUDIO_SAMPLING_RATE, WriteDataCallback);

                _outputDevicePump.Start();
                _inputDevicePump.Start();
            }
        }
        public IEnumerable <IOutputDevice> GetOutputDevices()
        {
            PortAudioDevice def = default;

            try
            {
                def = _api.DefaultOutputDevice;
            }
            catch (PortAudioException)
            {
                //_debug.WriteLine($"Default output device for audio API \"{ApiName}\" does not exist.", DebugMessageLevel.Warning);
            }

            foreach (var device in _outputDevices)
            {
                yield return(new PortAudioOutputDevice(this, ReferenceEquals(def, device), device));
            }
        }
#pragma warning restore CS0067

        /// <summary>
        /// Creates a new basic RTP session that captures and renders audio to/from the default system devices.
        /// </summary>
        public PortAudioEndPoint(IAudioEncoder audioEncoder)
        {
            _audioEncoder       = audioEncoder;
            _audioFormatManager = new MediaFormatManager <AudioFormat>(_audioEncoder.SupportedFormats);

            var apiType = PortAudioHostApiType.DirectSound;

            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                apiType = PortAudioHostApiType.Alsa;
            }

            _portAudioOutputDevice = PortAudioHostApi.SupportedHostApis.Where(x => x.HostApiType == apiType).First().DefaultOutputDevice;

            _outputDevicePump = new PortAudioDevicePump(_portAudioOutputDevice, AUDIO_CHANNEL_COUNT,
                                                        new PortAudioSampleFormat(PortAudioSampleFormat.PortAudioNumberFormat.Signed, AUDIO_BYTES_PER_SAMPLE),
                                                        TimeSpan.FromMilliseconds(SAMPLING_PERIOD_MILLISECONDS), AUDIO_SAMPLING_RATE, ReadAudioDataCalback);

            _portAudioInputDevice = PortAudioHostApi.SupportedHostApis.Where(x => x.HostApiType == apiType).First().DefaultInputDevice;

            _inputDevicePump = new PortAudioDevicePump(_portAudioInputDevice, AUDIO_CHANNEL_COUNT,
                                                       new PortAudioSampleFormat(PortAudioSampleFormat.PortAudioNumberFormat.Signed, AUDIO_BYTES_PER_SAMPLE),
                                                       TimeSpan.FromMilliseconds(SAMPLING_PERIOD_MILLISECONDS), AUDIO_SAMPLING_RATE, WriteDataCallback);
        }
Beispiel #6
0
 public PortAudioDeviceViewModel(PortAudioDevice model)
 {
     _model = model;
 }