Mercurial > emacs
annotate src/sound.c @ 55338:3fe6300a67bf
*** empty log message ***
| author | Jason Rumney <jasonr@gnu.org> |
|---|---|
| date | Mon, 03 May 2004 13:51:59 +0000 |
| parents | 695cf19ef79e |
| children | a8fa7c632ee4 375f2633d815 |
| rev | line source |
|---|---|
| 25003 | 1 /* sound.c -- sound support. |
|
38297
17465a81d1dd
Include Emacs' header files with #include "...".
Gerd Moellmann <gerd@gnu.org>
parents:
38215
diff
changeset
|
2 Copyright (C) 1998, 1999, 2001 Free Software Foundation. |
| 25003 | 3 |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 6 GNU Emacs is free software; you can redistribute it and/or modify | |
| 7 it under the terms of the GNU General Public License as published by | |
| 8 the Free Software Foundation; either version 2, or (at your option) | |
| 9 any later version. | |
| 10 | |
| 11 GNU Emacs is distributed in the hope that it will be useful, | |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 17 along with GNU Emacs; see the file COPYING. If not, write to | |
| 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 19 Boston, MA 02111-1307, USA. */ | |
| 20 | |
| 21 /* Written by Gerd Moellmann <gerd@gnu.org>. Tested with Luigi's | |
| 22 driver on FreeBSD 2.2.7 with a SoundBlaster 16. */ | |
| 23 | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
24 /* |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
25 Modified by Ben Key <Bkey1@tampabay.rr.com> to add a partial |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
26 implementation of the play-sound specification for Windows. |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
27 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
28 Notes: |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
29 In the Windows implementation of play-sound-internal only the |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
30 :file and :volume keywords are supported. The :device keyword, |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
31 if present, is ignored. The :data keyword, if present, will |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
32 cause an error to be generated. |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
33 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
34 The Windows implementation of play-sound is implemented via the |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
35 Win32 API functions mciSendString, waveOutGetVolume, and |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
36 waveOutSetVolume which are exported by Winmm.dll. |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
37 */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
38 |
| 25003 | 39 #include <config.h> |
| 40 | |
| 41 #if defined HAVE_SOUND | |
| 42 | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
43 /* BEGIN: Common Includes */ |
| 25003 | 44 #include <fcntl.h> |
| 45 #include <unistd.h> | |
| 46 #include <sys/types.h> | |
| 47 #include <errno.h> | |
|
38297
17465a81d1dd
Include Emacs' header files with #include "...".
Gerd Moellmann <gerd@gnu.org>
parents:
38215
diff
changeset
|
48 #include "lisp.h" |
|
17465a81d1dd
Include Emacs' header files with #include "...".
Gerd Moellmann <gerd@gnu.org>
parents:
38215
diff
changeset
|
49 #include "dispextern.h" |
|
17465a81d1dd
Include Emacs' header files with #include "...".
Gerd Moellmann <gerd@gnu.org>
parents:
38215
diff
changeset
|
50 #include "atimer.h" |
|
38338
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
51 #include <signal.h> |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
52 #include "syssignal.h" |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
53 /* END: Common Includes */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
54 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
55 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
56 /* BEGIN: Non Windows Includes */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
57 #ifndef WINDOWSNT |
| 25003 | 58 |
|
39969
21d7408e0d86
Include <sys/ioctl.h> also on systems without <soundcard.h>.
Pavel Jan?k <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
59 #ifndef MSDOS |
|
21d7408e0d86
Include <sys/ioctl.h> also on systems without <soundcard.h>.
Pavel Jan?k <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
60 #include <sys/ioctl.h> |
|
21d7408e0d86
Include <sys/ioctl.h> also on systems without <soundcard.h>.
Pavel Jan?k <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
61 #endif |
|
21d7408e0d86
Include <sys/ioctl.h> also on systems without <soundcard.h>.
Pavel Jan?k <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
62 |
| 25003 | 63 /* FreeBSD has machine/soundcard.h. Voxware sound driver docs mention |
| 64 sys/soundcard.h. So, let's try whatever's there. */ | |
| 65 | |
| 66 #ifdef HAVE_MACHINE_SOUNDCARD_H | |
| 67 #include <machine/soundcard.h> | |
| 68 #endif | |
| 69 #ifdef HAVE_SYS_SOUNDCARD_H | |
| 70 #include <sys/soundcard.h> | |
| 71 #endif | |
|
30079
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
72 #ifdef HAVE_SOUNDCARD_H |
|
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
73 #include <soundcard.h> |
|
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
74 #endif |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
75 /* END: Non Windows Includes */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
76 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
77 #else /* WINDOWSNT */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
78 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
79 /* BEGIN: Windows Specific Includes */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
80 #include <stdio.h> |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
81 #include <stdlib.h> |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
82 #include <string.h> |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
83 #include <limits.h> |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
84 #include <windows.h> |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
85 #include <mmsystem.h> |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
86 /* END: Windows Specific Includes */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
87 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
88 #endif /* WINDOWSNT */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
89 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
90 /* BEGIN: Common Definitions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
91 #define abs(X) ((X) < 0 ? -(X) : (X)) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
92 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
93 /* Symbols. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
94 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
95 extern Lisp_Object QCfile, QCdata; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
96 Lisp_Object QCvolume, QCdevice; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
97 Lisp_Object Qsound; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
98 Lisp_Object Qplay_sound_functions; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
99 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
100 /* Indices of attributes in a sound attributes vector. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
101 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
102 enum sound_attr |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
103 { |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
104 SOUND_FILE, |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
105 SOUND_DATA, |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
106 SOUND_DEVICE, |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
107 SOUND_VOLUME, |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
108 SOUND_ATTR_SENTINEL |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
109 }; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
110 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
111 static void sound_perror P_ ((char *)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
112 static void sound_warning P_ ((char *)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
113 static int parse_sound P_ ((Lisp_Object, Lisp_Object *)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
114 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
115 /* END: Common Definitions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
116 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
117 /* BEGIN: Non Windows Definitions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
118 #ifndef WINDOWSNT |
|
30079
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
119 |
|
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
120 #ifndef DEFAULT_SOUND_DEVICE |
|
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
121 #define DEFAULT_SOUND_DEVICE "/dev/dsp" |
|
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
122 #endif |
| 25003 | 123 |
| 124 | |
| 125 /* Structure forward declarations. */ | |
| 126 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
127 struct sound; |
| 25003 | 128 struct sound_device; |
| 129 | |
| 130 /* The file header of RIFF-WAVE files (*.wav). Files are always in | |
| 131 little-endian byte-order. */ | |
| 132 | |
| 133 struct wav_header | |
| 134 { | |
| 135 u_int32_t magic; | |
| 136 u_int32_t length; | |
| 137 u_int32_t chunk_type; | |
| 138 u_int32_t chunk_format; | |
| 139 u_int32_t chunk_length; | |
| 140 u_int16_t format; | |
| 141 u_int16_t channels; | |
| 142 u_int32_t sample_rate; | |
| 143 u_int32_t bytes_per_second; | |
| 144 u_int16_t sample_size; | |
| 145 u_int16_t precision; | |
| 146 u_int32_t chunk_data; | |
| 147 u_int32_t data_length; | |
| 148 }; | |
| 149 | |
| 150 /* The file header of Sun adio files (*.au). Files are always in | |
| 151 big-endian byte-order. */ | |
| 152 | |
| 153 struct au_header | |
| 154 { | |
| 155 /* ASCII ".snd" */ | |
| 156 u_int32_t magic_number; | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
157 |
| 25003 | 158 /* Offset of data part from start of file. Minimum value is 24. */ |
| 159 u_int32_t data_offset; | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
160 |
| 25003 | 161 /* Size of data part, 0xffffffff if unknown. */ |
| 162 u_int32_t data_size; | |
| 163 | |
| 164 /* Data encoding format. | |
| 165 1 8-bit ISDN u-law | |
| 166 2 8-bit linear PCM (REF-PCM) | |
| 167 3 16-bit linear PCM | |
| 168 4 24-bit linear PCM | |
| 169 5 32-bit linear PCM | |
| 170 6 32-bit IEEE floating-point | |
| 171 7 64-bit IEEE floating-point | |
| 172 23 8-bit u-law compressed using CCITT 0.721 ADPCM voice data | |
| 173 encoding scheme. */ | |
| 174 u_int32_t encoding; | |
| 175 | |
| 176 /* Number of samples per second. */ | |
| 177 u_int32_t sample_rate; | |
| 178 | |
| 179 /* Number of interleaved channels. */ | |
| 180 u_int32_t channels; | |
| 181 }; | |
| 182 | |
| 183 /* Maximum of all sound file headers sizes. */ | |
| 184 | |
| 185 #define MAX_SOUND_HEADER_BYTES \ | |
| 186 max (sizeof (struct wav_header), sizeof (struct au_header)) | |
| 187 | |
| 188 /* Interface structure for sound devices. */ | |
| 189 | |
| 190 struct sound_device | |
| 191 { | |
| 192 /* The name of the device or null meaning use a default device name. */ | |
| 193 char *file; | |
| 194 | |
| 195 /* File descriptor of the device. */ | |
| 196 int fd; | |
| 197 | |
| 198 /* Device-dependent format. */ | |
| 199 int format; | |
| 200 | |
| 201 /* Volume (0..100). Zero means unspecified. */ | |
| 202 int volume; | |
| 203 | |
| 204 /* Sample size. */ | |
| 205 int sample_size; | |
| 206 | |
| 207 /* Sample rate. */ | |
| 208 int sample_rate; | |
| 209 | |
| 210 /* Bytes per second. */ | |
| 211 int bps; | |
| 212 | |
| 213 /* 1 = mono, 2 = stereo, 0 = don't set. */ | |
| 214 int channels; | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
215 |
| 25003 | 216 /* Open device SD. */ |
| 217 void (* open) P_ ((struct sound_device *sd)); | |
| 218 | |
| 219 /* Close device SD. */ | |
| 220 void (* close) P_ ((struct sound_device *sd)); | |
| 221 | |
| 222 /* Configure SD accoring to device-dependent parameters. */ | |
| 223 void (* configure) P_ ((struct sound_device *device)); | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
224 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
225 /* Choose a device-dependent format for outputting sound S. */ |
| 25003 | 226 void (* choose_format) P_ ((struct sound_device *sd, |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
227 struct sound *s)); |
| 25003 | 228 |
| 229 /* Write NYBTES bytes from BUFFER to device SD. */ | |
|
46554
fb13fafbd279
(struct sound_device): Function pointer field "write"
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
230 void (* write) P_ ((struct sound_device *sd, const char *buffer, |
|
fb13fafbd279
(struct sound_device): Function pointer field "write"
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
231 int nbytes)); |
| 25003 | 232 |
| 233 /* A place for devices to store additional data. */ | |
| 234 void *data; | |
| 235 }; | |
| 236 | |
| 237 /* An enumerator for each supported sound file type. */ | |
| 238 | |
| 239 enum sound_type | |
| 240 { | |
| 241 RIFF, | |
| 242 SUN_AUDIO | |
| 243 }; | |
| 244 | |
| 245 /* Interface structure for sound files. */ | |
| 246 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
247 struct sound |
| 25003 | 248 { |
| 249 /* The type of the file. */ | |
| 250 enum sound_type type; | |
| 251 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
252 /* File descriptor of a sound file. */ |
| 25003 | 253 int fd; |
| 254 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
255 /* Pointer to sound file header. This contains header_size bytes |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
256 read from the start of a sound file. */ |
| 25003 | 257 char *header; |
| 258 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
259 /* Number of bytes raed from sound file. This is always <= |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
260 MAX_SOUND_HEADER_BYTES. */ |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
261 int header_size; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
262 |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
263 /* Sound data, if a string. */ |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
264 Lisp_Object data; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
265 |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
266 /* Play sound file S on device SD. */ |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
267 void (* play) P_ ((struct sound *s, struct sound_device *sd)); |
| 25003 | 268 }; |
| 269 | |
|
44399
a399428859ff
(Fplay_sound_internal): Renamed from Fplay_sound.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42754
diff
changeset
|
270 /* These are set during `play-sound-internal' so that sound_cleanup has |
| 25003 | 271 access to them. */ |
| 272 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
273 struct sound_device *current_sound_device; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
274 struct sound *current_sound; |
| 25003 | 275 |
| 276 /* Function prototypes. */ | |
| 277 | |
| 278 static void vox_open P_ ((struct sound_device *)); | |
| 279 static void vox_configure P_ ((struct sound_device *)); | |
| 280 static void vox_close P_ ((struct sound_device *sd)); | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
281 static void vox_choose_format P_ ((struct sound_device *, struct sound *)); |
| 25003 | 282 static void vox_init P_ ((struct sound_device *)); |
|
46554
fb13fafbd279
(struct sound_device): Function pointer field "write"
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
283 static void vox_write P_ ((struct sound_device *, const char *, int)); |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
284 static void find_sound_type P_ ((struct sound *)); |
| 25003 | 285 static u_int32_t le2hl P_ ((u_int32_t)); |
| 286 static u_int16_t le2hs P_ ((u_int16_t)); | |
| 287 static u_int32_t be2hl P_ ((u_int32_t)); | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
288 static int wav_init P_ ((struct sound *)); |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
289 static void wav_play P_ ((struct sound *, struct sound_device *)); |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
290 static int au_init P_ ((struct sound *)); |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
291 static void au_play P_ ((struct sound *, struct sound_device *)); |
| 25003 | 292 |
|
25722
2be6ced279d3
(Fplay_sound): Remove usused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25548
diff
changeset
|
293 #if 0 /* Currently not used. */ |
|
2be6ced279d3
(Fplay_sound): Remove usused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25548
diff
changeset
|
294 static u_int16_t be2hs P_ ((u_int16_t)); |
|
2be6ced279d3
(Fplay_sound): Remove usused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25548
diff
changeset
|
295 #endif |
|
2be6ced279d3
(Fplay_sound): Remove usused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25548
diff
changeset
|
296 |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
297 /* END: Non Windows Definitions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
298 #else /* WINDOWSNT */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
299 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
300 /* BEGIN: Windows Specific Definitions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
301 static int do_play_sound P_ ((const char *, unsigned long)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
302 /* |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
303 END: Windows Specific Definitions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
304 #endif /* WINDOWSNT */ |
| 25003 | 305 |
| 306 | |
| 307 /*********************************************************************** | |
| 308 General | |
| 309 ***********************************************************************/ | |
| 310 | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
311 /* BEGIN: Common functions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
312 |
| 25003 | 313 /* Like perror, but signals an error. */ |
| 314 | |
| 315 static void | |
| 316 sound_perror (msg) | |
| 317 char *msg; | |
| 318 { | |
|
40745
1622bfdfe454
(sound_perror): Save errno from being clobbered.
Andreas Schwab <schwab@suse.de>
parents:
40364
diff
changeset
|
319 int saved_errno = errno; |
|
1622bfdfe454
(sound_perror): Save errno from being clobbered.
Andreas Schwab <schwab@suse.de>
parents:
40364
diff
changeset
|
320 |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
321 turn_on_atimers (1); |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
322 #ifdef SIGIO |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
323 sigunblock (sigmask (SIGIO)); |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
324 #endif |
|
40745
1622bfdfe454
(sound_perror): Save errno from being clobbered.
Andreas Schwab <schwab@suse.de>
parents:
40364
diff
changeset
|
325 if (saved_errno != 0) |
|
1622bfdfe454
(sound_perror): Save errno from being clobbered.
Andreas Schwab <schwab@suse.de>
parents:
40364
diff
changeset
|
326 error ("%s: %s", msg, strerror (saved_errno)); |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
327 else |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
328 error ("%s", msg); |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
329 } |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
330 |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
331 |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
332 /* Display a warning message. */ |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
333 |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
334 static void |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
335 sound_warning (msg) |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
336 char *msg; |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
337 { |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
338 message (msg); |
| 25003 | 339 } |
| 340 | |
| 341 | |
| 342 /* Parse sound specification SOUND, and fill ATTRS with what is | |
| 343 found. Value is non-zero if SOUND Is a valid sound specification. | |
| 344 A valid sound specification is a list starting with the symbol | |
| 345 `sound'. The rest of the list is a property list which may | |
| 346 contain the following key/value pairs: | |
| 347 | |
| 348 - `:file FILE' | |
| 349 | |
| 350 FILE is the sound file to play. If it isn't an absolute name, | |
| 351 it's searched under `data-directory'. | |
| 352 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
353 - `:data DATA' |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
354 |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
355 DATA is a string containing sound data. Either :file or :data |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
356 may be present, but not both. |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
357 |
| 25003 | 358 - `:device DEVICE' |
| 359 | |
| 360 DEVICE is the name of the device to play on, e.g. "/dev/dsp2". | |
| 361 If not specified, a default device is used. | |
| 362 | |
| 363 - `:volume VOL' | |
| 364 | |
|
25548
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
365 VOL must be an integer in the range [0, 100], or a float in the |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
366 range [0, 1]. */ |
| 25003 | 367 |
| 368 static int | |
| 369 parse_sound (sound, attrs) | |
| 370 Lisp_Object sound; | |
| 371 Lisp_Object *attrs; | |
| 372 { | |
| 373 /* SOUND must be a list starting with the symbol `sound'. */ | |
| 374 if (!CONSP (sound) || !EQ (XCAR (sound), Qsound)) | |
| 375 return 0; | |
| 376 | |
| 377 sound = XCDR (sound); | |
| 378 attrs[SOUND_FILE] = Fplist_get (sound, QCfile); | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
379 attrs[SOUND_DATA] = Fplist_get (sound, QCdata); |
| 25003 | 380 attrs[SOUND_DEVICE] = Fplist_get (sound, QCdevice); |
| 381 attrs[SOUND_VOLUME] = Fplist_get (sound, QCvolume); | |
| 382 | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
383 #ifndef WINDOWSNT |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
384 /* File name or data must be specified. */ |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
385 if (!STRINGP (attrs[SOUND_FILE]) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
386 && !STRINGP (attrs[SOUND_DATA])) |
| 25003 | 387 return 0; |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
388 #else /* WINDOWSNT */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
389 /* |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
390 Data is not supported in Windows. Therefore a |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
391 File name MUST be supplied. |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
392 */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
393 if (!STRINGP (attrs[SOUND_FILE])) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
394 { |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
395 return 0; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
396 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
397 #endif /* WINDOWSNT */ |
| 25003 | 398 |
| 399 /* Volume must be in the range 0..100 or unspecified. */ | |
| 400 if (!NILP (attrs[SOUND_VOLUME])) | |
| 401 { | |
|
25548
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
402 if (INTEGERP (attrs[SOUND_VOLUME])) |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
403 { |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
404 if (XINT (attrs[SOUND_VOLUME]) < 0 |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
405 || XINT (attrs[SOUND_VOLUME]) > 100) |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
406 return 0; |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
407 } |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
408 else if (FLOATP (attrs[SOUND_VOLUME])) |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
409 { |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
410 if (XFLOAT_DATA (attrs[SOUND_VOLUME]) < 0 |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
411 || XFLOAT_DATA (attrs[SOUND_VOLUME]) > 1) |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
412 return 0; |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
413 } |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
414 else |
| 25003 | 415 return 0; |
| 416 } | |
| 417 | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
418 #ifndef WINDOWSNT |
| 25003 | 419 /* Device must be a string or unspecified. */ |
| 420 if (!NILP (attrs[SOUND_DEVICE]) | |
| 421 && !STRINGP (attrs[SOUND_DEVICE])) | |
| 422 return 0; | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
423 #endif /* WINDOWSNT */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
424 /* |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
425 Since device is ignored in Windows, it does not matter |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
426 what it is. |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
427 */ |
| 25003 | 428 return 1; |
| 429 } | |
| 430 | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
431 /* END: Common functions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
432 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
433 /* BEGIN: Non Windows functions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
434 #ifndef WINDOWSNT |
| 25003 | 435 |
| 436 /* Find out the type of the sound file whose file descriptor is FD. | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
437 S is the sound file structure to fill in. */ |
| 25003 | 438 |
| 439 static void | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
440 find_sound_type (s) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
441 struct sound *s; |
| 25003 | 442 { |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
443 if (!wav_init (s) && !au_init (s)) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
444 error ("Unknown sound format"); |
| 25003 | 445 } |
| 446 | |
| 447 | |
|
44399
a399428859ff
(Fplay_sound_internal): Renamed from Fplay_sound.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42754
diff
changeset
|
448 /* Function installed by play-sound-internal with record_unwind_protect. */ |
| 25003 | 449 |
| 450 static Lisp_Object | |
| 451 sound_cleanup (arg) | |
| 452 Lisp_Object arg; | |
| 453 { | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
454 if (current_sound_device) |
| 25003 | 455 { |
|
27635
8344762c0da2
* sound.c (sound_cleanup): Don't call device close routine if pointer is null.
Ken Raeburn <raeburn@raeburn.org>
parents:
27315
diff
changeset
|
456 if (current_sound_device->close) |
|
8344762c0da2
* sound.c (sound_cleanup): Don't call device close routine if pointer is null.
Ken Raeburn <raeburn@raeburn.org>
parents:
27315
diff
changeset
|
457 current_sound_device->close (current_sound_device); |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
458 if (current_sound->fd > 0) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
459 emacs_close (current_sound->fd); |
| 25003 | 460 } |
|
34255
cb2b0d1799db
(vox_configure): Set volume for left and right channel.
Gerd Moellmann <gerd@gnu.org>
parents:
31587
diff
changeset
|
461 |
|
cb2b0d1799db
(vox_configure): Set volume for left and right channel.
Gerd Moellmann <gerd@gnu.org>
parents:
31587
diff
changeset
|
462 return Qnil; |
| 25003 | 463 } |
| 464 | |
| 465 /*********************************************************************** | |
| 466 Byte-order Conversion | |
| 467 ***********************************************************************/ | |
| 468 | |
| 469 /* Convert 32-bit value VALUE which is in little-endian byte-order | |
| 470 to host byte-order. */ | |
| 471 | |
| 472 static u_int32_t | |
| 473 le2hl (value) | |
| 474 u_int32_t value; | |
| 475 { | |
| 476 #ifdef WORDS_BIG_ENDIAN | |
| 477 unsigned char *p = (unsigned char *) &value; | |
| 478 value = p[0] + (p[1] << 8) + (p[2] << 16) + (p[3] << 24); | |
| 479 #endif | |
| 480 return value; | |
| 481 } | |
| 482 | |
| 483 | |
| 484 /* Convert 16-bit value VALUE which is in little-endian byte-order | |
| 485 to host byte-order. */ | |
| 486 | |
| 487 static u_int16_t | |
| 488 le2hs (value) | |
| 489 u_int16_t value; | |
| 490 { | |
| 491 #ifdef WORDS_BIG_ENDIAN | |
| 492 unsigned char *p = (unsigned char *) &value; | |
| 493 value = p[0] + (p[1] << 8); | |
| 494 #endif | |
| 495 return value; | |
| 496 } | |
| 497 | |
| 498 | |
| 499 /* Convert 32-bit value VALUE which is in big-endian byte-order | |
| 500 to host byte-order. */ | |
| 501 | |
| 502 static u_int32_t | |
| 503 be2hl (value) | |
| 504 u_int32_t value; | |
| 505 { | |
| 506 #ifndef WORDS_BIG_ENDIAN | |
| 507 unsigned char *p = (unsigned char *) &value; | |
| 508 value = p[3] + (p[2] << 8) + (p[1] << 16) + (p[0] << 24); | |
| 509 #endif | |
| 510 return value; | |
| 511 } | |
| 512 | |
| 513 | |
|
25722
2be6ced279d3
(Fplay_sound): Remove usused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25548
diff
changeset
|
514 #if 0 /* Currently not used. */ |
|
2be6ced279d3
(Fplay_sound): Remove usused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25548
diff
changeset
|
515 |
| 25003 | 516 /* Convert 16-bit value VALUE which is in big-endian byte-order |
| 517 to host byte-order. */ | |
| 518 | |
| 519 static u_int16_t | |
| 520 be2hs (value) | |
| 521 u_int16_t value; | |
| 522 { | |
| 523 #ifndef WORDS_BIG_ENDIAN | |
| 524 unsigned char *p = (unsigned char *) &value; | |
| 525 value = p[1] + (p[0] << 8); | |
| 526 #endif | |
| 527 return value; | |
| 528 } | |
| 529 | |
|
25722
2be6ced279d3
(Fplay_sound): Remove usused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25548
diff
changeset
|
530 #endif /* 0 */ |
| 25003 | 531 |
| 532 /*********************************************************************** | |
| 533 RIFF-WAVE (*.wav) | |
| 534 ***********************************************************************/ | |
| 535 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
536 /* Try to initialize sound file S from S->header. S->header |
| 25003 | 537 contains the first MAX_SOUND_HEADER_BYTES number of bytes from the |
| 538 sound file. If the file is a WAV-format file, set up interface | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
539 functions in S and convert header fields to host byte-order. |
| 25003 | 540 Value is non-zero if the file is a WAV file. */ |
| 541 | |
| 542 static int | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
543 wav_init (s) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
544 struct sound *s; |
| 25003 | 545 { |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
546 struct wav_header *header = (struct wav_header *) s->header; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
547 |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
548 if (s->header_size < sizeof *header |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
549 || bcmp (s->header, "RIFF", 4) != 0) |
| 25003 | 550 return 0; |
| 551 | |
| 552 /* WAV files are in little-endian order. Convert the header | |
| 553 if on a big-endian machine. */ | |
| 554 header->magic = le2hl (header->magic); | |
| 555 header->length = le2hl (header->length); | |
| 556 header->chunk_type = le2hl (header->chunk_type); | |
| 557 header->chunk_format = le2hl (header->chunk_format); | |
| 558 header->chunk_length = le2hl (header->chunk_length); | |
| 559 header->format = le2hs (header->format); | |
| 560 header->channels = le2hs (header->channels); | |
| 561 header->sample_rate = le2hl (header->sample_rate); | |
| 562 header->bytes_per_second = le2hl (header->bytes_per_second); | |
| 563 header->sample_size = le2hs (header->sample_size); | |
| 564 header->precision = le2hs (header->precision); | |
| 565 header->chunk_data = le2hl (header->chunk_data); | |
| 566 header->data_length = le2hl (header->data_length); | |
| 567 | |
| 568 /* Set up the interface functions for WAV. */ | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
569 s->type = RIFF; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
570 s->play = wav_play; |
| 25003 | 571 |
| 572 return 1; | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
573 } |
| 25003 | 574 |
| 575 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
576 /* Play RIFF-WAVE audio file S on sound device SD. */ |
| 25003 | 577 |
| 578 static void | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
579 wav_play (s, sd) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
580 struct sound *s; |
| 25003 | 581 struct sound_device *sd; |
| 582 { | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
583 struct wav_header *header = (struct wav_header *) s->header; |
| 25003 | 584 |
| 585 /* Let the device choose a suitable device-dependent format | |
| 586 for the file. */ | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
587 sd->choose_format (sd, s); |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
588 |
| 25003 | 589 /* Configure the device. */ |
| 590 sd->sample_size = header->sample_size; | |
| 591 sd->sample_rate = header->sample_rate; | |
| 592 sd->bps = header->bytes_per_second; | |
| 593 sd->channels = header->channels; | |
| 594 sd->configure (sd); | |
| 595 | |
| 596 /* Copy sound data to the device. The WAV file specification is | |
| 597 actually more complex. This simple scheme worked with all WAV | |
| 598 files I found so far. If someone feels inclined to implement the | |
| 599 whole RIFF-WAVE spec, please do. */ | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
600 if (STRINGP (s->data)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
601 sd->write (sd, SDATA (s->data) + sizeof *header, |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
602 SBYTES (s->data) - sizeof *header); |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
603 else |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
604 { |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
605 char *buffer; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
606 int nbytes; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
607 int blksize = 2048; |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
608 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
609 buffer = (char *) alloca (blksize); |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
610 lseek (s->fd, sizeof *header, SEEK_SET); |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
611 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
612 while ((nbytes = emacs_read (s->fd, buffer, blksize)) > 0) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
613 sd->write (sd, buffer, nbytes); |
| 25003 | 614 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
615 if (nbytes < 0) |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
616 sound_perror ("Error reading sound file"); |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
617 } |
| 25003 | 618 } |
| 619 | |
| 620 | |
| 621 /*********************************************************************** | |
| 622 Sun Audio (*.au) | |
| 623 ***********************************************************************/ | |
| 624 | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
625 /* Sun audio file encodings. */ |
| 25003 | 626 |
| 627 enum au_encoding | |
| 628 { | |
| 629 AU_ENCODING_ULAW_8 = 1, | |
| 630 AU_ENCODING_8, | |
| 631 AU_ENCODING_16, | |
| 632 AU_ENCODING_24, | |
| 633 AU_ENCODING_32, | |
| 634 AU_ENCODING_IEEE32, | |
| 635 AU_ENCODING_IEEE64, | |
| 636 AU_COMPRESSED = 23 | |
| 637 }; | |
| 638 | |
| 639 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
640 /* Try to initialize sound file S from S->header. S->header |
| 25003 | 641 contains the first MAX_SOUND_HEADER_BYTES number of bytes from the |
| 642 sound file. If the file is a AU-format file, set up interface | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
643 functions in S and convert header fields to host byte-order. |
| 25003 | 644 Value is non-zero if the file is an AU file. */ |
| 645 | |
| 646 static int | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
647 au_init (s) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
648 struct sound *s; |
| 25003 | 649 { |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
650 struct au_header *header = (struct au_header *) s->header; |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
651 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
652 if (s->header_size < sizeof *header |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
653 || bcmp (s->header, ".snd", 4) != 0) |
| 25003 | 654 return 0; |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
655 |
| 25003 | 656 header->magic_number = be2hl (header->magic_number); |
| 657 header->data_offset = be2hl (header->data_offset); | |
| 658 header->data_size = be2hl (header->data_size); | |
| 659 header->encoding = be2hl (header->encoding); | |
| 660 header->sample_rate = be2hl (header->sample_rate); | |
| 661 header->channels = be2hl (header->channels); | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
662 |
| 25003 | 663 /* Set up the interface functions for AU. */ |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
664 s->type = SUN_AUDIO; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
665 s->play = au_play; |
| 25003 | 666 |
| 667 return 1; | |
| 668 } | |
| 669 | |
| 670 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
671 /* Play Sun audio file S on sound device SD. */ |
| 25003 | 672 |
| 673 static void | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
674 au_play (s, sd) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
675 struct sound *s; |
| 25003 | 676 struct sound_device *sd; |
| 677 { | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
678 struct au_header *header = (struct au_header *) s->header; |
| 25003 | 679 |
| 680 sd->sample_size = 0; | |
| 681 sd->sample_rate = header->sample_rate; | |
| 682 sd->bps = 0; | |
| 683 sd->channels = header->channels; | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
684 sd->choose_format (sd, s); |
| 25003 | 685 sd->configure (sd); |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
686 |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
687 if (STRINGP (s->data)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
688 sd->write (sd, SDATA (s->data) + header->data_offset, |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
689 SBYTES (s->data) - header->data_offset); |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
690 else |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
691 { |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
692 int blksize = 2048; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
693 char *buffer; |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
694 int nbytes; |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
695 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
696 /* Seek */ |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
697 lseek (s->fd, header->data_offset, SEEK_SET); |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
698 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
699 /* Copy sound data to the device. */ |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
700 buffer = (char *) alloca (blksize); |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
701 while ((nbytes = emacs_read (s->fd, buffer, blksize)) > 0) |
|
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
702 sd->write (sd, buffer, nbytes); |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
703 |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
704 if (nbytes < 0) |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
705 sound_perror ("Error reading sound file"); |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
706 } |
| 25003 | 707 } |
| 708 | |
| 709 | |
| 710 /*********************************************************************** | |
| 711 Voxware Driver Interface | |
| 712 ***********************************************************************/ | |
| 713 | |
| 714 /* This driver is available on GNU/Linux, and the free BSDs. FreeBSD | |
| 715 has a compatible own driver aka Luigi's driver. */ | |
| 716 | |
| 717 | |
| 718 /* Open device SD. If SD->file is non-null, open that device, | |
| 719 otherwise use a default device name. */ | |
| 720 | |
| 721 static void | |
| 722 vox_open (sd) | |
| 723 struct sound_device *sd; | |
| 724 { | |
| 725 char *file; | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
726 |
| 25003 | 727 /* Open the sound device. Default is /dev/dsp. */ |
| 728 if (sd->file) | |
| 729 file = sd->file; | |
| 730 else | |
|
30079
1572612184fc
Sound support for NetBSD through "Linux emulation" support:
Ken Raeburn <raeburn@raeburn.org>
parents:
29717
diff
changeset
|
731 file = DEFAULT_SOUND_DEVICE; |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
732 |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25722
diff
changeset
|
733 sd->fd = emacs_open (file, O_WRONLY, 0); |
| 25003 | 734 if (sd->fd < 0) |
| 735 sound_perror (file); | |
| 736 } | |
| 737 | |
| 738 | |
| 739 /* Configure device SD from parameters in it. */ | |
| 740 | |
| 741 static void | |
| 742 vox_configure (sd) | |
| 743 struct sound_device *sd; | |
| 744 { | |
|
34354
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
745 int val; |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
746 |
| 25003 | 747 xassert (sd->fd >= 0); |
| 748 | |
|
38338
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
749 /* On GNU/Linux, it seems that the device driver doesn't like to be |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
750 interrupted by a signal. Block the ones we know to cause |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
751 troubles. */ |
|
38215
b9fdde642b13
(vox_configure, vox_close): Turn off atimers
Gerd Moellmann <gerd@gnu.org>
parents:
34354
diff
changeset
|
752 turn_on_atimers (0); |
|
38338
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
753 #ifdef SIGIO |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
754 sigblock (sigmask (SIGIO)); |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
755 #endif |
|
38215
b9fdde642b13
(vox_configure, vox_close): Turn off atimers
Gerd Moellmann <gerd@gnu.org>
parents:
34354
diff
changeset
|
756 |
|
34354
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
757 val = sd->format; |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
758 if (ioctl (sd->fd, SNDCTL_DSP_SETFMT, &sd->format) < 0 |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
759 || val != sd->format) |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
760 sound_perror ("Could not set sound format"); |
|
34354
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
761 |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
762 val = sd->channels != 1; |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
763 if (ioctl (sd->fd, SNDCTL_DSP_STEREO, &val) < 0 |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
764 || val != (sd->channels != 1)) |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
765 sound_perror ("Could not set stereo/mono"); |
| 25003 | 766 |
|
34354
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
767 /* I think bps and sampling_rate are the same, but who knows. |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
768 Check this. and use SND_DSP_SPEED for both. */ |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
769 if (sd->sample_rate > 0) |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
770 { |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
771 val = sd->sample_rate; |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
772 if (ioctl (sd->fd, SNDCTL_DSP_SPEED, &sd->sample_rate) < 0) |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
773 sound_perror ("Could not set sound speed"); |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
774 else if (val != sd->sample_rate) |
|
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
775 sound_warning ("Could not set sample rate"); |
|
34354
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
776 } |
| 25003 | 777 |
|
34255
cb2b0d1799db
(vox_configure): Set volume for left and right channel.
Gerd Moellmann <gerd@gnu.org>
parents:
31587
diff
changeset
|
778 if (sd->volume > 0) |
|
cb2b0d1799db
(vox_configure): Set volume for left and right channel.
Gerd Moellmann <gerd@gnu.org>
parents:
31587
diff
changeset
|
779 { |
|
cb2b0d1799db
(vox_configure): Set volume for left and right channel.
Gerd Moellmann <gerd@gnu.org>
parents:
31587
diff
changeset
|
780 int volume = sd->volume & 0xff; |
|
cb2b0d1799db
(vox_configure): Set volume for left and right channel.
Gerd Moellmann <gerd@gnu.org>
parents:
31587
diff
changeset
|
781 volume |= volume << 8; |
|
34354
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
782 /* This may fail if there is no mixer. Ignore the failure. */ |
|
db2901e01b72
(vox_configure): Change order of ioctls. Don't
Gerd Moellmann <gerd@gnu.org>
parents:
34255
diff
changeset
|
783 ioctl (sd->fd, SOUND_MIXER_WRITE_PCM, &volume); |
|
34255
cb2b0d1799db
(vox_configure): Set volume for left and right channel.
Gerd Moellmann <gerd@gnu.org>
parents:
31587
diff
changeset
|
784 } |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
785 |
|
38215
b9fdde642b13
(vox_configure, vox_close): Turn off atimers
Gerd Moellmann <gerd@gnu.org>
parents:
34354
diff
changeset
|
786 turn_on_atimers (1); |
|
38338
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
787 #ifdef SIGIO |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
788 sigunblock (sigmask (SIGIO)); |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
789 #endif |
| 25003 | 790 } |
| 791 | |
| 792 | |
| 793 /* Close device SD if it is open. */ | |
| 794 | |
| 795 static void | |
| 796 vox_close (sd) | |
| 797 struct sound_device *sd; | |
| 798 { | |
| 799 if (sd->fd >= 0) | |
| 800 { | |
|
38338
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
801 /* On GNU/Linux, it seems that the device driver doesn't like to |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
802 be interrupted by a signal. Block the ones we know to cause |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
803 troubles. */ |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
804 #ifdef SIGIO |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
805 sigblock (sigmask (SIGIO)); |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
806 #endif |
|
38215
b9fdde642b13
(vox_configure, vox_close): Turn off atimers
Gerd Moellmann <gerd@gnu.org>
parents:
34354
diff
changeset
|
807 turn_on_atimers (0); |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
808 |
|
38338
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
809 /* Flush sound data, and reset the device. */ |
| 25003 | 810 ioctl (sd->fd, SNDCTL_DSP_SYNC, NULL); |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
811 |
|
38215
b9fdde642b13
(vox_configure, vox_close): Turn off atimers
Gerd Moellmann <gerd@gnu.org>
parents:
34354
diff
changeset
|
812 turn_on_atimers (1); |
|
38338
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
813 #ifdef SIGIO |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
814 sigunblock (sigmask (SIGIO)); |
|
c6ff61f9af43
(toplevel): Include <signal.h> and "syssignal.h".
Gerd Moellmann <gerd@gnu.org>
parents:
38297
diff
changeset
|
815 #endif |
| 25003 | 816 |
| 817 /* Close the device. */ | |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25722
diff
changeset
|
818 emacs_close (sd->fd); |
| 25003 | 819 sd->fd = -1; |
| 820 } | |
| 821 } | |
| 822 | |
| 823 | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
824 /* Choose device-dependent format for device SD from sound file S. */ |
| 25003 | 825 |
| 826 static void | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
827 vox_choose_format (sd, s) |
| 25003 | 828 struct sound_device *sd; |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
829 struct sound *s; |
| 25003 | 830 { |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
831 if (s->type == RIFF) |
| 25003 | 832 { |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
833 struct wav_header *h = (struct wav_header *) s->header; |
| 25003 | 834 if (h->precision == 8) |
| 835 sd->format = AFMT_U8; | |
| 836 else if (h->precision == 16) | |
| 837 sd->format = AFMT_S16_LE; | |
| 838 else | |
| 839 error ("Unsupported WAV file format"); | |
| 840 } | |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
841 else if (s->type == SUN_AUDIO) |
| 25003 | 842 { |
|
27146
68290f44807a
(struct sound): Renamed from struct sound_file.
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
843 struct au_header *header = (struct au_header *) s->header; |
| 25003 | 844 switch (header->encoding) |
| 845 { | |
| 846 case AU_ENCODING_ULAW_8: | |
| 847 case AU_ENCODING_IEEE32: | |
| 848 case AU_ENCODING_IEEE64: | |
| 849 sd->format = AFMT_MU_LAW; | |
| 850 break; | |
|
42754
158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42534
diff
changeset
|
851 |
| 25003 | 852 case AU_ENCODING_8: |
| 853 case AU_ENCODING_16: | |
| 854 case AU_ENCODING_24: | |
| 855 case AU_ENCODING_32: | |
| 856 sd->format = AFMT_S16_LE; | |
| 857 break; | |
| 858 | |
| 859 default: | |
| 860 error ("Unsupported AU file format"); | |
| 861 } | |
| 862 } | |
| 863 else | |
| 864 abort (); | |
| 865 } | |
| 866 | |
| 867 | |
| 868 /* Initialize device SD. Set up the interface functions in the device | |
| 869 structure. */ | |
| 870 | |
| 871 static void | |
| 872 vox_init (sd) | |
| 873 struct sound_device *sd; | |
| 874 { | |
| 875 sd->fd = -1; | |
| 876 sd->open = vox_open; | |
| 877 sd->close = vox_close; | |
| 878 sd->configure = vox_configure; | |
| 879 sd->choose_format = vox_choose_format; | |
| 880 sd->write = vox_write; | |
| 881 } | |
| 882 | |
| 883 /* Write NBYTES bytes from BUFFER to device SD. */ | |
| 884 | |
| 885 static void | |
| 886 vox_write (sd, buffer, nbytes) | |
| 887 struct sound_device *sd; | |
|
46554
fb13fafbd279
(struct sound_device): Function pointer field "write"
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
888 const char *buffer; |
| 25003 | 889 int nbytes; |
| 890 { | |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25722
diff
changeset
|
891 int nwritten = emacs_write (sd->fd, buffer, nbytes); |
| 25003 | 892 if (nwritten < 0) |
|
40364
f7b039994118
(sound_perror): Unblock SIGIO, turn on atimers.
Gerd Moellmann <gerd@gnu.org>
parents:
40123
diff
changeset
|
893 sound_perror ("Error writing to sound device"); |
| 25003 | 894 } |
| 895 | |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
896 /* END: Non Windows functions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
897 #else /* WINDOWSNT */ |
| 25003 | 898 |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
899 /* BEGIN: Windows specific functions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
900 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
901 static int |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
902 do_play_sound (psz_file, ui_volume) |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
903 const char *psz_file; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
904 unsigned long ui_volume; |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
905 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
906 int i_result = 0; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
907 MCIERROR mci_error = 0; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
908 char sz_cmd_buf[520] = {0}; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
909 char sz_ret_buf[520] = {0}; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
910 MMRESULT mm_result = MMSYSERR_NOERROR; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
911 unsigned long ui_volume_org = 0; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
912 BOOL b_reset_volume = FALSE; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
913 |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
914 memset (sz_cmd_buf, 0, sizeof(sz_cmd_buf)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
915 memset (sz_ret_buf, 0, sizeof(sz_ret_buf)); |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
916 sprintf (sz_cmd_buf, |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
917 "open \"%s\" alias GNUEmacs_PlaySound_Device wait", |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
918 psz_file); |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
919 mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, 520, NULL); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
920 if (mci_error != 0) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
921 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
922 sound_warning ("The open mciSendString command failed to open\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
923 "the specified sound file"); |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
924 i_result = (int) mci_error; |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
925 return i_result; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
926 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
927 if ((ui_volume > 0) && (ui_volume != UINT_MAX)) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
928 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
929 mm_result = waveOutGetVolume ((HWAVEOUT) WAVE_MAPPER, &ui_volume_org); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
930 if (mm_result == MMSYSERR_NOERROR) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
931 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
932 b_reset_volume = TRUE; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
933 mm_result = waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, ui_volume); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
934 if ( mm_result != MMSYSERR_NOERROR) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
935 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
936 sound_warning ("waveOutSetVolume failed to set the volume level\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
937 "of the WAVE_MAPPER device.\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
938 "As a result, the user selected volume level will\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
939 "not be used."); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
940 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
941 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
942 else |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
943 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
944 sound_warning ("waveOutGetVolume failed to obtain the original\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
945 "volume level of the WAVE_MAPPER device.\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
946 "As a result, the user selected volume level will\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
947 "not be used."); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
948 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
949 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
950 memset (sz_cmd_buf, 0, sizeof(sz_cmd_buf)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
951 memset (sz_ret_buf, 0, sizeof(sz_ret_buf)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
952 strcpy (sz_cmd_buf, "play GNUEmacs_PlaySound_Device wait"); |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
953 mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, 520, NULL); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
954 if (mci_error != 0) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
955 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
956 sound_warning ("The play mciSendString command failed to play the\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
957 "opened sound file."); |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
958 i_result = (int) mci_error; |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
959 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
960 memset (sz_cmd_buf, 0, sizeof(sz_cmd_buf)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
961 memset (sz_ret_buf, 0, sizeof(sz_ret_buf)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
962 strcpy (sz_cmd_buf, "close GNUEmacs_PlaySound_Device wait"); |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
963 mci_error = mciSendString (sz_cmd_buf, sz_ret_buf, 520, NULL); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
964 if (b_reset_volume == TRUE) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
965 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
966 mm_result=waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, ui_volume_org); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
967 if (mm_result != MMSYSERR_NOERROR) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
968 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
969 sound_warning ("waveOutSetVolume failed to reset the original volume\n" |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
970 "level of the WAVE_MAPPER device."); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
971 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
972 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
973 return i_result; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
974 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
975 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
976 /* END: Windows specific functions */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
977 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
978 #endif /* WINDOWSNT */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
979 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
980 DEFUN ("play-sound-internal", Fplay_sound_internal, Splay_sound_internal, 1, 1, 0, |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
981 doc: /* Play sound SOUND. |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
982 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
983 Internal use only, use `play-sound' instead.\n */) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
984 (sound) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
985 Lisp_Object sound; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
986 { |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
987 Lisp_Object attrs[SOUND_ATTR_SENTINEL]; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
988 int count = SPECPDL_INDEX (); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
989 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
990 #ifndef WINDOWSNT |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
991 Lisp_Object file; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
992 struct gcpro gcpro1, gcpro2; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
993 struct sound_device sd; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
994 struct sound s; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
995 Lisp_Object args[2]; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
996 #else /* WINDOWSNT */ |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
997 int len = 0; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
998 Lisp_Object lo_file = {0}; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
999 char * psz_file = NULL; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1000 unsigned long ui_volume_tmp = UINT_MAX; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1001 unsigned long ui_volume = UINT_MAX; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1002 int i_result = 0; |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1003 #endif /* WINDOWSNT */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1004 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1005 /* Parse the sound specification. Give up if it is invalid. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1006 if (!parse_sound (sound, attrs)) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1007 error ("Invalid sound specification"); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1008 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1009 #ifndef WINDOWSNT |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1010 file = Qnil; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1011 GCPRO2 (sound, file); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1012 bzero (&sd, sizeof sd); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1013 bzero (&s, sizeof s); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1014 current_sound_device = &sd; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1015 current_sound = &s; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1016 record_unwind_protect (sound_cleanup, Qnil); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1017 s.header = (char *) alloca (MAX_SOUND_HEADER_BYTES); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1018 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1019 if (STRINGP (attrs[SOUND_FILE])) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1020 { |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1021 /* Open the sound file. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1022 s.fd = openp (Fcons (Vdata_directory, Qnil), |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1023 attrs[SOUND_FILE], Qnil, &file, Qnil); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1024 if (s.fd < 0) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1025 sound_perror ("Could not open sound file"); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1026 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1027 /* Read the first bytes from the file. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1028 s.header_size = emacs_read (s.fd, s.header, MAX_SOUND_HEADER_BYTES); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1029 if (s.header_size < 0) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1030 sound_perror ("Invalid sound file header"); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1031 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1032 else |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1033 { |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1034 s.data = attrs[SOUND_DATA]; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1035 s.header_size = min (MAX_SOUND_HEADER_BYTES, SBYTES (s.data)); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1036 bcopy (SDATA (s.data), s.header, s.header_size); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1037 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1038 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1039 /* Find out the type of sound. Give up if we can't tell. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1040 find_sound_type (&s); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1041 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1042 /* Set up a device. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1043 if (STRINGP (attrs[SOUND_DEVICE])) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1044 { |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1045 int len = SCHARS (attrs[SOUND_DEVICE]); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1046 sd.file = (char *) alloca (len + 1); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1047 strcpy (sd.file, SDATA (attrs[SOUND_DEVICE])); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1048 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1049 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1050 if (INTEGERP (attrs[SOUND_VOLUME])) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1051 sd.volume = XFASTINT (attrs[SOUND_VOLUME]); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1052 else if (FLOATP (attrs[SOUND_VOLUME])) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1053 sd.volume = XFLOAT_DATA (attrs[SOUND_VOLUME]) * 100; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1054 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1055 args[0] = Qplay_sound_functions; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1056 args[1] = sound; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1057 Frun_hook_with_args (2, args); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1058 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1059 /* There is only one type of device we currently support, the VOX |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1060 sound driver. Set up the device interface functions for that |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1061 device. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1062 vox_init (&sd); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1063 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1064 /* Open the device. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1065 sd.open (&sd); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1066 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1067 /* Play the sound. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1068 s.play (&s, &sd); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1069 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1070 /* Close the input file, if any. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1071 if (!STRINGP (s.data)) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1072 { |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1073 emacs_close (s.fd); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1074 s.fd = -1; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1075 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1076 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1077 /* Close the device. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1078 sd.close (&sd); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1079 |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1080 /* Clean up. */ |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1081 current_sound_device = NULL; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1082 current_sound = NULL; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1083 UNGCPRO; |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1084 |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1085 #else /* WINDOWSNT */ |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1086 |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1087 lo_file = Fexpand_file_name (attrs[SOUND_FILE], Qnil); |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1088 len = XSTRING (lo_file)->size; |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1089 psz_file = (char *) alloca (len + 1); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1090 strcpy (psz_file, XSTRING (lo_file)->data); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1091 if (INTEGERP (attrs[SOUND_VOLUME])) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1092 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1093 ui_volume_tmp = XFASTINT (attrs[SOUND_VOLUME]); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1094 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1095 else if (FLOATP (attrs[SOUND_VOLUME])) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1096 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1097 ui_volume_tmp = (unsigned long) XFLOAT_DATA (attrs[SOUND_VOLUME]) * 100; |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1098 } |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1099 /* |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1100 Based on some experiments I have conducted, a value of 100 or less |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1101 for the sound volume is much too low. You cannot even hear it. |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1102 A value of UINT_MAX indicates that you wish for the sound to played |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1103 at the maximum possible volume. A value of UINT_MAX/2 plays the |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1104 sound at 50% maximum volume. Therefore the value passed to do_play_sound |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1105 (and thus to waveOutSetVolume) must be some fraction of UINT_MAX. |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1106 The following code adjusts the user specified volume level appropriately. |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1107 */ |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1108 if ((ui_volume_tmp > 0) && (ui_volume_tmp <= 100)) |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1109 { |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1110 ui_volume = ui_volume_tmp * (UINT_MAX / 100); |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1111 } |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1112 i_result = do_play_sound (psz_file, ui_volume); |
|
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1113 |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1114 #endif /* WINDOWSNT */ |
|
48456
8f7ad3143e4b
Fix spacing and adapt to GNU coding conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
48375
diff
changeset
|
1115 |
|
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1116 unbind_to (count, Qnil); |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1117 return Qnil; |
|
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46554
diff
changeset
|
1118 } |
| 25003 | 1119 |
| 1120 /*********************************************************************** | |
| 1121 Initialization | |
| 1122 ***********************************************************************/ | |
| 1123 | |
| 1124 void | |
| 1125 syms_of_sound () | |
| 1126 { | |
| 1127 QCdevice = intern (":device"); | |
| 1128 staticpro (&QCdevice); | |
| 1129 QCvolume = intern (":volume"); | |
| 1130 staticpro (&QCvolume); | |
| 1131 Qsound = intern ("sound"); | |
| 1132 staticpro (&Qsound); | |
|
25548
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
1133 Qplay_sound_functions = intern ("play-sound-functions"); |
|
df6548ca33fd
(Qplay_sound_functions): Replaces Qplay_sound_hook.
Gerd Moellmann <gerd@gnu.org>
parents:
25003
diff
changeset
|
1134 staticpro (&Qplay_sound_functions); |
| 25003 | 1135 |
|
44399
a399428859ff
(Fplay_sound_internal): Renamed from Fplay_sound.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42754
diff
changeset
|
1136 defsubr (&Splay_sound_internal); |
| 25003 | 1137 } |
| 1138 | |
| 1139 | |
| 1140 void | |
| 1141 init_sound () | |
| 1142 { | |
| 1143 } | |
| 1144 | |
| 1145 #endif /* HAVE_SOUND */ | |
| 52401 | 1146 |
| 1147 /* arch-tag: dd850ad8-0433-4e2c-9cba-b7aeeccc0dbd | |
| 1148 (do not change this comment) */ |
