CSPspEmu.Core.Audio.AudioAlsaImpl.AudioAlsaImpl C# (CSharp) Method

AudioAlsaImpl() public method

public AudioAlsaImpl ( ) : System
return System
        public AudioAlsaImpl()
        {
            if (playback_handle == IntPtr.Zero)
            {
                try
                {
                    fixed (IntPtr* playback_handle_ptr = &playback_handle)
                    fixed (IntPtr* hw_params_ptr = &hw_params)
                    {
                        int rate = SampleRate;

                        //int period_time = (SndOutPacketSize * 1000) / (SampleRate / 1000);
                        //int buffer_time = period_time * NumBuffers;

                        Assert("snd_pcm_open", Alsa.snd_pcm_open(playback_handle_ptr, Device, Alsa.snd_pcm_stream_t.SND_PCM_LB_OPEN_PLAYBACK, 0));
                        Assert("snd_pcm_hw_params_malloc", Alsa.snd_pcm_hw_params_malloc(hw_params_ptr));
                        Assert("snd_pcm_hw_params_any", Alsa.snd_pcm_hw_params_any(playback_handle, hw_params));
                        Assert("snd_pcm_hw_params_set_access", Alsa.snd_pcm_hw_params_set_access(playback_handle, hw_params, Alsa.snd_pcm_access.SND_PCM_ACCESS_RW_INTERLEAVED));
                        Assert("snd_pcm_hw_params_set_format", Alsa.snd_pcm_hw_params_set_format(playback_handle, hw_params, Alsa.snd_pcm_format.SND_PCM_FORMAT_S16_LE));
                        Assert("snd_pcm_hw_params_set_rate_near", Alsa.snd_pcm_hw_params_set_rate_near(playback_handle, hw_params, &rate, null));

                        //Assert("snd_pcm_hw_params_set_buffer_time_near", Alsa.snd_pcm_hw_params_set_buffer_time_near(playback_handle, hw_params, &buffer_time, null));
                        //Assert("snd_pcm_hw_params_set_period_time_near", Alsa.snd_pcm_hw_params_set_period_time_near(playback_handle, hw_params, &period_time, null));

                        Assert("snd_pcm_hw_params_set_channels", Alsa.snd_pcm_hw_params_set_channels(playback_handle, hw_params, channels));

                        Assert("snd_pcm_hw_params_set_periods", Alsa.snd_pcm_hw_params_set_periods(playback_handle, hw_params, periods, 0));
                        Assert("snd_pcm_hw_params_set_period_size", Alsa.snd_pcm_hw_params_set_period_size(playback_handle, hw_params, periodsize, null));
                        Assert("snd_pcm_hw_params_set_buffer_size", Alsa.snd_pcm_hw_params_set_buffer_size(playback_handle, hw_params, 4 * periodsize));

                        Assert("snd_pcm_hw_params", Alsa.snd_pcm_hw_params(playback_handle, hw_params));
                        Assert("snd_pcm_hw_params_free", Alsa.snd_pcm_hw_params_free(hw_params));
                    }
                }
                catch (Exception Exception)
                {
                    Console.Error.WriteLine(Exception);
                }
            }

            //available_start = Alsa.snd_pcm_avail_update(playback_handle);
        }