Attached Files |
-
macspeech.patch (5,716 bytes) 2012-04-13 00:20
Index: projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
===================================================================
--- projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (revision 8666)
+++ projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (working copy)
@@ -4169,6 +4169,7 @@
USE_OPENAL,
NO_DIRECT3D,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = ../../libjpeg;
LIBRARY_STYLE = STATIC;
@@ -4213,6 +4214,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
@@ -4324,6 +4326,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GENERATE_PROFILING_CODE = NO;
@@ -4360,6 +4363,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
@@ -4535,6 +4539,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GENERATE_PROFILING_CODE = NO;
@@ -4590,6 +4595,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
@@ -4626,6 +4632,7 @@
USE_OPENAL,
NO_DIRECT3D,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = ../../libjpeg;
LIBRARY_STYLE = STATIC;
@@ -4741,6 +4748,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
@@ -4795,6 +4803,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
Index: configure.ac
===================================================================
--- configure.ac (revision 8666)
+++ configure.ac (working copy)
@@ -436,7 +436,7 @@
dnl extra OSX frameworks
if test "$fs2_os_osx" = "yes" ; then
- FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation"
+ FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation -framework ApplicationServices"
fi
Index: code/sound/speech.cpp
===================================================================
--- code/sound/speech.cpp (revision 8666)
+++ code/sound/speech.cpp (working copy)
@@ -29,6 +29,9 @@
#include <sphelper.h>
ISpVoice *Voice_device;
+#elif defined(__APPLE__)
+#include <ApplicationServices/ApplicationServices.h>
+ SpeechChannel speech_channel;
#elif defined(SCP_UNIX)
#include <fcntl.h>
// #include <stdio.h>
@@ -56,6 +59,13 @@
(void **)&Voice_device);
Speech_init = SUCCEEDED(hr);
+#elif defined(__APPLE__)
+ OSErr err;
+ err = NewSpeechChannel(NULL, &speech_channel);
+ if (err) {
+ return false;
+ }
+ Speech_init = true;
#else
speech_dev = open("/dev/speech", O_WRONLY | O_DIRECT);
@@ -79,6 +89,8 @@
#ifdef _WIN32
Voice_device->Release();
+#elif defined(__APPLE__)
+ DisposeSpeechChannel(speech_channel);
#else
close(speech_dev);
// fclose(speech_dev);
@@ -113,6 +125,34 @@
speech_stop();
return SUCCEEDED(Voice_device->Speak(Conversion_buffer, SPF_ASYNC, NULL));
+#elif defined(__APPLE__)
+ int len = strlen(text);
+ char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
+
+ if(len > (MAX_SPEECH_CHAR_LEN - 1)) {
+ len = MAX_SPEECH_CHAR_LEN - 1;
+ }
+
+ int count = 0;
+ for(int i = 0; i < len; i++) {
+ if(text[i] == '$') {
+ i++;
+ continue;
+ }
+ if(text[i] == '\n') {
+ Conversion_buffer[count] = '\n';
+ count++;
+ }
+
+ Conversion_buffer[count] = text[i];
+ count++;
+ }
+
+ Conversion_buffer[count] = '\0';
+
+ CFStringRef speech_string = CFStringCreateWithCString(NULL, Conversion_buffer, kCFStringEncodingASCII);
+ OSErr err = SpeakCFString(speech_channel, speech_string, NULL);
+ return !err;
#else
int len = strlen(text);
char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
@@ -150,6 +190,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Pause());
+#elif defined(__APPLE__)
+ return !PauseSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -162,6 +204,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Resume());
+#elif defined(__APPLE__)
+ return !ContinueSpeech(speech_channel);
#else
STUB_FUNCTION;
@@ -174,6 +218,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Speak( NULL, SPF_PURGEBEFORESPEAK, NULL ));
+#elif defined(__APPLE__)
+ return !StopSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -185,6 +231,9 @@
{
#ifdef _WIN32
return SUCCEEDED(Voice_device->SetVolume(volume));
+#elif defined(__APPLE__)
+ STUB_FUNCTION;
+ return true;
#else
STUB_FUNCTION;
@@ -228,6 +277,9 @@
count++;
}
return false;
+#elif defined(__APPLE__)
+ STUB_FUNCTION;
+ return true;
#else
STUB_FUNCTION;
@@ -246,6 +298,11 @@
if (FAILED(hr)) return false;
return (pStatus.dwRunningState == SPRS_IS_SPEAKING);
+#elif defined(__APPLE__)
+ SpeechStatusInfo status;
+ OSErr err = GetSpeechInfo(speech_channel, soStatus, &status);
+ if (err) return false;
+ return status.outputBusy;
#else
STUB_FUNCTION;
-
macspeech2.patch (5,747 bytes) 2012-04-13 15:54
Index: configure.ac
===================================================================
--- configure.ac (revision 8666)
+++ configure.ac (working copy)
@@ -436,7 +436,7 @@
dnl extra OSX frameworks
if test "$fs2_os_osx" = "yes" ; then
- FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation"
+ FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation -framework ApplicationServices"
fi
Index: projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
===================================================================
--- projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (revision 8666)
+++ projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (working copy)
@@ -4169,6 +4169,7 @@
USE_OPENAL,
NO_DIRECT3D,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = ../../libjpeg;
LIBRARY_STYLE = STATIC;
@@ -4213,6 +4214,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
@@ -4324,6 +4326,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GENERATE_PROFILING_CODE = NO;
@@ -4360,6 +4363,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
@@ -4535,6 +4539,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GENERATE_PROFILING_CODE = NO;
@@ -4590,6 +4595,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
@@ -4626,6 +4632,7 @@
USE_OPENAL,
NO_DIRECT3D,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = ../../libjpeg;
LIBRARY_STYLE = STATIC;
@@ -4741,6 +4748,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
@@ -4795,6 +4803,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
Index: code/sound/speech.cpp
===================================================================
--- code/sound/speech.cpp (revision 8666)
+++ code/sound/speech.cpp (working copy)
@@ -29,6 +29,9 @@
#include <sphelper.h>
ISpVoice *Voice_device;
+#elif defined(__APPLE__)
+#include <ApplicationServices/ApplicationServices.h>
+ SpeechChannel speech_channel;
#elif defined(SCP_UNIX)
#include <fcntl.h>
// #include <stdio.h>
@@ -56,6 +59,13 @@
(void **)&Voice_device);
Speech_init = SUCCEEDED(hr);
+#elif defined(__APPLE__)
+ OSErr err;
+ err = NewSpeechChannel(NULL, &speech_channel);
+ if (err) {
+ return false;
+ }
+ Speech_init = true;
#else
speech_dev = open("/dev/speech", O_WRONLY | O_DIRECT);
@@ -79,6 +89,8 @@
#ifdef _WIN32
Voice_device->Release();
+#elif defined(__APPLE__)
+ DisposeSpeechChannel(speech_channel);
#else
close(speech_dev);
// fclose(speech_dev);
@@ -113,6 +125,35 @@
speech_stop();
return SUCCEEDED(Voice_device->Speak(Conversion_buffer, SPF_ASYNC, NULL));
+#elif defined(__APPLE__)
+ int len = strlen(text);
+ char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
+
+ if(len > (MAX_SPEECH_CHAR_LEN - 1)) {
+ len = MAX_SPEECH_CHAR_LEN - 1;
+ }
+
+ int count = 0;
+ for(int i = 0; i < len; i++) {
+ if(text[i] == '$') {
+ i++;
+ continue;
+ }
+ if(text[i] == '\n') {
+ Conversion_buffer[count] = '\n';
+ count++;
+ }
+
+ Conversion_buffer[count] = text[i];
+ count++;
+ }
+
+ Conversion_buffer[count] = '\0';
+
+ CFStringRef speech_string = CFStringCreateWithCString(NULL, Conversion_buffer, kCFStringEncodingASCII);
+ OSErr err = SpeakCFString(speech_channel, speech_string, NULL);
+ CFRelease(speech_string);
+ return !err;
#else
int len = strlen(text);
char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
@@ -150,6 +191,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Pause());
+#elif defined(__APPLE__)
+ return !PauseSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -162,6 +205,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Resume());
+#elif defined(__APPLE__)
+ return !ContinueSpeech(speech_channel);
#else
STUB_FUNCTION;
@@ -174,6 +219,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Speak( NULL, SPF_PURGEBEFORESPEAK, NULL ));
+#elif defined(__APPLE__)
+ return !StopSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -185,6 +232,9 @@
{
#ifdef _WIN32
return SUCCEEDED(Voice_device->SetVolume(volume));
+#elif defined(__APPLE__)
+ STUB_FUNCTION;
+ return true;
#else
STUB_FUNCTION;
@@ -228,6 +278,9 @@
count++;
}
return false;
+#elif defined(__APPLE__)
+ STUB_FUNCTION;
+ return true;
#else
STUB_FUNCTION;
@@ -246,6 +299,11 @@
if (FAILED(hr)) return false;
return (pStatus.dwRunningState == SPRS_IS_SPEAKING);
+#elif defined(__APPLE__)
+ SpeechStatusInfo status;
+ OSErr err = GetSpeechInfo(speech_channel, soStatus, &status);
+ if (err) return false;
+ return status.outputBusy;
#else
STUB_FUNCTION;
-
macspeech3.patch (5,999 bytes) 2012-08-14 10:16
Index: projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
===================================================================
--- projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (revision 9107)
+++ projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (working copy)
@@ -4162,6 +4162,7 @@
USE_OPENAL,
NO_DIRECT3D,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = ../../libjpeg;
LIBRARY_STYLE = STATIC;
@@ -4204,6 +4205,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
@@ -4312,6 +4314,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GENERATE_PROFILING_CODE = NO;
@@ -4345,6 +4348,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
@@ -4519,6 +4523,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GENERATE_PROFILING_CODE = NO;
@@ -4571,6 +4576,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
@@ -4606,6 +4612,7 @@
USE_OPENAL,
NO_DIRECT3D,
APPLE_APP,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = ../../libjpeg;
LIBRARY_STYLE = STATIC;
@@ -4718,6 +4725,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
@@ -4771,6 +4779,7 @@
USE_OPENAL,
APPLE_APP,
INF_BUILD,
+ FS2_SPEECH,
);
HEADER_SEARCH_PATHS = (
../../code,
Index: configure.ac
===================================================================
--- configure.ac (revision 9107)
+++ configure.ac (working copy)
@@ -436,7 +436,7 @@
dnl extra OSX frameworks
if test "$fs2_os_osx" = "yes" ; then
- FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation"
+ FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation -framework ApplicationServices"
fi
Index: code/sound/speech.cpp
===================================================================
--- code/sound/speech.cpp (revision 9107)
+++ code/sound/speech.cpp (working copy)
@@ -29,6 +29,9 @@
#include <sphelper.h>
ISpVoice *Voice_device;
+#elif defined(__APPLE__)
+#include <ApplicationServices/ApplicationServices.h>
+ SpeechChannel speech_channel;
#elif defined(SCP_UNIX)
#include <fcntl.h>
// #include <stdio.h>
@@ -56,13 +59,18 @@
(void **)&Voice_device);
Speech_init = SUCCEEDED(hr);
+#elif defined(__APPLE__)
+ OSErr err;
+ err = NewSpeechChannel(NULL, &speech_channel);
+ if (err) {
+ return false;
+ }
+ Speech_init = true;
#else
speech_dev = open("/dev/speech", O_WRONLY | O_DIRECT);
-// speech_dev = fopen("/dev/speech", "w");
if (speech_dev == -1) {
-// if (speech_dev == NULL) {
mprintf(("Couldn't open '/dev/speech', turning text-to-speech off...\n"));
return false;
}
@@ -79,9 +87,10 @@
#ifdef _WIN32
Voice_device->Release();
+#elif defined(__APPLE__)
+ DisposeSpeechChannel(speech_channel);
#else
close(speech_dev);
-// fclose(speech_dev);
#endif
}
@@ -113,6 +122,35 @@
speech_stop();
return SUCCEEDED(Voice_device->Speak(Conversion_buffer, SPF_ASYNC, NULL));
+#elif defined(__APPLE__)
+ int len = strlen(text);
+ char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
+
+ if(len > (MAX_SPEECH_CHAR_LEN - 1)) {
+ len = MAX_SPEECH_CHAR_LEN - 1;
+ }
+
+ int count = 0;
+ for(int i = 0; i < len; i++) {
+ if(text[i] == '$') {
+ i++;
+ continue;
+ }
+ if(text[i] == '\n') {
+ Conversion_buffer[count] = '\n';
+ count++;
+ }
+
+ Conversion_buffer[count] = text[i];
+ count++;
+ }
+
+ Conversion_buffer[count] = '\0';
+
+ CFStringRef speech_string = CFStringCreateWithCString(NULL, Conversion_buffer, kCFStringEncodingASCII);
+ OSErr err = SpeakCFString(speech_channel, speech_string, NULL);
+ CFRelease(speech_string);
+ return !err;
#else
int len = strlen(text);
char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
@@ -150,6 +188,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Pause());
+#elif defined(__APPLE__)
+ return !PauseSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -162,6 +202,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Resume());
+#elif defined(__APPLE__)
+ return !ContinueSpeech(speech_channel);
#else
STUB_FUNCTION;
@@ -174,6 +216,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Speak( NULL, SPF_PURGEBEFORESPEAK, NULL ));
+#elif defined(__APPLE__)
+ return !StopSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -185,6 +229,10 @@
{
#ifdef _WIN32
return SUCCEEDED(Voice_device->SetVolume(volume));
+#elif defined(__APPLE__)
+ OSErr err = SetSpeechInfo(speech_channel, soVolume, &volume);
+ if (err) return false;
+ return true;
#else
STUB_FUNCTION;
@@ -228,9 +276,12 @@
count++;
}
return false;
+#elif defined(__APPLE__)
+ STUB_FUNCTION;
+ return true;
#else
STUB_FUNCTION;
-
+
return true;
#endif
}
@@ -246,6 +297,11 @@
if (FAILED(hr)) return false;
return (pStatus.dwRunningState != SPRS_DONE);
+#elif defined(__APPLE__)
+ SpeechStatusInfo status;
+ OSErr err = GetSpeechInfo(speech_channel, soStatus, &status);
+ if (err) return false;
+ return status.outputBusy;
#else
STUB_FUNCTION;
-
macspeech4.patch (4,887 bytes) 2014-06-30 18:20
Index: code/sound/speech.cpp
===================================================================
--- code/sound/speech.cpp (revision 10859)
+++ code/sound/speech.cpp (working copy)
@@ -29,6 +29,9 @@
#include <sphelper.h>
ISpVoice *Voice_device;
+#elif defined(__APPLE__)
+#include <ApplicationServices/ApplicationServices.h>
+ SpeechChannel speech_channel;
#elif defined(SCP_UNIX)
#include <fcntl.h>
// #include <stdio.h>
@@ -56,13 +59,18 @@
(void **)&Voice_device);
Speech_init = SUCCEEDED(hr);
+#elif defined(__APPLE__)
+ OSErr err;
+ err = NewSpeechChannel(NULL, &speech_channel);
+ if (err) {
+ return false;
+ }
+ Speech_init = true;
#else
speech_dev = open("/dev/speech", O_WRONLY | O_DIRECT);
-// speech_dev = fopen("/dev/speech", "w");
if (speech_dev == -1) {
-// if (speech_dev == NULL) {
mprintf(("Couldn't open '/dev/speech', turning text-to-speech off...\n"));
return false;
}
@@ -79,9 +87,10 @@
#ifdef _WIN32
Voice_device->Release();
+#elif defined(__APPLE__)
+ DisposeSpeechChannel(speech_channel);
#else
close(speech_dev);
-// fclose(speech_dev);
#endif
}
@@ -113,6 +122,35 @@
speech_stop();
return SUCCEEDED(Voice_device->Speak(Conversion_buffer, SPF_ASYNC, NULL));
+#elif defined(__APPLE__)
+ int len = strlen(text);
+ char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
+
+ if(len > (MAX_SPEECH_CHAR_LEN - 1)) {
+ len = MAX_SPEECH_CHAR_LEN - 1;
+ }
+
+ int count = 0;
+ for(int i = 0; i < len; i++) {
+ if(text[i] == '$') {
+ i++;
+ continue;
+ }
+ if(text[i] == '\n') {
+ Conversion_buffer[count] = '\n';
+ count++;
+ }
+
+ Conversion_buffer[count] = text[i];
+ count++;
+ }
+
+ Conversion_buffer[count] = '\0';
+
+ CFStringRef speech_string = CFStringCreateWithCString(NULL, Conversion_buffer, kCFStringEncodingASCII);
+ OSErr err = SpeakCFString(speech_channel, speech_string, NULL);
+ CFRelease(speech_string);
+ return !err;
#else
int len = strlen(text);
char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
@@ -150,6 +188,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Pause());
+#elif defined(__APPLE__)
+ return !PauseSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -162,6 +202,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Resume());
+#elif defined(__APPLE__)
+ return !ContinueSpeech(speech_channel);
#else
STUB_FUNCTION;
@@ -174,6 +216,8 @@
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Speak( NULL, SPF_PURGEBEFORESPEAK, NULL ));
+#elif defined(__APPLE__)
+ return !StopSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -185,6 +229,10 @@
{
#ifdef _WIN32
return SUCCEEDED(Voice_device->SetVolume(volume));
+#elif defined(__APPLE__)
+ OSErr err = SetSpeechInfo(speech_channel, soVolume, &volume);
+ if (err) return false;
+ return true;
#else
STUB_FUNCTION;
@@ -228,9 +276,12 @@
count++;
}
return false;
+#elif defined(__APPLE__)
+ STUB_FUNCTION;
+ return true;
#else
STUB_FUNCTION;
-
+
return true;
#endif
}
@@ -246,6 +297,11 @@
if (FAILED(hr)) return false;
return (pStatus.dwRunningState != SPRS_DONE);
+#elif defined(__APPLE__)
+ SpeechStatusInfo status;
+ OSErr err = GetSpeechInfo(speech_channel, soStatus, &status);
+ if (err) return false;
+ return status.outputBusy;
#else
STUB_FUNCTION;
Index: configure.ac
===================================================================
--- configure.ac (revision 10859)
+++ configure.ac (working copy)
@@ -395,6 +395,7 @@
FS2_CXXFLAGS="$FS2_CXXFLAGS -I/System/Library/Frameworks/OpenGL.framework/Headers"
FS2_LDFLAGS="$FS2_LDFLAGS -framework OpenGL"
AC_DEFINE([SCP_UNIX])
+ AC_DEFINE([FS2_SPEECH])
AC_DEFINE([NO_DIRECT3D])
## don't need the CFLAGS here if recent SDL is used
elif test "$fs2_os_solaris" = "yes" ; then
@@ -473,7 +474,7 @@
dnl extra OSX frameworks
if test "$fs2_os_osx" = "yes" ; then
- FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation"
+ FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation -framework ApplicationServices"
fi
Index: projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
===================================================================
--- projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (revision 10859)
+++ projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj (working copy)
@@ -4439,6 +4439,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -4486,6 +4487,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
-
macspeech5.patch (5,020 bytes) 2015-04-23 13:09
diff --git code/sound/speech.cpp code/sound/speech.cpp
index 14327a9..a152b57 100644
--- code/sound/speech.cpp
+++ code/sound/speech.cpp
@@ -29,6 +29,9 @@
#include <sphelper.h>
ISpVoice *Voice_device;
+#elif defined(__APPLE__)
+#include <ApplicationServices/ApplicationServices.h>
+ SpeechChannel speech_channel;
#elif defined(SCP_UNIX)
#include <fcntl.h>
// #include <stdio.h>
@@ -56,13 +59,18 @@ bool speech_init()
(void **)&Voice_device);
Speech_init = SUCCEEDED(hr);
+#elif defined(__APPLE__)
+ OSErr err;
+ err = NewSpeechChannel(NULL, &speech_channel);
+ if (err) {
+ return false;
+ }
+ Speech_init = true;
#else
speech_dev = open("/dev/speech", O_WRONLY | O_DIRECT);
-// speech_dev = fopen("/dev/speech", "w");
if (speech_dev == -1) {
-// if (speech_dev == NULL) {
mprintf(("Couldn't open '/dev/speech', turning text-to-speech off...\n"));
return false;
}
@@ -79,9 +87,10 @@ void speech_deinit()
#ifdef _WIN32
Voice_device->Release();
+#elif defined(__APPLE__)
+ DisposeSpeechChannel(speech_channel);
#else
close(speech_dev);
-// fclose(speech_dev);
#endif
}
@@ -113,6 +122,35 @@ bool speech_play(const char *text)
speech_stop();
return SUCCEEDED(Voice_device->Speak(Conversion_buffer, SPF_ASYNC, NULL));
+#elif defined(__APPLE__)
+ int len = strlen(text);
+ char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
+
+ if(len > (MAX_SPEECH_CHAR_LEN - 1)) {
+ len = MAX_SPEECH_CHAR_LEN - 1;
+ }
+
+ int count = 0;
+ for(int i = 0; i < len; i++) {
+ if(text[i] == '$') {
+ i++;
+ continue;
+ }
+ if(text[i] == '\n') {
+ Conversion_buffer[count] = '\n';
+ count++;
+ }
+
+ Conversion_buffer[count] = text[i];
+ count++;
+ }
+
+ Conversion_buffer[count] = '\0';
+
+ CFStringRef speech_string = CFStringCreateWithCString(NULL, Conversion_buffer, kCFStringEncodingASCII);
+ OSErr err = SpeakCFString(speech_channel, speech_string, NULL);
+ CFRelease(speech_string);
+ return !err;
#else
int len = strlen(text);
char Conversion_buffer[MAX_SPEECH_CHAR_LEN];
@@ -150,6 +188,8 @@ bool speech_pause()
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Pause());
+#elif defined(__APPLE__)
+ return !PauseSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -162,6 +202,8 @@ bool speech_resume()
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Resume());
+#elif defined(__APPLE__)
+ return !ContinueSpeech(speech_channel);
#else
STUB_FUNCTION;
@@ -174,6 +216,8 @@ bool speech_stop()
if(Speech_init == false) return true;
#ifdef _WIN32
return SUCCEEDED(Voice_device->Speak( NULL, SPF_PURGEBEFORESPEAK, NULL ));
+#elif defined(__APPLE__)
+ return !StopSpeechAt(speech_channel, kEndOfWord);
#else
STUB_FUNCTION;
@@ -185,6 +229,10 @@ bool speech_set_volume(unsigned short volume)
{
#ifdef _WIN32
return SUCCEEDED(Voice_device->SetVolume(volume));
+#elif defined(__APPLE__)
+ OSErr err = SetSpeechInfo(speech_channel, soVolume, &volume);
+ if (err) return false;
+ return true;
#else
STUB_FUNCTION;
@@ -228,6 +276,9 @@ bool speech_set_voice(int voice)
count++;
}
return false;
+#elif defined(__APPLE__)
+ STUB_FUNCTION;
+ return true;
#else
STUB_FUNCTION;
@@ -246,6 +297,11 @@ bool speech_is_speaking()
if (FAILED(hr)) return false;
return (pStatus.dwRunningState != SPRS_DONE);
+#elif defined(__APPLE__)
+ SpeechStatusInfo status;
+ OSErr err = GetSpeechInfo(speech_channel, soStatus, &status);
+ if (err) return false;
+ return status.outputBusy;
#else
STUB_FUNCTION;
diff --git configure.ac configure.ac
index 88127a9..0dc4429 100644
--- configure.ac
+++ configure.ac
@@ -396,6 +396,7 @@ elif test "$fs2_os_osx" = "yes" ; then
FS2_CXXFLAGS="$FS2_CXXFLAGS -I/System/Library/Frameworks/OpenGL.framework/Headers"
FS2_LDFLAGS="$FS2_LDFLAGS -framework OpenGL"
AC_DEFINE([SCP_UNIX])
+ AC_DEFINE([FS2_SPEECH])
AC_DEFINE([NO_DIRECT3D])
## don't need the CFLAGS here if recent SDL is used
elif test "$fs2_os_solaris" = "yes" ; then
@@ -474,7 +475,7 @@ fi
dnl extra OSX frameworks
if test "$fs2_os_osx" = "yes" ; then
- FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation"
+ FS2_LDFLAGS="$FS2_LDFLAGS -framework AppKit -framework Foundation -framework ApplicationServices"
fi
diff --git projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
index 06a4269..fc79fd3 100755
--- projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
+++ projects/Xcode4/FS2_Open.xcodeproj/project.pbxproj
@@ -4447,6 +4447,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -4494,6 +4495,7 @@
SCP_UNIX,
USE_OPENAL,
APPLE_APP,
+ FS2_SPEECH,
);
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
|
---|