C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[2005] Re:늦어서 죄송합니다...
박지훈.임프 [cbuilder] 3793 읽음    1999-09-28 00:00
: 안녕하세요...
:
: 답변 잘 봤습니다...
:
: 추석은 잘 보내셨는지요...
:
: 임프님 말씀대로 전에 로레벨수준의 waveinstart 등의 api를 써서
:
: 작업을 해보려고 했습니다...
:
: 다음은 녹음하는 부분입니다...
:
:     WaveRecord.wf.wFormatTag = 1;
:     WaveRecord.wf.nChannels = 1;
:     WaveRecord.wf.nSamplesPerSec = 8000;
:     WaveRecord.wf.nBlockAlign = 1;
:     WaveRecord.wf.nAvgBytesPerSec = 8000 * WaveRecord.wf.nChannels * WaveRecord.wf.nBlockAlign;
:     WaveRecord.wBitsPerSample = 8;
:
:     lDatasize = (DWORD)WaveRecord.wf.nAvgBytesPerSec * ctime;
:
:     WaveDataBlockIn1 = ::GlobalAlloc(GMEM_MOVEABLE,lDatasize);
:     pWaveIn1 = (LPBYTE)::GlobalLock(WaveDataBlockIn1);
: //    pWaveOut1 = pWaveIn1;
:
:     waveInOpen((LPHWAVEIN)&hWaveInn1,WAVE_MAPPER,(tWAVEFORMATEX*)&WaveRecord,0L,0L,0L);
:
:     WaveHeaderIn1.lpData = (LPSTR)pWaveIn1;
:     WaveHeaderIn1.dwBufferLength = lDatasize;
:     WaveHeaderIn1.dwFlags = 0L;
:     WaveHeaderIn1.dwLoops = 0L;
:     WaveHeaderIn1.dwBytesRecorded = 0;//lDatasize;
:
:     waveInPrepareHeader(hWaveInn1,&WaveHeaderIn1,sizeof(WaveHeaderIn1));
:     waveInAddBuffer(hWaveInn1,&WaveHeaderIn1,sizeof(WaveHeaderIn1));
:
:     waveInStart(hWaveInn1);
:
:     while( WaveHeaderIn1.dwBytesRecorded != lDatasize )
:         Application->ProcessMessages();
:
:     waveInReset(hWaveInn1);
:
:     waveInUnprepareHeader(hWaveInn1,&WaveHeaderIn1,sizeof(WaveHeaderIn1));
:     waveInClose(hWaveInn1);
:
: 위에서 pWaveIn1 이라는 것이 녹음이 시작되서 자료가 저장되는
:
: 부분의 시작 포인터입니다...
:
: 물론 웨이브포맷으로 저장되있겠죠...
:
: 이 부분부터 원하는 만큼 버퍼에 옮기고 다시 다른장소의 메모리
:
: 블록으로 옮겨서 편집을 해보려고 하거든요...
:
: 근데 이부분에서 저는 간단히 버퍼를 char Buf[SIZE] 로 잡고
:
: strncpy( Buf , (char *)pWaveIn1 , SIZE)를 써서 다시 다른
:
: 메모리 블록으로 옮기니까 자료가 영 엉망인지 출력 자체가 안되더군
:
: 요...
:
: 음.... 제 설명이 너무 두서가 없어서리.... 이거원....
:
: 조언을 부탁드리겠습니다...
:
: 안녕히계세요...
:
:



임펠리테리입니다.

시간이 있으면 직접 코딩을 해보고 답변을 드려야 하는데.. 지금은 도저히 시간을 낼 수가 없네요.
일단 한가지 짚어드릴 것은... 버퍼메모리를 복사할때 strncpy() 함수를 쓰는 것은 좋지 않을텐데요.
말 그대로 스트링 복사 함수이므로, 널문자(0값)을 만나면 복사를 멈추게 됩니다.
대신 memcpy() 함수나 CopyMemory() api 함수를 쓰시기 바랍니다.

그럼 참고하시길...

+ -

관련 글 리스트
1997 늦어서 죄송합니다... 문보석 3785 1999/09/27
2005     Re:늦어서 죄송합니다... 박지훈.임프 3793 1999/09/28
2004     자답... 문보석 3401 1999/09/28
2006         답변을 쓰는 중에 자답을... 꽈당~ ^^;; 박지훈.임프 3337 1999/09/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.