コード例 #1
0
        unsafe public DirectCaptureSound(SoundMode mode, int channels, int frequency, int bufferSize)
        {
            SoundMode newMode = mode | SoundMode.Loop | SoundMode.Software;

            int hr;

            if (DirectSoundWorld.Instance.recordDriverIndex == -1)
            {
                DirectSoundWorld.Warning("Recording failed. No active device.");
                return;
            }
            GUID deviceGuid = DirectSoundWorld.Instance.recordDriverGuids[
                DirectSoundWorld.Instance.recordDriverIndex];

            //soundCapture
            void */*IDirectSoundCapture8*/ tempSoundCapture;

            hr = DSound.DirectSoundCaptureCreate(&deviceGuid, out tempSoundCapture, null);
            if (Wrapper.FAILED(hr))
            {
                DirectSoundWorld.Warning("DirectSoundCaptureCreate", hr);
                return;
            }
            soundCapture = (IDirectSoundCapture8 *)tempSoundCapture;

            //waveFormat
            waveFormat = (WAVEFORMATEX *)NativeUtils.Alloc(NativeMemoryAllocationType.SoundAndVideo,
                                                           sizeof(WAVEFORMATEX));
            NativeUtils.ZeroMemory((IntPtr)waveFormat, sizeof(WAVEFORMATEX));
            waveFormat->wFormatTag      = DSound.WAVE_FORMAT_PCM;
            waveFormat->nChannels       = (ushort)channels;
            waveFormat->nSamplesPerSec  = (uint)frequency;
            waveFormat->wBitsPerSample  = 16;
            waveFormat->nBlockAlign     = (ushort)((waveFormat->nChannels * waveFormat->wBitsPerSample) / 8);
            waveFormat->nAvgBytesPerSec = waveFormat->nSamplesPerSec * waveFormat->nBlockAlign;

            //captureBuffer

            DSCBUFFERDESC bufferDesc = new DSCBUFFERDESC();

            //ZeroMemory( &bufferDesc, sizeof( DSCBUFFERDESC ) );
            bufferDesc.dwSize        = (uint)sizeof(DSCBUFFERDESC);
            bufferDesc.dwBufferBytes = (uint)bufferSize;
            bufferDesc.lpwfxFormat   = waveFormat;

            void */*IDirectSoundCaptureBuffer*/ tempCaptureBuffer;

            hr = IDirectSoundCapture8.CreateCaptureBuffer(soundCapture,
                                                          ref bufferDesc, out tempCaptureBuffer, null);
            if (Wrapper.FAILED(hr))
            {
                DirectSoundWorld.Warning("CreateCaptureBuffer", hr);
                IDirectSoundCapture8.Release(soundCapture);
                soundCapture = null;
                return;
            }
            captureBuffer = (IDirectSoundCaptureBuffer *)tempCaptureBuffer;

            //get bufferSize
            DSCBCAPS bufferCaps = new DSCBCAPS();

            //ZeroMemory( &bufferCaps, sizeof( DSCBCAPS ) );
            bufferCaps.dwSize = (uint)sizeof(DSCBCAPS);
            IDirectSoundCaptureBuffer.GetCaps(captureBuffer, ref bufferCaps);
            this.bufferSize = (int)bufferCaps.dwBufferBytes;

            Init(null, newMode, 100000.0f, channels, frequency);
        }
コード例 #2
0
		public unsafe static extern int CreateCaptureBuffer( void*/*IDirectSoundCapture8*/ _this,
			ref DSCBUFFERDESC pcDSCBufferDesc,
			out void*/*IDirectSoundCaptureBuffer*/ ppDSCBuffer,
			void* pUnkOuter );
コード例 #3
0
 public unsafe static extern int CreateCaptureBuffer(void */*IDirectSoundCapture8*/ _this,
                                                     ref DSCBUFFERDESC pcDSCBufferDesc,
                                                     out void */*IDirectSoundCaptureBuffer*/ ppDSCBuffer,
                                                     void *pUnkOuter);
コード例 #4
0
ファイル: DirectSound.cs プロジェクト: whztt07/SDK
		unsafe public DirectCaptureSound( SoundMode mode, int channels, int frequency, int bufferSize )
		{
			SoundMode newMode = mode | SoundMode.Loop | SoundMode.Software;

			int hr;

			if( DirectSoundWorld.Instance.recordDriverIndex == -1 )
			{
				DirectSoundWorld.Warning( "Recording failed. No active device." );
				return;
			}
			GUID deviceGuid = DirectSoundWorld.Instance.recordDriverGuids[
				DirectSoundWorld.Instance.recordDriverIndex ];

			//soundCapture
			void*/*IDirectSoundCapture8*/ tempSoundCapture;
			hr = DSound.DirectSoundCaptureCreate( &deviceGuid, out tempSoundCapture, null );
			if( Wrapper.FAILED( hr ) )
			{
				DirectSoundWorld.Warning( "DirectSoundCaptureCreate", hr );
				return;
			}
			soundCapture = (IDirectSoundCapture8*)tempSoundCapture;

			//waveFormat
			waveFormat = (WAVEFORMATEX*)NativeUtils.Alloc( NativeMemoryAllocationType.SoundAndVideo,
				sizeof( WAVEFORMATEX ) );
			NativeUtils.ZeroMemory( (IntPtr)waveFormat, sizeof( WAVEFORMATEX ) );
			waveFormat->wFormatTag = DSound.WAVE_FORMAT_PCM;
			waveFormat->nChannels = (ushort)channels;
			waveFormat->nSamplesPerSec = (uint)frequency;
			waveFormat->wBitsPerSample = 16;
			waveFormat->nBlockAlign = (ushort)( ( waveFormat->nChannels * waveFormat->wBitsPerSample ) / 8 );
			waveFormat->nAvgBytesPerSec = waveFormat->nSamplesPerSec * waveFormat->nBlockAlign;

			//captureBuffer

			DSCBUFFERDESC bufferDesc = new DSCBUFFERDESC();
			//ZeroMemory( &bufferDesc, sizeof( DSCBUFFERDESC ) );
			bufferDesc.dwSize = (uint)sizeof( DSCBUFFERDESC );
			bufferDesc.dwBufferBytes = (uint)bufferSize;
			bufferDesc.lpwfxFormat = waveFormat;

			void*/*IDirectSoundCaptureBuffer*/ tempCaptureBuffer;

			hr = IDirectSoundCapture8.CreateCaptureBuffer( soundCapture,
				ref bufferDesc, out tempCaptureBuffer, null );
			if( Wrapper.FAILED( hr ) )
			{
				DirectSoundWorld.Warning( "CreateCaptureBuffer", hr );
				IDirectSoundCapture8.Release( soundCapture );
				soundCapture = null;
				return;
			}
			captureBuffer = (IDirectSoundCaptureBuffer*)tempCaptureBuffer;

			//get bufferSize
			DSCBCAPS bufferCaps = new DSCBCAPS();
			//ZeroMemory( &bufferCaps, sizeof( DSCBCAPS ) );
			bufferCaps.dwSize = (uint)sizeof( DSCBCAPS );
			IDirectSoundCaptureBuffer.GetCaps( captureBuffer, ref bufferCaps );
			this.bufferSize = (int)bufferCaps.dwBufferBytes;

			Init( null, newMode, 100000.0f, channels, frequency );
		}