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 160 161 162 163
|
/*
* 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.
*
*/
#ifdef FS2_SPEECH
#ifdef _WIN32
#include <windows.h>
#endif
#include "sound/fsspeech.h"
#include "sound/speech.h"
#include "osapi/osregistry.h"
#include "globalincs/pstypes.h"
extern int Cmdline_freespace_no_sound;
const int MAX_SPEECH_BUFFER_LEN = 4096;
static int speech_inited = 0;
bool FSSpeech_play_from[FSSPEECH_FROM_MAX];
char *FSSpeech_play_id[FSSPEECH_FROM_MAX] =
{
"SpeechTechroom",
"SpeechBriefings",
"SpeechIngame",
"SpeechMulti"
};
char Speech_buffer[MAX_SPEECH_BUFFER_LEN] = "";
int 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;
}
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)
return;
if(type >= FSSPEECH_FROM_MAX) return;
if(type >= 0 && FSSpeech_play_from[type] == false) 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;
int 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();
}
#endif // FS2_SPEECH defined
|