1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
/*
* 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();
}
|