J'essaie de convertir le texte en fichier wave en utilisant la fonction suivante. Cela fonctionne très bien s'il est appelé depuis le thread principal de l'interface utilisateur. Mais il échoue lors de l'appel d'un autre thread. Comment l'appeler à partir d'une fonction multi-thread?Comment convertir du texte en Wave en utilisant SAPI avec multithreading?
void Pan_Channel::TextToPlaybackFile(CString Text, CString FileName)
{
// Result variable
HRESULT Result = S_OK;
// Voice Object
CComPtr<ISpVoice> cpVoice;
// Create a SAPI Voice
Result = cpVoice.CoCreateInstance(CLSID_SpVoice);
// Audio format
CSpStreamFormat cAudioFmt;
// Set the audio format
if(SUCCEEDED(Result))
{
Result = cAudioFmt.AssignFormat(SPSF_8kHz16BitMono);
}
// File Stream
CComPtr<ISpStream> cpStream;
// Call SPBindToFile, a SAPI helper method, to bind the audio stream to the file
if(SUCCEEDED(Result))
{
Result = SPBindToFile(FileName, SPFM_CREATE_ALWAYS, &cpStream,
&cAudioFmt.FormatId(), cAudioFmt.WaveFormatExPtr());
}
// set the output to cpStream so that the output audio data will be stored in cpStream
if(SUCCEEDED(Result))
{
Result = cpVoice->SetOutput(cpStream, TRUE);
}
// Speak the text syncronously
if(SUCCEEDED(Result))
{
Result = cpVoice->Speak(Text.AllocSysString(), SPF_DEFAULT, NULL);
}
// close the stream
if(SUCCEEDED(Result))
{
Result = cpStream->Close();
}
// Release stream
cpStream.Release();
// Release voice object
cpVoice.Release();
}
définir échoue. Ce qui échoue Quel message d'erreur, le cas échéant, obtenez-vous? – Glen