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);
}