![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Частый гость ![]() ![]() ![]() Группа: Участники Сообщений: 42 Регистрация: 11.8.2008 Пользователь №: 11688 ![]() |
Здравствуйте.
АТС ipLDK 300. Использую библиотеку ATAPI для работы через TAPI с АТС. Получается отвечать на звоноки, есть мониторинг звонков, но записать разговор (звонки) не получается. Вот кусок, кода, это измененный TCMon, функция . Если кто делал что-нить подобное, подскажите где косяк. CODE void CMonitorDlg::OnAnswer() { ClearErrors(); CTapiCall* pCall = GetSelectedCall(); if (pCall) { // Make sure we are owner. LONG lResult = pCall->SetPrivilege(LINECALLPRIVILEGE_OWNER); if (lResult != 0) ErrorMsg ("lineSetCallPrivilege failed, rc=0x%lx", lResult); else { lResult = GetTAPIConnection()->WaitForReply(pCall->Answer()); if (lResult != 0) ErrorMsg("lineAnswer failed, rc=0x%lx", lResult); else { CString sLog, s; HWAVEIN hWaveIn; DWORD dwWaveInID = pCall->GetWaveInDeviceID(); // получаю wave/in // всегда получаю равный 0, это нормально? WAVEFORMATEX wf = {}; WAVEHDR *pWH; MMRESULT dwRes; wf.wFormatTag = WAVE_FORMAT_PCM; wf.nChannels = 1; wf.nSamplesPerSec = 22050L; wf.wBitsPerSample = 8; wf.nBlockAlign = 1; wf.nAvgBytesPerSec = 22050L; wf.cbSize = 0; dwRes = waveInOpen(&hWaveIn, dwWaveInID, &wf, (DWORD_PTR)this->m_hWnd, 0, CALLBACK_WINDOW); if (dwRes != MMSYSERR_NOERROR) { switch (dwRes) { case MMSYSERR_ALLOCATED: { s.Format("Error: waveInOpen result: MMSYSERR_ALLOCATEDrn"); break; } case MMSYSERR_BADDEVICEID:{ s.Format("Error: waveInOpen result: MMSYSERR_BADDEVICEIDrn"); break; } case MMSYSERR_NODRIVER:{ s.Format("Error: waveInOpen result: MMSYSERR_NODRIVERrn"); break; } case MMSYSERR_NOMEM:{ s.Format("Error: waveInOpen result: MMSYSERR_NOMEMrn"); break; } case WAVERR_BADFORMAT:{ s.Format("Error: waveInOpen result: WAVERR_BADFORMATrn"); break; } default: s = "Error: waveInOpen result: Неизвестаня ошибкаrn"; } m_cEdit.GetWindowText(sLog); sLog += s; m_cEdit.SetWindowText(sLog); AfxMessageBox(s, MB_OK |MB_ICONEXCLAMATION); return; } pWH = new WAVEHDR; memset(pWH, 0, sizeof(WAVEHDR)); pWH->lpData = m_pbWaveBuffer; pWH->dwBufferLength = BUFFLEN; pWH->dwUser = NULL; pWH->dwFlags = 0; pWH->dwLoops = 0; if (waveInPrepareHeader(hWaveIn, pWH, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { AfxMessageBox("Error: waveInPrepareHeader", MB_OK |MB_ICONEXCLAMATION); waveInClose(hWaveIn); delete pWH; return; } if (waveInAddBuffer(hWaveIn, pWH, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { AfxMessageBox("Error: waveInAddBuffer", MB_OK |MB_ICONEXCLAMATION); waveInUnprepareHeader(hWaveIn, pWH, sizeof(WAVEHDR)); waveInClose(hWaveIn); delete pWH; return; } if (waveInStart(hWaveIn) != MMSYSERR_NOERROR) { AfxMessageBox("Error: waveInStart", MB_OK |MB_ICONEXCLAMATION); waveInUnprepareHeader(hWaveIn, pWH, sizeof(WAVEHDR)); waveInClose(hWaveIn); delete pWH; return; } else { m_hFile = ::mmioOpen("record.wav", NULL, MMIO_CREATE|MMIO_WRITE|MMIO_EXCLUSIVE | MMIO_ALLOCBUF); ZeroMemory(&m_MMCKInfoParent, sizeof(MMCKINFO)); m_MMCKInfoParent.fccType = mmioFOURCC('W','A','V','E'); MMRESULT mmResult = ::mmioCreateChunk(m_hFile, &m_MMCKInfoParent, MMIO_CREATERIFF); ZeroMemory(&m_MMCKInfoChild, sizeof(MMCKINFO)); m_MMCKInfoChild.ckid = mmioFOURCC('f','m','t',' '); m_MMCKInfoChild.cksize = sizeof(WAVEFORMATEX) + wf.cbSize; mmResult = ::mmioCreateChunk(m_hFile, &m_MMCKInfoChild, 0); mmResult = ::mmioWrite(m_hFile, (char*)&wf, sizeof(WAVEFORMATEX) + wf.cbSize); mmResult = ::mmioAscend(m_hFile, &m_MMCKInfoChild, 0); m_MMCKInfoChild.ckid = mmioFOURCC('d', 'a', 't', 'a'); mmResult = ::mmioCreateChunk(m_hFile, &m_MMCKInfoChild, 0); } } } } } функция, которая обрабатывает MM_WM_DATA CODE LRESULT CMonitorDlg::OnWIMDATA(WPARAM wp, LPARAM lp) { MMRESULT Error = MMSYSERR_NOERROR; HWAVEIN hWaveIn = (HWAVEIN)wp; WAVEHDR *pWH = (WAVEHDR*)lp; CString sLog, s; // продолжаем получение данных с линии MMRESULT mmRes = waveInUnprepareHeader(hWaveIn, pWH, sizeof(WAVEHDR)); if(mmRes == MMSYSERR_NOERROR) { if (NULL != m_hFile) { mmioWrite(m_hFile, pWH->lpData, pWH->dwBytesRecorded); } pWH->dwFlags = 0; mmRes = waveInPrepareHeader(hWaveIn, pWH, sizeof(WAVEHDR)); if(mmRes == MMSYSERR_NOERROR) { mmRes = waveInAddBuffer(hWaveIn, pWH, sizeof(WAVEHDR)); } } return 0; //mmRes; } Обработку ошибок, из кода, убрал. Файл создается, даже проигрывается, но он пуст, т.е. тишина, нет звуков ![]() |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 18.7.2025, 7:31 |