예제 #1
0
        static AudioChannelLayout GetChannelLayout(AudioFormatProperty property, int value)
        {
            int size;

            AudioFormatPropertyNative.AudioFormatGetPropertyInfo(property, sizeof(AudioFormatProperty), ref value, out size);

            AudioChannelLayout layout;
            IntPtr             ptr = Marshal.AllocHGlobal(size);

            if (AudioFormatPropertyNative.AudioFormatGetProperty(property, sizeof(AudioFormatProperty), ref value, ref size, ptr) == 0)
            {
                layout = new AudioChannelLayout(ptr);
            }
            else
            {
                layout = null;
            }

            Marshal.FreeHGlobal(ptr);
            return(layout);
        }
예제 #2
0
        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);
        }
예제 #3
0
        public static unsafe 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;
        }
예제 #4
0
        static AudioChannelLayout GetChannelLayout(AudioFormatProperty property, int value)
        {
            int size;
            AudioFormatPropertyNative.AudioFormatGetPropertyInfo (property, sizeof (AudioFormatProperty), ref value, out size);

            AudioChannelLayout layout;
            IntPtr ptr = Marshal.AllocHGlobal (size);
            if (AudioFormatPropertyNative.AudioFormatGetProperty (property, sizeof (AudioFormatProperty), ref value, ref size, ptr) == 0)
                layout = new AudioChannelLayout (ptr);
            else
                layout = null;

            Marshal.FreeHGlobal (ptr);
            return layout;
        }
예제 #5
0
        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;
        }
예제 #6
0
        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;
        }
예제 #7
0
 static IntPtr CreateLayoutPtr(AudioChannelLayout layout)
 {
     int size;
     handleToLayout = layout.ToBlock (out size);
     return handleToLayout;
 }
예제 #8
0
 public AVAudioChannelLayout(AudioChannelLayout layout)
     : this((nint) CreateLayoutPtr (layout))
 {
     Marshal.FreeHGlobal (handleToLayout);
 }
예제 #9
0
        public AudioPanningInfo(AudioChannelLayout outputChannelMap)
        {
            if (outputChannelMap == null)
                throw new ArgumentNullException ("outputChannelMap");

            this.OutputChannelMap = outputChannelMap;
        }
예제 #10
0
        public AudioBalanceFade(AudioChannelLayout channelLayout)
        {
            if (channelLayout == null)
                throw new ArgumentNullException ("channelLayout");

            this.ChannelLayout = channelLayout;
        }