mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-10 04:31:34 -10:00
This replaces the previously used defines with inline functions which fixes a few warnings if the macros were ever used. This also changes fsspeech.cpp so it is compiled always since it has no dependency on the underlying speech system.
160 lines
2.9 KiB
C++
160 lines
2.9 KiB
C++
/*
|
|
* Code created by Thomas Whittaker (RT) for a FreeSpace 2 source code project
|
|
*
|
|
* You may not sell or otherwise commercially exploit the source or things you
|
|
* created based on the source.
|
|
*
|
|
*/
|
|
|
|
#include "globalincs/pstypes.h"
|
|
#include "osapi/osregistry.h"
|
|
#include "sound/fsspeech.h"
|
|
#include "sound/speech.h"
|
|
|
|
|
|
extern int Cmdline_freespace_no_sound;
|
|
|
|
const size_t MAX_SPEECH_BUFFER_LEN = 4096;
|
|
|
|
static int speech_inited = 0;
|
|
|
|
bool FSSpeech_play_from[FSSPEECH_FROM_MAX];
|
|
const char *FSSpeech_play_id[FSSPEECH_FROM_MAX] =
|
|
{
|
|
"SpeechTechroom",
|
|
"SpeechBriefings",
|
|
"SpeechIngame",
|
|
"SpeechMulti"
|
|
};
|
|
|
|
char Speech_buffer[MAX_SPEECH_BUFFER_LEN] = "";
|
|
size_t Speech_buffer_len;
|
|
|
|
bool fsspeech_init()
|
|
{
|
|
if (speech_inited) {
|
|
return true;
|
|
}
|
|
|
|
// if sound is disabled from the cmdline line then don't do speech either
|
|
if (Cmdline_freespace_no_sound) {
|
|
return false;
|
|
}
|
|
|
|
if(speech_init() == false) {
|
|
return false;
|
|
}
|
|
|
|
// Get the settings from the registry
|
|
for(int i = 0; i < FSSPEECH_FROM_MAX; i++) {
|
|
FSSpeech_play_from[i] =
|
|
os_config_read_uint(NULL, FSSpeech_play_id[i], 0) ? true : false;
|
|
nprintf(("Speech", "Play %s: %s\n", FSSpeech_play_id[i], FSSpeech_play_from[i] ? "true" : "false"));
|
|
}
|
|
|
|
int volume = os_config_read_uint(NULL, "SpeechVolume", 100);
|
|
speech_set_volume((unsigned short) volume);
|
|
|
|
int voice = os_config_read_uint(NULL, "SpeechVoice", 0);
|
|
speech_set_voice(voice);
|
|
|
|
speech_inited = 1;
|
|
|
|
return true;
|
|
}
|
|
|
|
void fsspeech_deinit()
|
|
{
|
|
if (!speech_inited)
|
|
return;
|
|
|
|
speech_deinit();
|
|
|
|
speech_inited = 0;
|
|
}
|
|
|
|
void fsspeech_play(int type, const char *text)
|
|
{
|
|
if (!speech_inited) {
|
|
nprintf(("Speech", "Aborting fsspech_play because speech_inited is false.\n"));
|
|
return;
|
|
}
|
|
|
|
if (type >= FSSPEECH_FROM_MAX) {
|
|
nprintf(("Speech", "Aborting fsspeech_play because speech type is out of range.\n"));
|
|
return;
|
|
}
|
|
|
|
if (type >= 0 && FSSpeech_play_from[type] == false) {
|
|
nprintf(("Speech", "Aborting fsspeech_play because we aren't supposed to play from type %s.\n", FSSpeech_play_id[type]));
|
|
return;
|
|
}
|
|
|
|
speech_play(text);
|
|
}
|
|
|
|
void fsspeech_stop()
|
|
{
|
|
if (!speech_inited)
|
|
return;
|
|
|
|
speech_stop();
|
|
}
|
|
|
|
void fsspeech_pause(bool playing)
|
|
{
|
|
if (!speech_inited)
|
|
return;
|
|
|
|
if(playing) {
|
|
speech_pause();
|
|
} else {
|
|
speech_resume();
|
|
}
|
|
}
|
|
|
|
void fsspeech_start_buffer()
|
|
{
|
|
Speech_buffer_len = 0;
|
|
Speech_buffer[0] = '\0';
|
|
}
|
|
|
|
void fsspeech_stuff_buffer(const char *text)
|
|
{
|
|
if (!speech_inited)
|
|
return;
|
|
|
|
size_t len = strlen(text);
|
|
|
|
if(Speech_buffer_len + len < MAX_SPEECH_BUFFER_LEN) {
|
|
strcat_s(Speech_buffer, text);
|
|
}
|
|
|
|
Speech_buffer_len += len;
|
|
}
|
|
|
|
void fsspeech_play_buffer(int type)
|
|
{
|
|
if (!speech_inited)
|
|
return;
|
|
|
|
fsspeech_play(type, Speech_buffer);
|
|
}
|
|
|
|
// Goober5000
|
|
bool fsspeech_play_from(int type)
|
|
{
|
|
Assert(type >= 0 && type < FSSPEECH_FROM_MAX);
|
|
|
|
return (speech_inited && FSSpeech_play_from[type]);
|
|
}
|
|
|
|
// Goober5000
|
|
bool fsspeech_playing()
|
|
{
|
|
if (!speech_inited)
|
|
return false;
|
|
|
|
return speech_is_speaking();
|
|
}
|