1. 2011. 1. 27. 03:09 Library/Document
http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.idirectsoundcapturebuffer8.idirectsoundcapturebuffer8.lock(v=VS.85).aspx
우선 아날로그 사운드를 디지털로 변환, 소프트웨어 개발 에 대한 지식이 필요 합니다.
아래 문서는 특정한 프로그래밍 언어로 코딩된것이 아닌 코딩 패턴 입니다.

선언
IDirectSoundCapture : DirectSound_Device
IDirectSoundCaptureBuffer : DirectSound_CaptureBuffer
DWORD : 버퍼위치, 버퍼길이, 반환위치1,반환위치2, 반환길이1,반환길이2

WAVEFORMATEX
.nChannels = 사운드 채널 수 2
.wBitsPerSample = 오디오 진폭 정밀도 비트 16
.nSamplesPerSec = 오디오 파장 초당 기록수 48000
.nBlockAlign = 채널수 * 정밀도 바이트 수 .nChannels * .wBitsPerSample / 8
.wFormatTag = 상수 WAVE_FORMAT_PCM = 1
.nAvgBytesPerSec = 초당 샘플링 수 * 블록크기 .nSamplesPerSec * .nBlockAlign

DSCBUFFERDESC
.lpwfxFormat = 웨이브 구조체 포인터(메모리주소) WAVEFORMATEX
.dwSize = 구조체 크기 DSCBUFFERDESC
.dwFlags = 플래그 상수 DSCBCAPS_WAVEMAPPED
.dwReserved = 예비공간 상수 0
.dwBufferBytes = 버퍼크기 WAVEFORMATEX.nAvgBytesPerSec
변수길이 = 버퍼크기 .dwBufferBytes
DirectSoundCaptureCreate( null, DirectSound_Device, null ) = 반환값 확인 DS_OK
DirectSound_Device.CreateCaptureBuffer( DSCBUFFERDESC, DirectSound_CaptureBuffer, null ) = 반환값 확인 DS_OK
사운드 캡쳐 시작
DirectSound_CaptureBuffer.Start( DSCBSTART_LOOPING );
변수위치 = 0

이제 새 쓰레드를 생성하고 아래 패턴을 코딩 합니다.

스레드 잠시 멈춤 10ms
/LEA/ 는 포인터 반환문 입니다. 변수위치와 변수길이는 버퍼에 대한것 임으로 버퍼 구간 안에 잘 들어가도록 해줍니다.
DirectSound_CaptureBuffer.Lock( 변수위치,변수길이, /LEA/반환위치1,/LEA/반환길이1 ,/LEA/반환위치2,/LEA/반환길이2, 0 )
= 반환값 확인 DS_OK
캡쳐 프로세싱 사운드( 반환위치1 | 반환길이1 ), 버퍼 잘리는경우 데이터 사운드( 반환위치2 | 반환길이2 | 반환위치1 | 반환길이1 )
DirectSound_CaptureBuffer.UnLock( 반환위치1,반환길이1 , 반환위치2,반환위치2 )
Posted by Nightly Luna
,
® © Tanny Tales
/ rss