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
[12110] Re:[급!질문]음성채팅 프로그램을 만드는중인데여 ...
BarleyTea [barleytea] 1355 읽음    2001-10-26 12:01
MM_WOM_DONE 메시지를 어떻게 처리하시나요?

콜백함수로? 아님 윈도우 메시지로?

MM_WOM_DONE 메시지 처리부분에서 waveOutUnprepareHeader

함수를 반드시 호출해줘야 합니다. 혹시 빠트린건 아닌지 확인해 보세영 ^^


김회현 님이 쓰신 글 :
: WIM_DATA 이벤트를 받으면 버퍼에 찬 음성을 압축해서 보내는 쓰레드 UDP로 보내구여..
:
: 상대가 보낸 음성 데이타를 받아서 압축을 풀어서 Play 할 수 있도록 플래이 쓰레드를 여기서 또 불러줘여.
:
: 이렇게 3개의 쓰레드가 돌구 있습니다.
:
: 코덱은 723.1 을 쓰고여..
:
:
:
: 그런데 플래이 쓰레드가 동작하면 프로그램이 리소스를 점점 많이 잡아 먹다가 다운 됩니다.
:
: 프로그램이 진행되다가 갑자기 다운 되는 것이라
: waveInStop,waveOutPause,waveInReset,waveOutUnprepareHeader,waveOutClose 와 같은 함수는 실행 되기도
: 전에 죽습니다.
:
: 문제의 쓰인 변수선언과 Play_Thread 입니다.
:
: #define        PCMBUFFERSIZE       960
: #define         G711BUFFERSIZE          480
: #define        BUFFERCOUNT       8         
: #define         G7231BUFFERSIZE         48
:
: typedef struct{
:         BYTE    pWaveOut[PCMBUFFERSIZE];
:         int    pchk;
:     int     endchk;
: } PlayBuf;
:
: PlayBuf        playbuf[BUFFERCOUNT];
:
: void __stdcall CGxAudio::Play_Thread(LPVOID lpParameter)
: {
: int errorCode;
: char tmp[100];
:
: BOOL  *bStop = (BOOL*)lpParameter;
:
:     while (*bStop)
:     {
:         if(PlayCheck == TRUE) {
:             Sleep(10);
:             continue;
:         }
:
:         // 이버퍼에 음성데이타가 있는지를 Check.
:         if (playbuf[PlayCount].pchk != 1) {
:             Sleep(10);
:             continue;
:         }
:
:         // 음성 데이타를 Header에 Setting
:         WaveHeaderOut[PlayCount]->lpData = (LPSTR)playbuf[PlayCount].pWaveOut;
:         WaveHeaderOut[PlayCount]->dwBufferLength = PCMBUFFERSIZE;
:         WaveHeaderOut[PlayCount]->dwBytesRecorded = 0L;
:         WaveHeaderOut[PlayCount]->dwFlags = 0L;
:         WaveHeaderOut[PlayCount]->dwLoops = 0L;
:
:         if (hWaveOut != NULL) {
:             // 음성 재생
:                         waveOutPrepareHeader(hWaveOut,WaveHeaderOut[PlayCount],sizeof(WAVEHDR));
:                        
:             errorCode=
:                                    waveOutWrite(hWaveOut,WaveHeaderOut[PlayCount],sizeof(WAVEHDR));
:                                   
:             if(errorCode) {
:                                 switch(errorCode){
:                                 case MMSYSERR_INVALHANDLE :
:                         ShowMessage("MMSYSERR_INVALHANDLE");
:                                         break;
:                                 case MMSYSERR_NODRIVER :
:                         ShowMessage("MMSYSERR_NODRIVER");
:                                         break;
:                                 case MMSYSERR_NOMEM :
:                         ShowMessage("MMSYSERR_NOMEM");
:                                         break;
:                                 case WAVERR_UNPREPARED :
:                         ShowMessage("WAVERR_UNPREPARED");
:                                         break;
:                                 }
:             }
:
:             playbuf[PlayCount].pchk = 0;
:
:             if (PlayCount == (BUFFERCOUNT-1)) PlayCount = 0;
:             else PlayCount++;
:
:         }
:     }
:
:     PlayThread_CreateCheck = 0;
:     *bStop = TRUE;
:     ExitThread(0);
: }
:
: waveOutWrite 함수를 지우고 실행해 보니깐 죽지는 않네여..
:
: 이 함수가 없으면 상대에게 넘어온 음성을 play이 못하는데 어떻하나여.. ㅜ.ㅜ
:
: 제발 답글 주세여~
:
: 아시거나.. 혹시 의심 가시는 부분이라두 말씀해 주시면 감사 하겠습니다. ^^

+ -

관련 글 리스트
12078 [급!질문]음성채팅 프로그램을 만드는중인데여 ... 김회현 1153 2001/10/25
12110     Re:[급!질문]음성채팅 프로그램을 만드는중인데여 ... BarleyTea 1355 2001/10/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.