Exemplo n.º 1
0
        /// <summary>
        /// フォーマット設定から、
        /// Setup()に設定されうるビットフォーマットの候補の数を数えて戻す。
        /// </summary>
        /// <returns>Setup()に設定されうるビットフォーマットの候補の数</returns>
        static public int GetSetupSampleFormatCandidateNum(
            WasapiSharedOrExclusiveType sharedOrExclusive,
            BitsPerSampleFixType bitsPerSampleFixType,
            int validBitsPerSample,
            PcmDataLib.PcmData.ValueRepresentationType vrt)
        {
            if (bitsPerSampleFixType != BitsPerSampleFixType.AutoSelect ||
                sharedOrExclusive == WasapiSharedOrExclusiveType.Shared)
            {
                // 共有モードの場合 1通り
                // 排他モードで自動選択以外の選択肢の場合 1通り
                return(1);
            }

            // 排他モードのAutoSelect
            switch (validBitsPerSample)
            {
            case 16:
                return(mTryFormat16.Length);

            case 24:
            default:
                return(mTryFormat24.Length);

            case 32:
                return(mTryFormat32.Length);
            }
        }
Exemplo n.º 2
0
 public bool CompatibleTo(
     int samplingRate,
     WasapiCS.SampleFormatType fmt,
     int numChannels,
     int latencyMillisec,
     int zeroFlushMillisec,
     WasapiDataFeedModeType dfm,
     WasapiSharedOrExclusiveType shareMode,
     RenderThreadTaskType threadTaskType,
     int resamplerConversionQuality,
     WasapiCS.StreamType streamType,
     WasapiCS.MMThreadPriorityType threadPriority)
 {
     return(this.setuped &&
            this.samplingRate == samplingRate &&
            SampleFormatIsCompatible(this.sampleFormat, fmt) &&
            this.NumChannels == numChannels &&
            this.latencyMillisec == latencyMillisec &&
            this.ZeroFlushMillisec == zeroFlushMillisec &&
            this.dfm == dfm &&
            this.shareMode == shareMode &&
            this.threadTaskType == threadTaskType &&
            this.ResamplerConversionQuality == resamplerConversionQuality &&
            this.StreamType == streamType &&
            this.ThreadPriority == threadPriority);
 }
Exemplo n.º 3
0
 public void Set(int samplingRate,
                 WasapiCS.SampleFormatType fmt,
                 int numChannels,
                 int latencyMillisec,
                 int zeroFlushMillisec,
                 WasapiDataFeedModeType dfm,
                 WasapiSharedOrExclusiveType shareMode,
                 RenderThreadTaskType threadTaskType,
                 int resamplerConversionQuality,
                 WasapiCS.StreamType streamType,
                 WasapiCS.MMThreadPriorityType threadPriority)
 {
     this.setuped           = true;
     this.samplingRate      = samplingRate;
     this.sampleFormat      = fmt;
     this.NumChannels       = numChannels;
     this.latencyMillisec   = latencyMillisec;
     this.zeroFlushMillisec = zeroFlushMillisec;
     this.dfm                        = dfm;
     this.shareMode                  = shareMode;
     this.threadTaskType             = threadTaskType;
     this.ResamplerConversionQuality = resamplerConversionQuality;
     this.StreamType                 = streamType;
     this.ThreadPriority             = threadPriority;
 }
Exemplo n.º 4
0
 public void Set(int samplingRate,
         WasapiCS.SampleFormatType fmt,
         int numChannels,
         int latencyMillisec,
         int zeroFlushMillisec,
         WasapiDataFeedModeType dfm,
         WasapiSharedOrExclusiveType shareMode,
         RenderThreadTaskType threadTaskType,
         int resamplerConversionQuality,
         WasapiCS.StreamType streamType,
         WasapiCS.MMThreadPriorityType threadPriority)
 {
     this.setuped = true;
     this.samplingRate = samplingRate;
     this.sampleFormat = fmt;
     this.NumChannels = numChannels;
     this.latencyMillisec = latencyMillisec;
     this.zeroFlushMillisec = zeroFlushMillisec;
     this.dfm = dfm;
     this.shareMode = shareMode;
     this.threadTaskType = threadTaskType;
     this.ResamplerConversionQuality = resamplerConversionQuality;
     this.StreamType = streamType;
     this.ThreadPriority = threadPriority;
 }
