السلام عليكم
في هذا المثال أفسر كيفية قراءة نص يقوم المستعمل بكتابته
البرنامج هو عبارة علىConsole Application يقوم على المكتبتين sapi.hو sapi.libالمتوفرة هنا
إستعملت أيضا المكتبتان التاليتان
#include <atlstr.h> #pragma comment(lib , "atlsd.lib")
وذلك لأتمكن من إستعمال النوع CString
هذا كود الدالة الرئيسية وهو عبارة فتح موارد الحاسوب(COM initiation) وإستدعاء المكتبات و تقديم(Instanciate) القسم الرئيسي ثم النطق بمحتوى النص المكتوب وأخيرا تحرير الموارد المحجوزة
int Speak(CString m_sText)
{//---------------------------
// Instance of the main class
ISpVoice * pVoice = NULL;
// Try to initialize
if (FAILED(CoInitialize(NULL)))
{ return -1;}
// Create Instance
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{ // Speak
hr = pVoice->Speak(m_sText.AllocSysString(), 0, NULL);
pVoice->Release();
pVoice = NULL;
}
CoUninitialize(); // release
}أما محتوى الدالة الرئيسية(main) يمكن أن يكون كما يلي
int _tmain(int argc, _TCHAR* argv[])
{ //-----------------------
char InputText[9000];
printf("Write Text to hear :");
scanf("%s",&InputText);
Speak((CString)InputText);
//------------------------
return 0;
}وأذكر هنا بضرورة إدماج الملفين sapi.lib و sapi.hمع المشروع من خلال
اقتباس(For Sapi.h) Project -> Properties-> C/C++ -> General -> Additional Include Directories -> then add the include folder(For Sapi.lib) Project -> Properties-> Linker -> General -> Additional LibraryDirectories -> then add the lib folder
علما أني أدرجت الملفين في البرنامج ولكن عند تجربته في حاسوب آخر سيكون هناك رسالة خطاء بعدم وجود الملفين لذلك يرجى التثبت من مسار الملفين كما سبق وأشرت.
لمزيد من المعلومات حول تحويل النص إلى قراءة يمكن الإطلاع على هذا الربط حيث يمكن تغير الصوة من صورة رجل الى صوة إمرأة أو رجل آخر أو رفع الصوت أو تخفيضه ...
والله أعلم