X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsound.c;h=9bdedb932d852287e885bd01cefea4db63f76a09;hb=2cbece6401b2279497293e6dc54cda607f49db2f;hp=4a8786f885d5cc15b5c600baa02c14f47db46b64;hpb=afa9772e3fcbb4e80e3e4cfd1a40b4fccc6d08b8;p=chise%2Fxemacs-chise.git- diff --git a/src/sound.c b/src/sound.c index 4a8786f..9bdedb9 100644 --- a/src/sound.c +++ b/src/sound.c @@ -43,6 +43,7 @@ Boston, MA 02111-1307, USA. */ #ifdef HAVE_NATIVE_SOUND # include +# include "nativesound.h" #endif #ifdef HAVE_ESD_SOUND @@ -58,11 +59,6 @@ Lisp_Object Vsynchronous_sounds; Lisp_Object Vnative_sound_only_on_console; Lisp_Object Q_volume, Q_pitch, Q_duration, Q_sound; -/* These are defined in the appropriate file (sunplay.c, sgiplay.c, - or hpplay.c). */ - -extern void play_sound_file (char *name, int volume); -extern void play_sound_data (unsigned char *data, int length, int volume); #ifdef HAVE_NAS_SOUND extern int nas_play_sound_file (char *name, int volume); @@ -126,7 +122,9 @@ Windows the sound file must be in WAV format. { char *fileext; - GET_C_STRING_FILENAME_DATA_ALLOCA (file, fileext); + TO_EXTERNAL_FORMAT (LISP_STRING, file, + C_STRING_ALLOCA, fileext, + Qfile_name); /* #### NAS code should allow specification of a device. */ if (nas_play_sound_file (fileext, vol)) return Qnil; @@ -137,9 +135,17 @@ Windows the sound file must be in WAV format. if (DEVICE_CONNECTED_TO_ESD_P (d)) { char *fileext; + int result; + + TO_EXTERNAL_FORMAT (LISP_STRING, file, + C_STRING_ALLOCA, fileext, + Qfile_name); - GET_C_STRING_FILENAME_DATA_ALLOCA (file, fileext); - if (esd_play_sound_file (fileext, vol)) + /* #### ESD uses alarm(). But why should we also stop SIGIO? */ + stop_interrupts (); + result = esd_play_sound_file (fileext, vol); + start_interrupts (); + if (result) return Qnil; } #endif /* HAVE_ESD_SOUND */ @@ -147,9 +153,11 @@ Windows the sound file must be in WAV format. #ifdef HAVE_NATIVE_SOUND if (NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d)) { - CONST char *fileext; + const char *fileext; - GET_C_STRING_FILENAME_DATA_ALLOCA (file, fileext); + TO_EXTERNAL_FORMAT (LISP_STRING, file, + C_STRING_ALLOCA, fileext, + Qfile_name); /* The sound code doesn't like getting SIGIO interrupts. Unix sucks! */ stop_interrupts (); @@ -271,7 +279,7 @@ See the variable `sound-alist'. /* variable `sound' is anything that can be a cdr in sound-alist */ Lisp_Object new_volume, pitch, duration, data; int loop_count = 0; - int vol, pit, dur; + int vol, pit, dur, succes; struct device *d = decode_device (device); /* NOTE! You'd better not signal an error in here. */ @@ -311,10 +319,12 @@ See the variable `sound-alist'. #ifdef HAVE_NAS_SOUND if (DEVICE_CONNECTED_TO_NAS_P (d) && STRINGP (sound)) { - CONST Extbyte *soundext; + const Extbyte *soundext; Extcount soundextlen; - GET_STRING_BINARY_DATA_ALLOCA (sound, soundext, soundextlen); + TO_EXTERNAL_FORMAT (LISP_STRING, sound, + ALLOCA, (soundext, soundextlen), + Qbinary); if (nas_play_sound_data ((unsigned char*)soundext, soundextlen, vol)) return Qnil; } @@ -326,9 +336,16 @@ See the variable `sound-alist'. Extbyte *soundext; Extcount soundextlen; - GET_STRING_BINARY_DATA_ALLOCA (sound, soundext, soundextlen); - if (esd_play_sound_data (soundext, soundextlen, vol)) - return Qnil; + TO_EXTERNAL_FORMAT (LISP_STRING, sound, ALLOCA, (soundext, soundextlen), + Qbinary); + + /* #### ESD uses alarm(). But why should we also stop SIGIO? */ + stop_interrupts (); + succes = esd_play_sound_data (soundext, soundextlen, vol); + start_interrupts (); + QUIT; + if(succes) + return Qnil; } #endif /* HAVE_ESD_SOUND */ @@ -336,16 +353,19 @@ See the variable `sound-alist'. if ((NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d)) && STRINGP (sound)) { - CONST Extbyte *soundext; + const Extbyte *soundext; Extcount soundextlen; - GET_STRING_BINARY_DATA_ALLOCA (sound, soundext, soundextlen); + TO_EXTERNAL_FORMAT (LISP_STRING, sound, + ALLOCA, (soundext, soundextlen), + Qbinary); /* The sound code doesn't like getting SIGIO interrupts. Unix sucks! */ stop_interrupts (); - play_sound_data ((unsigned char*)soundext, soundextlen, vol); + succes = play_sound_data ((unsigned char*)soundext, soundextlen, vol); start_interrupts (); QUIT; - return Qnil; + if (succes) + return Qnil; } #endif /* HAVE_NATIVE_SOUND */ @@ -379,8 +399,8 @@ device). */ (arg, sound, device)) { - static time_t last_bell_time = (time_t) 0; - static struct device *last_bell_device = (struct device*) 0; + static time_t last_bell_time; + static struct device *last_bell_device; time_t now; struct device *d = decode_device (device); @@ -393,7 +413,7 @@ device). if (d == last_bell_device && now-last_bell_time < bell_inhibit_time) return Qnil; - else if (visible_bell && DEVMETH (d, flash, (d))) + else if (!NILP (Vvisible_bell) && DEVMETH (d, flash, (d))) ; else Fplay_sound (sound, Qnil, device); @@ -436,13 +456,11 @@ Return t if connected to NAS server for sounds on DEVICE. static void init_nas_sound (struct device *d) { - char *error; - #ifdef HAVE_X_WINDOWS if (DEVICE_X_P (d)) { - error = nas_init_play (DEVICE_X_DISPLAY (d)); - DEVICE_CONNECTED_TO_NAS_P (d) = !error; + char *err_message = nas_init_play (DEVICE_X_DISPLAY (d)); + DEVICE_CONNECTED_TO_NAS_P (d) = !err_message; /* Print out the message? */ } #endif /* HAVE_X_WINDOWS */ @@ -562,6 +580,9 @@ vars_of_sound (void) #ifdef HAVE_NAS_SOUND Fprovide (intern ("nas-sound")); #endif +#ifdef HAVE_ESD_SOUND + Fprovide (intern ("esd-sound")); +#endif DEFVAR_INT ("bell-volume", &bell_volume /* *How loud to be, from 0 to 100.