Exemplo n.º 5
0
 public bool Is(
             int samplingRate,
             WasapiCS.SampleFormatType fmt,
             int numChannels,
             int latencyMillisec,
             int zeroFlushMillisec,
             WasapiDataFeedModeType dfm,
             WasapiSharedOrExclusiveType shareMode,
             RenderThreadTaskType threadTaskType,
             int resamplerConversionQuality,
             WasapiCS.StreamType streamType,
             WasapiCS.MMThreadPriorityType threadPriority)
 {
     return (this.setuped
         && this.samplingRate == samplingRate
         && this.sampleFormat == fmt
         && this.NumChannels == numChannels
         && this.latencyMillisec == latencyMillisec
         && this.zeroFlushMillisec == zeroFlushMillisec
         && this.dfm == dfm
         && this.shareMode == shareMode
         && this.threadTaskType == threadTaskType
         && this.ResamplerConversionQuality == resamplerConversionQuality
         && this.StreamType == streamType
         && this.ThreadPriority == threadPriority);
 }
Exemplo n.º 6
0
        /// <summary>
        /// PcmDataの形式と、(共有・排他)、フォーマット固定設定から、
        /// デバイスに設定されるビットフォーマットを取得。
        ///
        /// これは、内容的にテーブルなので、テーブルにまとめたほうが良い。
        /// </summary>
        /// <returns>デバイスに設定されるビットフォーマット</returns>
        static public SampleFormatInfo CreateSetupSampleFormat(
            WasapiSharedOrExclusiveType sharedOrExclusive,
            BitsPerSampleFixType bitsPerSampleFixType,
            int bitsPerSample,
            int validBitsPerSample,
            PcmDataLib.PcmData.ValueRepresentationType vrt,
            int candidateId)
        {
            SampleFormatInfo sf = new SampleFormatInfo();

            if (sharedOrExclusive == WasapiSharedOrExclusiveType.Shared)
            {
                // 共有モード
                sf.bitsPerSample      = bitsPerSample;
                sf.validBitsPerSample = validBitsPerSample;
                sf.bitFormatType      = SampleFormatInfo.VrtToBft(vrt);
                return(sf);
            }

            // 排他モード
            switch (bitsPerSampleFixType)
            {
            case BitsPerSampleFixType.Sint16:
                sf.bitFormatType      = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample      = 16;
                sf.validBitsPerSample = 16;
                break;

            case BitsPerSampleFixType.Sint24:
                sf.bitFormatType      = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample      = 24;
                sf.validBitsPerSample = 24;
                break;

            case BitsPerSampleFixType.Sint32:
                sf.bitFormatType      = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample      = 32;
                sf.validBitsPerSample = 32;
                break;

            case BitsPerSampleFixType.Sint32V24:
                sf.bitFormatType      = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample      = 32;
                sf.validBitsPerSample = 24;
                break;

            case BitsPerSampleFixType.Sfloat32:
                sf.bitFormatType      = WasapiCS.BitFormatType.SFloat;
                sf.bitsPerSample      = 32;
                sf.validBitsPerSample = 32;
                break;

            case BitsPerSampleFixType.AutoSelect:
                WasapiCS.SampleFormatType sampleFormat = WasapiCS.SampleFormatType.Sint16;
                switch (validBitsPerSample)
                {
                case 16:
                    sampleFormat = mTryFormat16[candidateId];
                    break;

                case 24:
                default: /* ? */
                    sampleFormat = mTryFormat24[candidateId];
                    break;

                case 32:
                    sampleFormat = mTryFormat32[candidateId];
                    break;
                }

                sf.bitFormatType      = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample      = WasapiCS.SampleFormatTypeToUseBitsPerSample(sampleFormat);
                sf.validBitsPerSample = WasapiCS.SampleFormatTypeToValidBitsPerSample(sampleFormat);
                break;

            default:
                System.Diagnostics.Debug.Assert(false);
                break;
            }

            return(sf);
        }
        /// <summary>
        /// PcmDataの形式と、(共有・排他)、フォーマット固定設定から、
        /// デバイスに設定されるビットフォーマットを取得。
        /// 
        /// これは、内容的にテーブルなので、テーブルにまとめたほうが良い。
        /// </summary>
        /// <returns>デバイスに設定されるビットフォーマット</returns>
        public static SampleFormatInfo CreateSetupSampleFormat(
            WasapiSharedOrExclusiveType sharedOrExclusive,
            BitsPerSampleFixType bitsPerSampleFixType,
            int bitsPerSample,
            int validBitsPerSample,
            PcmDataLib.PcmData.ValueRepresentationType vrt,
            int candidateId)
        {
            SampleFormatInfo sf = new SampleFormatInfo();

            if (sharedOrExclusive == WasapiSharedOrExclusiveType.Shared) {
                // 共有モード
                sf.bitsPerSample = bitsPerSample;
                sf.validBitsPerSample = validBitsPerSample;
                sf.bitFormatType = SampleFormatInfo.VrtToBft(vrt);
                return sf;
            }

            // 排他モード
            switch (bitsPerSampleFixType) {
            case BitsPerSampleFixType.Sint16:
                sf.bitFormatType = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample = 16;
                sf.validBitsPerSample = 16;
                break;
            case BitsPerSampleFixType.Sint24:
                sf.bitFormatType = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample = 24;
                sf.validBitsPerSample = 24;
                break;
            case BitsPerSampleFixType.Sint32:
                sf.bitFormatType = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample = 32;
                sf.validBitsPerSample = 32;
                break;
            case BitsPerSampleFixType.Sint32V24:
                sf.bitFormatType = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample = 32;
                sf.validBitsPerSample = 24;
                break;
            case BitsPerSampleFixType.Sfloat32:
                sf.bitFormatType = WasapiCS.BitFormatType.SFloat;
                sf.bitsPerSample = 32;
                sf.validBitsPerSample = 32;
                break;
            case BitsPerSampleFixType.AutoSelect:
                WasapiCS.SampleFormatType sampleFormat = WasapiCS.SampleFormatType.Sint16;
                switch (validBitsPerSample) {
                case 16:
                    sampleFormat = mTryFormat16[candidateId];
                    break;
                case 24:
                default: /* ? */
                    sampleFormat = mTryFormat24[candidateId];
                    break;
                case 32:
                    sampleFormat = mTryFormat32[candidateId];
                    break;
                }

                sf.bitFormatType      = WasapiCS.BitFormatType.SInt;
                sf.bitsPerSample      = WasapiCS.SampleFormatTypeToUseBitsPerSample(sampleFormat);
                sf.validBitsPerSample = WasapiCS.SampleFormatTypeToValidBitsPerSample(sampleFormat);
                break;
            default:
                System.Diagnostics.Debug.Assert(false);
                break;
            }

            return sf;
        }
        /// <summary>
        /// フォーマット設定から、
        /// Setup()に設定されうるビットフォーマットの候補の数を数えて戻す。
        /// </summary>
        /// <returns>Setup()に設定されうるビットフォーマットの候補の数</returns>
        public static int GetSetupSampleFormatCandidateNum(
            WasapiSharedOrExclusiveType sharedOrExclusive,
            BitsPerSampleFixType bitsPerSampleFixType,
            int validBitsPerSample,
            PcmDataLib.PcmData.ValueRepresentationType vrt)
        {
            if (bitsPerSampleFixType != BitsPerSampleFixType.AutoSelect ||
                    sharedOrExclusive == WasapiSharedOrExclusiveType.Shared) {
                // 共有モードの場合 1通り
                // 排他モードで自動選択以外の選択肢の場合 1通り
                return 1;
            }

            // 排他モードのAutoSelect
            switch (validBitsPerSample) {
            case 16:
                return mTryFormat16.Length;
            case 24:
            default:
                return mTryFormat24.Length;
            case 32:
                return mTryFormat32.Length;
            }
        }