Beispiel #1
0
int CVoicePointerPool::FindUnusedVoice(void)
{
	int nIndex = -1;
	
	if (!m_qVoiceUnusedSlots.empty())
	{
		nIndex = m_qVoiceUnusedSlots.front();
		m_qVoiceUnusedSlots.pop();
	}
	else
		nIndex = CreateVoice();

	return nIndex;
}
Beispiel #2
0
HRESULT LoadVoices(void){
	HRESULT 					hr;
    ISpObjectToken 				*pToken;
	IEnumSpObjectTokens			*cpEnum;
	wchar_t						*pDescription, *p, *ptr, szBuffer[64];

	hr = _EnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);
	if(hr == S_OK){
		g_VoicesCount = 0;
		pDescription = (wchar_t *)CoTaskMemAlloc(128 * sizeof(wchar_t));
		while(IEnumSpObjectTokens_Next(cpEnum, 1, &pToken, NULL) == S_OK){
			hr = _GetDescription(pToken, &pDescription);
			if(SUCCEEDED(hr)){
				g_VoicesCount++;
				wcscpy(g_PVoices[g_VoicesCount - 1].name, pDescription);
				g_PVoices[g_VoicesCount - 1].token = pToken;
				GetPrivateProfileStringW(S_VOICES, pDescription, NULL, szBuffer, 64, g_NotePaths.INIFile);
				if(*szBuffer){
					p = wcstok(szBuffer, L"|", &ptr);
					g_PVoices[g_VoicesCount - 1].rate = _wtol(p);
					p = wcstok(NULL, L"|", &ptr);
					g_PVoices[g_VoicesCount - 1].volume = (unsigned short)_wtoi(p);
					g_PVoices[g_VoicesCount - 1].pitch = (short)_wtoi(ptr);
				}
				else{
					ISpVoice		*pVoice = CreateVoice();
					ISpVoice_SetVoice(pVoice, (ISpObjectToken *)g_PVoices[g_VoicesCount - 1].token);
					ISpVoice_GetVolume(pVoice, &g_PVoices[g_VoicesCount - 1].volume);
					ISpVoice_GetRate(pVoice, &g_PVoices[g_VoicesCount - 1].rate);
					g_PVoices[g_VoicesCount - 1].pitch = 0;
					ReleaseVoice(pVoice);
				}
				if(g_VoicesCount == NELEMS(g_PVoices))
					break;
			}
			if (FAILED(hr))
            {
                ISpObjectToken_Release(pToken);
				break;
            }
		}
		CoTaskMemFree(pDescription);
	}
	else
    {
        hr = SPERR_NO_MORE_ITEMS;
    }
    return hr;
}
Beispiel #3
0
size_t Sound::GetNotPlayingVoiceIndex()
{
	auto voiceCount = m_Voices.size();

	for (size_t i = 0u; i < voiceCount; i++)
	{
		if (!m_Voices[i].isPlaying)
		{
			return i;
		}
	}

	// All voices are playing
	return CreateVoice();
}