Пример #1
0
        public unsafe static AudioChannelLayoutTag[] GetTagsForNumberOfChannels(int count)
        {
            const int type_size = sizeof(uint);
            int       size;

            if (AudioFormatPropertyNative.AudioFormatGetPropertyInfo(AudioFormatProperty.TagsForNumberOfChannels, type_size, ref count, out size) != 0)
            {
                return(null);
            }

            var data = new AudioChannelLayoutTag[size / type_size];

            fixed(AudioChannelLayoutTag *ptr = data)
            {
                var res = AudioFormatPropertyNative.AudioFormatGetProperty(AudioFormatProperty.TagsForNumberOfChannels, type_size, ref count, ref size, (int *)ptr);

                if (res != 0)
                {
                    return(null);
                }

                return(data);
            }
        }
Пример #2
0
        public unsafe static AudioChannelLayoutTag[] GetAvailableEncodeChannelLayoutTags(AudioStreamBasicDescription format)
        {
            var  type_size = sizeof(AudioStreamBasicDescription);
            uint size;

            if (AudioFormatPropertyNative.AudioFormatGetPropertyInfo(AudioFormatProperty.AvailableEncodeChannelLayoutTags, type_size, ref format, out size) != 0)
            {
                return(null);
            }

            var data = new AudioChannelLayoutTag[size / sizeof(AudioChannelLayoutTag)];

            fixed(AudioChannelLayoutTag *ptr = data)
            {
                var res = AudioFormatPropertyNative.AudioFormatGetProperty(AudioFormatProperty.AvailableEncodeChannelLayoutTags, type_size, ref format, ref size, (int *)ptr);

                if (res != 0)
                {
                    return(null);
                }

                return(data);
            }
        }
Пример #3
0
        public unsafe static AudioFormat?GetFirstPlayableFormat(AudioFormat[] formatList)
        {
            if (formatList == null)
            {
                throw new ArgumentNullException("formatList");
            }
            if (formatList.Length < 2)
            {
                throw new ArgumentException("formatList");

                fixed(AudioFormat *item = &formatList[0])
                {
                    uint index;
                    int  size     = sizeof(uint);
                    var  ptr_size = sizeof(AudioFormat) * formatList.Length;

                    if (AudioFormatPropertyNative.AudioFormatGetProperty(AudioFormatProperty.FirstPlayableFormatFromList, ptr_size, item, ref size, out index) != 0)
                    {
                        return(null);
                    }

                    return(formatList [index]);
                }
        }