* bug#3351: 23.0.93; OSX sound support @ 2009-05-22 13:31 Alex Schröder 2013-03-15 10:25 ` Leo Liu 0 siblings, 1 reply; 5+ messages in thread From: Alex Schröder @ 2009-05-22 13:31 UTC (permalink / raw) To: emacs-pretest-bug In GNU Emacs 23.0.93.2 (i386-apple-darwin8.11.1, NS apple-appkit-824.48) of 2009-05-22 on Pyrobombus.local Windowing system distributor `Apple', version 10.3.824 configured using `configure '--with-ns'' I'm using Mac OS 10.4.11 and when I try to (play-sound '(sound :file "/some/file")) I get the error "This Emacs binary lacks sound support". I think no Emacs is complete without sound support. ;) ^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#3351: 23.0.93; OSX sound support 2009-05-22 13:31 bug#3351: 23.0.93; OSX sound support Alex Schröder @ 2013-03-15 10:25 ` Leo Liu 2013-03-17 8:36 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 5+ messages in thread From: Leo Liu @ 2013-03-15 10:25 UTC (permalink / raw) To: Alex Schröder; +Cc: 3351 On 2009-05-22 21:31 +0800, Alex Schröder wrote: > In GNU Emacs 23.0.93.2 (i386-apple-darwin8.11.1, NS apple-appkit-824.48) > of 2009-05-22 on Pyrobombus.local > Windowing system distributor `Apple', version 10.3.824 > configured using `configure '--with-ns'' > > I'm using Mac OS 10.4.11 and when I try to (play-sound '(sound :file > "/some/file")) I get the error "This Emacs binary lacks sound > support". > > I think no Emacs is complete without sound support. ;) I am using this small function to give me sound support on OSX: https://raw.github.com/leoliu/play-sound-osx/master/play-sound.el Two conscious abuses (can be fixed): - misuse (signal 'wrong-type-argument (list sound)); it requires the first item of DATA to be a predicate but I decided not to add another function. - async; should probably use call-process to stay close to the C version. BTW, I only remember once in the past years needing the feature. Leo ^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#3351: 23.0.93; OSX sound support 2013-03-15 10:25 ` Leo Liu @ 2013-03-17 8:36 ` YAMAMOTO Mitsuharu 2013-03-18 2:47 ` YAMAMOTO Mitsuharu 0 siblings, 1 reply; 5+ messages in thread From: YAMAMOTO Mitsuharu @ 2013-03-17 8:36 UTC (permalink / raw) To: Leo Liu; +Cc: Alex Schröder, 3351 >>>>> On Fri, 15 Mar 2013 18:25:25 +0800, Leo Liu <sdl.web@gmail.com> said: > On 2009-05-22 21:31 +0800, Alex Schröder wrote: >> In GNU Emacs 23.0.93.2 (i386-apple-darwin8.11.1, NS apple-appkit-824.48) >> of 2009-05-22 on Pyrobombus.local >> Windowing system distributor `Apple', version 10.3.824 >> configured using `configure '--with-ns'' >> >> I'm using Mac OS 10.4.11 and when I try to (play-sound '(sound :file >> "/some/file")) I get the error "This Emacs binary lacks sound >> support". >> >> I think no Emacs is complete without sound support. ;) > I am using this small function to give me sound support on OSX: > https://raw.github.com/leoliu/play-sound-osx/master/play-sound.el > Two conscious abuses (can be fixed): > - misuse (signal 'wrong-type-argument (list sound)); it requires the > first item of DATA to be a predicate but I decided not to add another > function. > - async; should probably use call-process to stay close to the C > version. > BTW, I only remember once in the past years needing the feature. Below is a quick hack for the Mac port (*) to have sound support. Perhaps one may use this as a hint. *: http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00251.html YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp === modified file 'configure.ac' *** configure.ac 2013-03-11 03:49:04 +0000 --- configure.ac 2013-03-17 08:17:26 +0000 *************** *** 2752,2757 **** --- 2752,2758 ---- ### Use Mac OS X GUI. if test "${HAVE_MACGUI}" = "yes"; then AC_DEFINE(HAVE_MACGUI, 1, [Define to 1 if you are using GUI on Mac OS X.]) + AC_DEFINE(HAVE_SOUND, 1, [Define to 1 if you have sound support.]) AC_CHECK_HEADERS(AvailabilityMacros.h) MAC_CFLAGS="-fconstant-cfstrings" ## Specify the install directory === modified file 'src/macappkit.h' *** src/macappkit.h 2013-02-09 07:26:28 +0000 --- src/macappkit.h 2013-03-17 08:17:26 +0000 *************** *** 61,66 **** --- 61,67 ---- compiled on Mac OS X 10.5 fails in startup at -[EmacsController methodSignatureForSelector:] when executed on Mac OS X 10.6. */ @protocol NSApplicationDelegate @end + @protocol NSSoundDelegate @end @protocol NSWindowDelegate @end @protocol NSToolbarDelegate @end @protocol NSMenuDelegate @end *************** *** 194,199 **** --- 195,203 ---- /* Set of windows whose flush is deferred. */ NSMutableSet *deferredFlushWindows; + + /* Set of sounds currently being played. */ + NSMutableSet *soundsBeingPlayed; } - (int)getAndClearMenuItemSelection; - (void)storeInputEvent:(id)sender; *************** *** 691,696 **** --- 695,704 ---- #endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1050 */ + @interface EmacsController (Sound) <NSSoundDelegate> + - (void)addAndPlaySound:(NSSound *)sound; + @end + /* Some methods that are not declared in older versions. Should be used with some runtime check such as `respondsToSelector:'. */ *************** *** 868,870 **** --- 876,885 ---- @end #endif #endif + + #if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 + @interface NSSound (AvailableOn1050AndLater) + - (void)setVolume:(float)volume; + - (void)setPlaybackDeviceIdentifier:(NSString *)deviceUID; + @end + #endif === modified file 'src/macappkit.m' *** src/macappkit.m 2013-03-05 06:19:19 +0000 --- src/macappkit.m 2013-03-17 08:20:12 +0000 *************** *** 12207,12209 **** --- 12207,12270 ---- return result; } + + \f + /*********************************************************************** + Sound + ***********************************************************************/ + @implementation EmacsController (Sound) + + - (void)addAndPlaySound:(NSSound *)sound + { + if (soundsBeingPlayed == nil) + soundsBeingPlayed = [[NSMutableSet alloc] initWithCapacity:0]; + [soundsBeingPlayed addObject:sound]; + + [sound setDelegate:self]; + [sound play]; + } + + - (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)finishedPlaying + { + [soundsBeingPlayed removeObject:sound]; + } + + @end + + CFTypeRef + mac_sound_create (Lisp_Object file, Lisp_Object data) + { + NSSound *sound; + + if (STRINGP (file)) + { + file = ENCODE_FILE (file); + sound = [[NSSound alloc] + initWithContentsOfFile:[NSString stringWithUTF8LispString:file] + byReference:YES]; + } + else if (STRINGP (data)) + sound = [[NSSound alloc] + initWithData:[NSData dataWithBytes:(SDATA (data)) + length:(SBYTES (data))]]; + else + sound = nil; + + return CF_BRIDGING_RETAIN (MRC_AUTORELEASE (sound)); + } + + void + mac_sound_play (CFTypeRef mac_sound, Lisp_Object volume, Lisp_Object device) + { + NSSound *sound = (__bridge NSSound *) mac_sound; + + if ((INTEGERP (volume) || FLOATP (volume)) + && [sound respondsToSelector:@selector(setVolume:)]) + [sound setVolume:(INTEGERP (volume) ? XFASTINT (volume) * 0.01 + : XFLOAT_DATA (volume))]; + if (STRINGP (device) + && [sound respondsToSelector:@selector(setPlaybackDeviceIdentifier:)]) + [sound setPlaybackDeviceIdentifier:[NSString stringWithLispString:device]]; + + [emacsController addAndPlaySound:sound]; + } === modified file 'src/sound.c' *** src/sound.c 2013-01-01 09:11:05 +0000 --- src/sound.c 2013-03-17 08:17:27 +0000 *************** *** 53,59 **** /* BEGIN: Non Windows Includes */ ! #ifndef WINDOWSNT #include <sys/ioctl.h> --- 53,59 ---- /* BEGIN: Non Windows Includes */ ! #if !defined WINDOWSNT && !defined HAVE_MACGUI #include <sys/ioctl.h> *************** *** 79,85 **** /* END: Non Windows Includes */ ! #else /* WINDOWSNT */ /* BEGIN: Windows Specific Includes */ #include <stdio.h> --- 79,85 ---- /* END: Non Windows Includes */ ! #elif defined WINDOWSNT /* BEGIN: Windows Specific Includes */ #include <stdio.h> *************** *** 88,94 **** #include <mmsystem.h> /* END: Windows Specific Includes */ ! #endif /* WINDOWSNT */ /* BEGIN: Common Definitions */ --- 88,97 ---- #include <mmsystem.h> /* END: Windows Specific Includes */ ! #else /* HAVE_MACGUI */ ! #include "blockinput.h" ! #include "macterm.h" ! #endif /* HAVE_MACGUI */ /* BEGIN: Common Definitions */ *************** *** 112,118 **** /* END: Common Definitions */ /* BEGIN: Non Windows Definitions */ ! #ifndef WINDOWSNT /* Structure forward declarations. */ --- 115,121 ---- /* END: Common Definitions */ /* BEGIN: Non Windows Definitions */ ! #if !defined WINDOWSNT && !defined HAVE_MACGUI /* Structure forward declarations. */ *************** *** 291,303 **** #endif /* END: Non Windows Definitions */ ! #else /* WINDOWSNT */ /* BEGIN: Windows Specific Definitions */ static int do_play_sound (const char *, unsigned long); /* END: Windows Specific Definitions */ ! #endif /* WINDOWSNT */ \f /*********************************************************************** --- 294,309 ---- #endif /* END: Non Windows Definitions */ ! #elif defined WINDOWSNT /* BEGIN: Windows Specific Definitions */ static int do_play_sound (const char *, unsigned long); /* END: Windows Specific Definitions */ ! #else /* HAVE_MACGUI */ ! extern CFTypeRef mac_sound_create (Lisp_Object, Lisp_Object); ! extern void mac_sound_play (CFTypeRef, Lisp_Object, Lisp_Object); ! #endif /* HAVE_MACGUI */ \f /*********************************************************************** *************** *** 428,434 **** /* END: Common functions */ /* BEGIN: Non Windows functions */ ! #ifndef WINDOWSNT /* Find out the type of the sound file whose file descriptor is FD. S is the sound file structure to fill in. */ --- 434,440 ---- /* END: Common functions */ /* BEGIN: Non Windows functions */ ! #if !defined WINDOWSNT && !defined HAVE_MACGUI /* Find out the type of the sound file whose file descriptor is FD. S is the sound file structure to fill in. */ *************** *** 1247,1253 **** /* END: Non Windows functions */ ! #else /* WINDOWSNT */ /* BEGIN: Windows specific functions */ --- 1253,1259 ---- /* END: Non Windows functions */ ! #elif defined WINDOWSNT /* BEGIN: Windows specific functions */ *************** *** 1356,1361 **** --- 1362,1370 ---- Lisp_Object file; struct gcpro gcpro1, gcpro2; Lisp_Object args[2]; + #ifdef HAVE_MACGUI + CFTypeRef mac_sound; + #endif #else /* WINDOWSNT */ int len = 0; Lisp_Object lo_file = {0}; *************** *** 1369,1375 **** if (!parse_sound (sound, attrs)) error ("Invalid sound specification"); ! #ifndef WINDOWSNT file = Qnil; GCPRO2 (sound, file); current_sound_device = xzalloc (sizeof *current_sound_device); --- 1378,1384 ---- if (!parse_sound (sound, attrs)) error ("Invalid sound specification"); ! #if !defined WINDOWSNT && !defined HAVE_MACGUI file = Qnil; GCPRO2 (sound, file); current_sound_device = xzalloc (sizeof *current_sound_device); *************** *** 1435,1441 **** /* Clean up. */ UNGCPRO; ! #else /* WINDOWSNT */ lo_file = Fexpand_file_name (attrs[SOUND_FILE], Qnil); len = XSTRING (lo_file)->size; --- 1444,1450 ---- /* Clean up. */ UNGCPRO; ! #elif defined WINDOWSNT lo_file = Fexpand_file_name (attrs[SOUND_FILE], Qnil); len = XSTRING (lo_file)->size; *************** *** 1464,1470 **** } i_result = do_play_sound (psz_file, ui_volume); ! #endif /* WINDOWSNT */ unbind_to (count, Qnil); return Qnil; --- 1473,1513 ---- } i_result = do_play_sound (psz_file, ui_volume); ! #else /* HAVE_MACGUI */ ! if (inhibit_window_system || noninteractive) ! error ("Sound support on Mac requires a window system"); ! ! file = Qnil; ! GCPRO2 (sound, file); ! ! if (STRINGP (attrs[SOUND_FILE])) ! { ! /* Open the sound file. */ ! int fd = openp (Fcons (Vdata_directory, Qnil), ! attrs[SOUND_FILE], Qnil, &file, Qnil); ! ! if (fd < 0) ! error ("Could not open sound file: %s", strerror (errno)); ! emacs_close (fd); ! } ! ! block_input (); ! mac_sound = mac_sound_create (file, attrs[SOUND_DATA]); ! unblock_input (); ! if (mac_sound == NULL) ! error ("Unknown sound format"); ! ! args[0] = Qplay_sound_functions; ! args[1] = sound; ! Frun_hook_with_args (2, args); ! ! block_input (); ! mac_sound_play (mac_sound, attrs[SOUND_VOLUME], attrs[SOUND_DEVICE]); ! CFRelease (mac_sound); ! unblock_input (); ! ! UNGCPRO; ! #endif /* HAVE_MACGUI */ unbind_to (count, Qnil); return Qnil; ^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#3351: 23.0.93; OSX sound support 2013-03-17 8:36 ` YAMAMOTO Mitsuharu @ 2013-03-18 2:47 ` YAMAMOTO Mitsuharu 2013-03-18 6:47 ` Jan Djärv 0 siblings, 1 reply; 5+ messages in thread From: YAMAMOTO Mitsuharu @ 2013-03-18 2:47 UTC (permalink / raw) To: Leo Liu; +Cc: Alex Schröder, 3351 >>>>> On Sun, 17 Mar 2013 17:36:31 +0900, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> said: >> Two conscious abuses (can be fixed): >> - misuse (signal 'wrong-type-argument (list sound)); it requires the >> first item of DATA to be a predicate but I decided not to add another >> function. >> - async; should probably use call-process to stay close to the C >> version. >> BTW, I only remember once in the past years needing the feature. > Below is a quick hack for the Mac port (*) to have sound support. > Perhaps one may use this as a hint. > *: http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00251.html Oops, I didn't realize that play-sound-internal was supposed to be synchronous and unquittable. Below is an updated one. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp === modified file 'configure.ac' *** configure.ac 2013-03-11 03:49:04 +0000 --- configure.ac 2013-03-18 02:36:18 +0000 *************** *** 2752,2757 **** --- 2752,2758 ---- ### Use Mac OS X GUI. if test "${HAVE_MACGUI}" = "yes"; then AC_DEFINE(HAVE_MACGUI, 1, [Define to 1 if you are using GUI on Mac OS X.]) + AC_DEFINE(HAVE_SOUND, 1, [Define to 1 if you have sound support.]) AC_CHECK_HEADERS(AvailabilityMacros.h) MAC_CFLAGS="-fconstant-cfstrings" ## Specify the install directory === modified file 'src/macappkit.h' *** src/macappkit.h 2013-02-09 07:26:28 +0000 --- src/macappkit.h 2013-03-18 02:36:18 +0000 *************** *** 61,66 **** --- 61,67 ---- compiled on Mac OS X 10.5 fails in startup at -[EmacsController methodSignatureForSelector:] when executed on Mac OS X 10.6. */ @protocol NSApplicationDelegate @end + @protocol NSSoundDelegate @end @protocol NSWindowDelegate @end @protocol NSToolbarDelegate @end @protocol NSMenuDelegate @end *************** *** 691,696 **** --- 692,700 ---- #endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1050 */ + @interface EmacsController (Sound) <NSSoundDelegate> + @end + /* Some methods that are not declared in older versions. Should be used with some runtime check such as `respondsToSelector:'. */ *************** *** 868,870 **** --- 872,881 ---- @end #endif #endif + + #if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 + @interface NSSound (AvailableOn1050AndLater) + - (void)setVolume:(float)volume; + - (void)setPlaybackDeviceIdentifier:(NSString *)deviceUID; + @end + #endif === modified file 'src/macappkit.m' *** src/macappkit.m 2013-03-05 06:19:19 +0000 --- src/macappkit.m 2013-03-18 02:36:41 +0000 *************** *** 12207,12209 **** --- 12207,12263 ---- return result; } + + \f + /*********************************************************************** + Sound + ***********************************************************************/ + @implementation EmacsController (Sound) + + - (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)finishedPlaying + { + [NSApp postDummyEvent]; + } + + @end + + CFTypeRef + mac_sound_create (Lisp_Object file, Lisp_Object data) + { + NSSound *sound; + + if (STRINGP (file)) + { + file = ENCODE_FILE (file); + sound = [[NSSound alloc] + initWithContentsOfFile:[NSString stringWithUTF8LispString:file] + byReference:YES]; + } + else if (STRINGP (data)) + sound = [[NSSound alloc] + initWithData:[NSData dataWithBytes:(SDATA (data)) + length:(SBYTES (data))]]; + else + sound = nil; + + return CF_BRIDGING_RETAIN (MRC_AUTORELEASE (sound)); + } + + void + mac_sound_play (CFTypeRef mac_sound, Lisp_Object volume, Lisp_Object device) + { + NSSound *sound = (__bridge NSSound *) mac_sound; + + if ((INTEGERP (volume) || FLOATP (volume)) + && [sound respondsToSelector:@selector(setVolume:)]) + [sound setVolume:(INTEGERP (volume) ? XFASTINT (volume) * 0.01 + : XFLOAT_DATA (volume))]; + if (STRINGP (device) + && [sound respondsToSelector:@selector(setPlaybackDeviceIdentifier:)]) + [sound setPlaybackDeviceIdentifier:[NSString stringWithLispString:device]]; + + [sound setDelegate:emacsController]; + [sound play]; + while ([sound isPlaying]) + mac_run_loop_run_once (kEventDurationForever); + } === modified file 'src/macterm.h' *** src/macterm.h 2013-02-09 07:26:28 +0000 --- src/macterm.h 2013-03-18 02:36:18 +0000 *************** *** 652,657 **** --- 652,660 ---- extern void mac_invalidate_frame_cursor_rects (struct frame *f); extern int mac_webkit_supports_svg_p (void); + extern CFTypeRef mac_sound_create (Lisp_Object, Lisp_Object); + extern void mac_sound_play (CFTypeRef, Lisp_Object, Lisp_Object); + #define CG_SET_FILL_COLOR_WITH_GC_FOREGROUND(context, gc) \ CGContextSetFillColorWithColor (context, (gc)->cg_fore_color) #define CG_SET_FILL_COLOR_WITH_GC_BACKGROUND(context, gc) \ === modified file 'src/sound.c' *** src/sound.c 2013-01-01 09:11:05 +0000 --- src/sound.c 2013-03-18 02:36:18 +0000 *************** *** 53,59 **** /* BEGIN: Non Windows Includes */ ! #ifndef WINDOWSNT #include <sys/ioctl.h> --- 53,59 ---- /* BEGIN: Non Windows Includes */ ! #if !defined WINDOWSNT && !defined HAVE_MACGUI #include <sys/ioctl.h> *************** *** 79,85 **** /* END: Non Windows Includes */ ! #else /* WINDOWSNT */ /* BEGIN: Windows Specific Includes */ #include <stdio.h> --- 79,85 ---- /* END: Non Windows Includes */ ! #elif defined WINDOWSNT /* BEGIN: Windows Specific Includes */ #include <stdio.h> *************** *** 88,94 **** #include <mmsystem.h> /* END: Windows Specific Includes */ ! #endif /* WINDOWSNT */ /* BEGIN: Common Definitions */ --- 88,97 ---- #include <mmsystem.h> /* END: Windows Specific Includes */ ! #else /* HAVE_MACGUI */ ! #include "blockinput.h" ! #include "macterm.h" ! #endif /* HAVE_MACGUI */ /* BEGIN: Common Definitions */ *************** *** 112,118 **** /* END: Common Definitions */ /* BEGIN: Non Windows Definitions */ ! #ifndef WINDOWSNT /* Structure forward declarations. */ --- 115,121 ---- /* END: Common Definitions */ /* BEGIN: Non Windows Definitions */ ! #if !defined WINDOWSNT && !defined HAVE_MACGUI /* Structure forward declarations. */ *************** *** 291,297 **** #endif /* END: Non Windows Definitions */ ! #else /* WINDOWSNT */ /* BEGIN: Windows Specific Definitions */ static int do_play_sound (const char *, unsigned long); --- 294,300 ---- #endif /* END: Non Windows Definitions */ ! #elif defined WINDOWSNT /* BEGIN: Windows Specific Definitions */ static int do_play_sound (const char *, unsigned long); *************** *** 428,434 **** /* END: Common functions */ /* BEGIN: Non Windows functions */ ! #ifndef WINDOWSNT /* Find out the type of the sound file whose file descriptor is FD. S is the sound file structure to fill in. */ --- 431,437 ---- /* END: Common functions */ /* BEGIN: Non Windows functions */ ! #if !defined WINDOWSNT && !defined HAVE_MACGUI /* Find out the type of the sound file whose file descriptor is FD. S is the sound file structure to fill in. */ *************** *** 1247,1253 **** /* END: Non Windows functions */ ! #else /* WINDOWSNT */ /* BEGIN: Windows specific functions */ --- 1250,1256 ---- /* END: Non Windows functions */ ! #elif defined WINDOWSNT /* BEGIN: Windows specific functions */ *************** *** 1356,1361 **** --- 1359,1367 ---- Lisp_Object file; struct gcpro gcpro1, gcpro2; Lisp_Object args[2]; + #ifdef HAVE_MACGUI + CFTypeRef mac_sound; + #endif #else /* WINDOWSNT */ int len = 0; Lisp_Object lo_file = {0}; *************** *** 1369,1375 **** if (!parse_sound (sound, attrs)) error ("Invalid sound specification"); ! #ifndef WINDOWSNT file = Qnil; GCPRO2 (sound, file); current_sound_device = xzalloc (sizeof *current_sound_device); --- 1375,1381 ---- if (!parse_sound (sound, attrs)) error ("Invalid sound specification"); ! #if !defined WINDOWSNT && !defined HAVE_MACGUI file = Qnil; GCPRO2 (sound, file); current_sound_device = xzalloc (sizeof *current_sound_device); *************** *** 1435,1441 **** /* Clean up. */ UNGCPRO; ! #else /* WINDOWSNT */ lo_file = Fexpand_file_name (attrs[SOUND_FILE], Qnil); len = XSTRING (lo_file)->size; --- 1441,1447 ---- /* Clean up. */ UNGCPRO; ! #elif defined WINDOWSNT lo_file = Fexpand_file_name (attrs[SOUND_FILE], Qnil); len = XSTRING (lo_file)->size; *************** *** 1464,1470 **** } i_result = do_play_sound (psz_file, ui_volume); ! #endif /* WINDOWSNT */ unbind_to (count, Qnil); return Qnil; --- 1470,1515 ---- } i_result = do_play_sound (psz_file, ui_volume); ! #else /* HAVE_MACGUI */ ! if (inhibit_window_system || noninteractive) ! error ("Sound support on Mac requires a window system"); ! ! file = Qnil; ! GCPRO2 (sound, file); ! ! if (STRINGP (attrs[SOUND_FILE])) ! { ! /* Open the sound file. */ ! int fd = openp (Fcons (Vdata_directory, Qnil), ! attrs[SOUND_FILE], Qnil, &file, Qnil); ! ! if (fd < 0) ! { ! if (errno == 0) ! error ("Could not open sound file"); ! else ! error ("Could not open sound file: %s", strerror (errno)); ! } ! emacs_close (fd); ! } ! ! block_input (); ! mac_sound = mac_sound_create (file, attrs[SOUND_DATA]); ! unblock_input (); ! if (mac_sound == NULL) ! error ("Unknown sound format"); ! ! args[0] = Qplay_sound_functions; ! args[1] = sound; ! Frun_hook_with_args (2, args); ! ! block_input (); ! mac_sound_play (mac_sound, attrs[SOUND_VOLUME], attrs[SOUND_DEVICE]); ! CFRelease (mac_sound); ! unblock_input (); ! ! UNGCPRO; ! #endif /* HAVE_MACGUI */ unbind_to (count, Qnil); return Qnil; ^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#3351: 23.0.93; OSX sound support 2013-03-18 2:47 ` YAMAMOTO Mitsuharu @ 2013-03-18 6:47 ` Jan Djärv 0 siblings, 0 replies; 5+ messages in thread From: Jan Djärv @ 2013-03-18 6:47 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: Alex Schröder, Leo Liu, 3351 Hello. 18 mar 2013 kl. 03:47 skrev YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>: > > Oops, I didn't realize that play-sound-internal was supposed to be > synchronous and unquittable. Below is an updated one. > I don't think that is a requirement. It is just an artifact of current implementations. It would be better if all sound implementations where asynchronous and quittable. Jan D. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-03-18 6:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-05-22 13:31 bug#3351: 23.0.93; OSX sound support Alex Schröder 2013-03-15 10:25 ` Leo Liu 2013-03-17 8:36 ` YAMAMOTO Mitsuharu 2013-03-18 2:47 ` YAMAMOTO Mitsuharu 2013-03-18 6:47 ` Jan Djärv
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).