/// <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); } }
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); }
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; }
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); }
/// <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; } }