public void Flush() { #if !MONO if (!HDCDDLL.hdcd_decoder_flush_buffer(_decoder)) #endif throw new Exception("error flushing buffer."); }
public void Reset() { #if !MONO if (!HDCDDLL.hdcd_decoder_reset(_decoder)) #endif throw new Exception("error resetting decoder."); }
public void Write(AudioBuffer buff) { #if !MONO if (!HDCDDLL.hdcd_decoder_process_buffer_interleaved(_decoder, buff.Samples, buff.Length)) { throw new Exception("HDCD processing error."); } #endif }
public void GetStatistics(out hdcd_decoder_statistics stats) { #if !MONO IntPtr _statsPtr = HDCDDLL.hdcd_decoder_get_statistics(_decoder); #else IntPtr _statsPtr = IntPtr.Zero; #endif if (_statsPtr == IntPtr.Zero) { throw new Exception("HDCD statistics error."); } stats = (hdcd_decoder_statistics)Marshal.PtrToStructure(_statsPtr, typeof(hdcd_decoder_statistics)); }
public void Close() { #if !MONO if (_decoder != IntPtr.Zero) { HDCDDLL.hdcd_decoder_delete(_decoder); } _decoder = IntPtr.Zero; if (_gch.IsAllocated) { _gch.Free(); } #endif }
public HDCDDotNet(int channels, int sample_rate, int output_bps, bool decode) { _decoder = IntPtr.Zero; #if !MONO if (decode) { _audioBuffer = new AudioBuffer(new AudioPCMConfig(output_bps, channels, 44100), 256); } _decoder = HDCDDLL.hdcd_decoder_new(); _channelCount = channels; _bitsPerSample = output_bps; if (_decoder == IntPtr.Zero) { throw new Exception("Failed to initialize HDCD decoder."); } bool b = true; b &= HDCDDLL.hdcd_decoder_set_num_channels(_decoder, (short)_channelCount); b &= HDCDDLL.hdcd_decoder_set_sample_rate(_decoder, sample_rate); b &= HDCDDLL.hdcd_decoder_set_input_bps(_decoder, 16); b &= HDCDDLL.hdcd_decoder_set_output_bps(_decoder, (short)_bitsPerSample); if (!b) { throw new Exception("Failed to set up HDCD _decoder parameters."); } _decoderCallback = decode ? new HDCDDLL.hdcd_decoder_write_callback(DecoderCallback) : null; _gch = GCHandle.Alloc(this); hdcd_decoder_init_status status = HDCDDLL.hdcd_decoder_init(_decoder, IntPtr.Zero, _decoderCallback, (IntPtr)_gch); switch (status) { case hdcd_decoder_init_status.HDCD_DECODER_INIT_STATUS_OK: break; case hdcd_decoder_init_status.HDCD_DECODER_INIT_STATUS_MEMORY_ALOCATION_ERROR: throw new Exception("Memory allocation error."); case hdcd_decoder_init_status.HDCD_DECODER_INIT_STATUS_INVALID_NUM_CHANNELS: throw new Exception("Invalid number of channels."); case hdcd_decoder_init_status.HDCD_DECODER_INIT_STATUS_INVALID_SAMPLE_RATE: throw new Exception("Invalid sample rate."); default: throw new Exception("Unknown error(" + status.ToString() + ")."); } #else throw new Exception("HDCD unsupported."); #endif }