public static unsafe int[] GetChannelMap(AudioChannelLayout inputLayout, AudioChannelLayout outputLayout) { if (inputLayout == null) throw new ArgumentNullException ("inputLayout"); if (outputLayout == null) throw new ArgumentNullException ("outputLayout"); var channels_count = GetNumberOfChannels (outputLayout); if (channels_count == null) throw new ArgumentException ("outputLayout"); int ptr_size; var input_ptr = inputLayout.ToBlock (out ptr_size); var output_ptr = outputLayout.ToBlock (out ptr_size); var array = new IntPtr[] { input_ptr, output_ptr }; ptr_size = sizeof (IntPtr) * array.Length; int[] value; AudioFormatError res; fixed (IntPtr* ptr = &array[0]) { value = new int[channels_count.Value]; var size = sizeof (int) * value.Length; fixed (int* value_ptr = &value[0]) { res = AudioFormatPropertyNative.AudioFormatGetProperty (AudioFormatProperty.ChannelMap, ptr_size, ptr, ref size, value_ptr); } } Marshal.FreeHGlobal (input_ptr); Marshal.FreeHGlobal (output_ptr); return res == 0 ? value : null; }
public static AudioFormatError Validate(AudioChannelLayout layout) { if (layout == null) throw new ArgumentNullException ("layout"); int ptr_size; var ptr = layout.ToBlock (out ptr_size); var res = AudioFormatPropertyNative.AudioFormatGetProperty (AudioFormatProperty.ValidateChannelLayout, ptr_size, ptr, IntPtr.Zero, IntPtr.Zero); Marshal.FreeHGlobal (ptr); return res; }
public unsafe static float[,] GetMatrixMixMap(AudioChannelLayout inputLayout, AudioChannelLayout outputLayout) { if (inputLayout == null) { throw new ArgumentNullException("inputLayout"); } if (outputLayout == null) { throw new ArgumentNullException("outputLayout"); } var channels_count_output = GetNumberOfChannels(outputLayout); if (channels_count_output == null) { throw new ArgumentException("outputLayout"); } var channels_count_input = GetNumberOfChannels(inputLayout); if (channels_count_input == null) { throw new ArgumentException("inputLayout"); } int ptr_size; var input_ptr = inputLayout.ToBlock(out ptr_size); var output_ptr = outputLayout.ToBlock(out ptr_size); var array = new IntPtr[] { input_ptr, output_ptr }; ptr_size = sizeof(IntPtr) * array.Length; float[,] value; AudioFormatError res; fixed(IntPtr *ptr = &array[0]) { value = new float[channels_count_input.Value, channels_count_output.Value]; var size = sizeof(float) * channels_count_input.Value * channels_count_output.Value; fixed(float *value_ptr = &value[0, 0]) { res = AudioFormatPropertyNative.AudioFormatGetProperty(AudioFormatProperty.MatrixMixMap, ptr_size, ptr, ref size, value_ptr); } } Marshal.FreeHGlobal(input_ptr); Marshal.FreeHGlobal(output_ptr); return(res == 0 ? value : null); }
public static AudioChannelLayoutTag? GetTagForChannelLayout(AudioChannelLayout layout) { if (layout == null) throw new ArgumentNullException ("layout"); int ptr_size; var ptr = layout.ToBlock (out ptr_size); int size = sizeof (AudioChannelLayoutTag); int value; var res = AudioFormatPropertyNative.AudioFormatGetProperty (AudioFormatProperty.TagForChannelLayout, ptr_size, ptr, ref size, out value); Marshal.FreeHGlobal (ptr); return res != 0 ? null : (AudioChannelLayoutTag?) value; }
public static int?GetNumberOfChannels(AudioChannelLayout layout) { if (layout == null) { throw new ArgumentNullException("layout"); } int ptr_size; var ptr = layout.ToBlock(out ptr_size); int size = sizeof(int); int value; var res = AudioFormatPropertyNative.AudioFormatGetProperty(AudioFormatProperty.NumberOfChannelsForLayout, ptr_size, ptr, ref size, out value); Marshal.FreeHGlobal(ptr); return(res != 0 ? null : (int?)value); }