[Speex-dev] using speex in C#

SAITAMA Taro game72 at gmail.com
Thu Dec 28 00:09:08 PST 2006


I have read the message below,
and try to use P/Invoke to use speex in C#.

This is a part of my code.

	public struct SpeexBits {
		IntPtr chars;			// "raw" data
		int nbBits;			// Total number of bits stored in the stream
		int charPtr;			// Position of the byte "cursor"
		int bitPtr;			// Position of the bit "cursor" within the current char
		int owner;			// Does the struct "own" the "raw" buffer (member "chars")
		int overflow;			// Set to one if we try to read past the valid data
		int buf_size;			// Allocated size for buffer
		int reserved1;			// Reserved for future use
		IntPtr reserved2;		// Reserved for future use

	public static extern IntPtr speex_lib_get_mode(int mode);	// Obtain one of the modes available

	public static extern IntPtr speex_encoder_init(ref SpeexMode mode);

	public static extern void speex_bits_init(ref SpeexBits bits);

	public static extern int speex_encode_int(IntPtr state, Int16[] in_, ref SpeexBits bits);

	SpeexBits bits = new SpeexBits();
	SpeexMode mode = (SpeexMode)Marshal.PtrToStructure(Speex.speex_lib_get_mode(1), typeof(SpeexMode));
	Speex.speex_bits_init(ref bits);
	IntPtr enc_state = Speex.speex_encoder_init(ref mode);

	Int16[] CaptureData = null;
	(CaptureData receives data recorded from mic...)
	CaptureData = (Int16[])dsCapBuffer.Read(NextCaptureOffset, typeof(Int16), LockFlag.None, LockSize);

	Speex.speex_bits_reset(ref bits);
	Speex.speex_encode_int(enc_state, CaptureData, ref bits);	// at this point, System.AccessViolationException occurs

Whould anyone tell me what wrong about my code?
Please help me.



More information about the Speex-dev mailing list