| Код | // 555555555Dlg.cpp : implementation file //
#include "stdafx.h" #include "555555555.h" #include "555555555Dlg.h" #include <initguid.h> #include <spchwrap.h>
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
// Óêàçàòåëü íà èíòåðôåéñ, êîòîðûé áóäåò èñïîëüçîâàí äëÿ ïîèñêà óñòàíîâëåííûõ êîìïîíåò PITTSENUM m_pITTSEnum; // Óêàçàòåëü íà èíòåðôåéñ, êîòîðûé áóäåò îçâó÷èâàòü òåêñò PITTSCENTRAL m_pITTSCentral; // Óêàçàòåëü íà èíòåðôåéñ, óïðàâëÿþùèé íàñòðîéêàìè ðå÷åâîãî äâèæêà PITTSATTRIBUTES m_pITTSAttributes; // Èíòåðôåéñ ðàáîòû ñ óñòíîéñòâîì âûâîäà PIAUDIOMULTIMEDIADEVICE m_pIMMD; // Ìàññèâ ãëàáàëüíûõ èíäåíòèôèêàòîðîâ GUID m_GUIDModes[500];
///////////////////////////////////////////////////////////////////////////// // CMy555555555Dlg dialog
CMy555555555Dlg::CMy555555555Dlg(CWnd* pParent /*=NULL*/) : CDialog(CMy555555555Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CMy555555555Dlg) m_SpeechText = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
void CMy555555555Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMy555555555Dlg) DDX_Control(pDX, IDC_COMBO1, m_CComboBoxModes); DDX_Text(pDX, IDC_EDIT1, m_SpeechText); //}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CMy555555555Dlg, CDialog) //{{AFX_MSG_MAP(CMy555555555Dlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, OnButton1) //}}AFX_MSG_MAP END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CMy555555555Dlg message handlers
BOOL CMy555555555Dlg::OnInitDialog() { CDialog::OnInitDialog();
// Çàãðóçêà áèáëèîòåêè ðàáîòû ñ COM if (FAILED(::CoInitialize(NULL))) { // Can't initialize COM library return FALSE; }
// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here HRESULT hRes; m_pITTSEnum = NULL;
hRes = CoCreateInstance (CLSID_TTSEnumerator, NULL, CLSCTX_ALL, IID_ITTSEnum, (void**)&m_pITTSEnum);
PITTSENUM pClone1; TTSMODEINFO TTSModeInfo; DWORD dwNumTimes; int index = 0;
// Ñîçäàåì êîïèþ èíòåðôåéñà ïåðå÷èñëåíèÿ êîìïîíåíò hRes = m_pITTSEnum -> Clone(&pClone1); // Ïðîâåðÿåì ðåçóëüòàò âûïîëíåíèÿ ïðåäûäóùåé îïåðàöèè if(FAILED(hRes)) { // Âûâîä ñîîáùåíèÿ îá îøèáêå MessageBox (TEXT("Couldn't clone ITTSEnum state, aborting enumeration test"), TEXT("Error"), MB_OK ); return FALSE; } // ×òåíèå èíôîðìàöèè î ïåðâîé èíòåðôåéñå â ïåðå÷èñëåíèè // Èìåíà êîìïîíåíò äîáàâëÿþòñÿ â êîìáèíèðîâàííûé ñïèñîê hRes = pClone1-> Next (1, &TTSModeInfo, &dwNumTimes);
if(dwNumTimes == 0) { // Êîëè÷åñòâî óñòàíîâëåííûõ êîìïîíåíò ðàâíî íóëþ return FALSE; } // Ñîõðàíåíèå èíôîðìàöèè î êîìïîíåíòàõ while (dwNumTimes) { // Ïðîâåðêà òèïà ðå÷åâîé êîìïîíåíòû if (TTSModeInfo.dwFeatures & TTSFEATURE_ANYWORD) { // Êîìïîíåíòà âîñïðîèçâîäèò âñå ñëîâà m_CComboBoxModes.AddString(TTSModeInfo.szModeName); } else { // Êîìïîíåíòà òîëüêî äëÿ ñïåöèôè÷åñêèõ ñëîâ CString sz; sz = TTSModeInfo.szModeName; sz += " (Can only speak specific words!)"; m_CComboBoxModes.AddString(sz); } // Çàïèñûâàåì GUID êîìïîíåíòû â ìàññèâ m_GUIDModes[index++] = TTSModeInfo.gModeID; // Ïåðåõîä íà ñëåäóþùèé øàã ïåðå÷èñëåíèÿ hRes = pClone1 -> Next (1, &TTSModeInfo, &dwNumTimes); } // Îñâîáîæäàåì óêàçàòåëü íà èíòåðôåéñ (ñïåöèôèêà ðàáîòû ñ COM) pClone1 -> Release(); return TRUE;
// Îñâîáîæäàåì èñïîëüçîâàííûå ðàíåå èíòåðôåéñû if(m_pITTSCentral) { // Îñâîáîæäåíèå èíòåðôåéñà ðå÷åâîé êîìïîíåíòû m_pITTSCentral->Release(); m_pITTSCentral= NULL; } // Îñâîáîæäåíèå èíòåðôåéñà âûâîäà çâóêà if (m_pIMMD) { while (m_pIMMD->Release()); m_pIMMD = NULL; } // Ïîëó÷åíèå èíäåêñà âûäåëåííîé ñòðîêè â ñïèñêå int i = m_CComboBoxModes.GetCurSel(); // Ñîçäàåì íîâûé èíòåðôåéñ óñòðîéñòâà âûâîäà hRes = ::CoCreateInstance (CLSID_MMAudioDest, NULL, CLSCTX_ALL, IID_IAudioMultiMediaDevice, (void**)&m_pIMMD); // Ïðîâåðÿåì ðåçóëüòàò âûïîëíåíèÿ ïðåäûäóùåé îïåðàöèè if (FAILED(hRes)) { // Âûâîä ñîîáùåíèÿ îá îøèáêå MessageBox(TEXT("Error creating AudioDest Object(CoCreateInstance), app will terminate."), NULL, MB_OK ); }
// Óñòàíàâëèâàåì íîâûé òåêóùèé èíòåðôåéñ. hRes = m_pITTSEnum -> Select(m_GUIDModes[i], &m_pITTSCentral, m_pIMMD);
return TRUE; // return TRUE unless you set the focus to a control }
// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.
void CMy555555555Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } }
// The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CMy555555555Dlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; }
void CMy555555555Dlg::OnButton1() {
// Çàïîëíÿåì ñòðóêòóðó, êîòîðàÿ çàäàåò âîñïðîèçâîäèìûé òåêñò SDATA Text; Text.dwSize = strlen(m_SpeechText) + 1; Text.pData = m_SpeechText.GetBuffer(0); // Ïðîèçíîñèì òåêñò m_pITTSCentral -> TextData(CHARSET_TEXT, FALSE, Text, NULL, IID_ITTSBufNotifySink);
}
void CMy555555555Dlg::OnOK() { // Îñâîáîæäåíèå áèáëèîòåêè COM ::CoUninitialize(); CDialog::OnOK(); }
|
находит движки звуковые отображает их в комбобокс.....далее при нажатии на кнопку хочу прослушать произвольный текст с эдита....вот тут ругается... точнее что-то в этом ему не нравится | Код | m_pITTSCentral -> TextData(CHARSET_TEXT, FALSE, Text, NULL, IID_ITTSBufNotifySink);
|
мот не туда куда вообще вставил ....сам не бум бум в етом...делал по докам которые нашёл...HELP
|