]> git.pld-linux.org Git - packages/allegro5.git/blame - allegro-alsa9.patch
- added translations from original allegro spec
[packages/allegro5.git] / allegro-alsa9.patch
CommitLineData
3a824aa5 1--- allegro/include/allegro/platform/alunix.h.orig Sun Dec 8 20:11:31 2002
2+++ allegro/include/allegro/platform/alunix.h Sun Jan 26 13:29:31 2003
3@@ -157,6 +157,37 @@
4
5 #endif /* ALLEGRO_WITH_ALSAMIDI */
6
7+#ifdef ALLEGRO_WITH_ALSA9DIGI
8+
9+#define DIGI_ALSA9 AL_ID('A','L','S','9')
10+
11+#ifndef ALLEGRO_WITH_MODULES
12+
13+AL_VAR(DIGI_DRIVER, digi_alsa9);
14+
15+#define DIGI_DRIVER_ALSA9 \
16+ { DIGI_ALSA9, &digi_alsa9, TRUE },
17+
18+#endif
19+
20+#endif /* ALLEGRO_WITH_ALSA9DIGI */
21+
22+
23+#ifdef ALLEGRO_WITH_ALSA9MIDI
24+
25+#define MIDI_ALSA9 AL_ID('A','M','I','9')
26+
27+#ifndef ALLEGRO_WITH_MODULES
28+
29+AL_VAR(MIDI_DRIVER, midi_alsa9);
30+
31+#define MIDI_DRIVER_ALSA9 \
32+ { MIDI_ALSA9, &midi_alsa9, TRUE },
33+
34+#endif
35+
36+#endif /* ALLEGRO_WITH_ALSA9MIDI */
37+
38
39
40 /************************************/
41diff -uNr allegro-4.1.6.old/acconfig.h allegro-4.1.6/acconfig.h
42--- allegro-4.1.6.old/acconfig.h Sat Nov 30 12:13:21 2002
43+++ allegro-4.1.6/acconfig.h Fri Dec 6 17:40:10 2002
44@@ -79,6 +79,12 @@
45 /* Define if ALSA MIDI driver is supported. */
46 #undef ALLEGRO_WITH_ALSAMIDI
47
48+/* Define if ALSA9 DIGI driver is supported. */
49+#undef ALLEGRO_WITH_ALSA9DIGI
50+
51+/* Define if ALSA9 MIDI driver is supported. */
52+#undef ALLEGRO_WITH_ALSA9MIDI
53+
54 /* Define if ESD DIGI driver is supported. */
55 #undef ALLEGRO_WITH_ESDDIGI
56
57diff -uNr allegro-4.1.6.old/aclocal.m4 allegro-4.1.6/aclocal.m4
58--- allegro-4.1.6.old/aclocal.m4 Sat Nov 30 12:13:21 2002
59+++ allegro-4.1.6/aclocal.m4 Fri Dec 6 17:40:10 2002
60@@ -363,6 +363,60 @@
61 fi])
62
63 dnl
64+dnl Test for ALSA9 DIGI driver.
65+dnl
66+dnl Variables:
67+dnl allegro_enable_alsa9digi=(yes|)
68+dnl allegro_cv_support_alsa9digi=(yes|)
69+dnl
70+AC_DEFUN(ALLEGRO_ACTEST_ALSA9DIGI,
71+[AC_ARG_ENABLE(alsa9digi,
72+[ --enable-alsa9digi[=x] enable building ALSA9 DIGI driver [default=yes]],
73+test "X$enableval" != "Xno" && allegro_enable_alsa9digi=yes,
74+allegro_enable_alsa9digi=yes)
75+
76+if test -n "$allegro_enable_alsa9digi"; then
77+ AC_CACHE_CHECK(for supported ALSA9 version for digital sound,
78+ allegro_cv_support_alsa9digi,
79+ AC_TRY_RUN([#include <alsa/asoundlib.h>
80+ int main (void) { return SND_LIB_MAJOR != 0 || SND_LIB_MINOR != 9; }],
81+ allegro_cv_support_alsa9digi=yes,
82+ allegro_cv_support_alsa9digi=no,
83+ allegro_cv_support_alsa9digi=no))
84+ if test "X$allegro_cv_support_alsa9digi" = "Xyes" &&
85+ test -z "$allegro_support_modules"; then
86+ LIBS="-lasound $LIBS"
87+ fi
88+fi])
89+
90+dnl
91+dnl Test for ALSA9 MIDI driver.
92+dnl
93+dnl Variables:
94+dnl allegro_enable_alsa9midi=(yes|)
95+dnl allegro_support_alsa9midi=(yes|)
96+dnl
97+AC_DEFUN(ALLEGRO_ACTEST_ALSA9MIDI,
98+[AC_ARG_ENABLE(alsa9midi,
99+[ --enable-alsa9midi[=x] enable building ALSA9 MIDI driver [default=yes]],
100+test "X$enableval" != "Xno" && allegro_enable_alsa9midi=yes,
101+allegro_enable_alsa9midi=yes)
102+
103+if test -n "$allegro_enable_alsa9midi"; then
104+ AC_CACHE_CHECK(for supported ALSA9 version for MIDI,
105+ allegro_cv_support_alsa9midi,
106+ AC_TRY_RUN([#include <alsa/asoundlib.h>
107+ int main (void) { return SND_LIB_MAJOR != 0 || SND_LIB_MINOR != 9; }],
108+ allegro_cv_support_alsa9midi=yes,
109+ allegro_cv_support_alsa9midi=no,
110+ allegro_cv_support_alsa9midi=no))
111+ if test "X$allegro_cv_support_alsa9midi" = "Xyes" &&
112+ test -z "$allegro_support_modules"; then
113+ LIBS="-lasound $LIBS"
114+ fi
115+fi])
116+
117+dnl
118 dnl Test for ESD DIGI driver.
119 dnl
120 dnl Variables:
121diff -uNr allegro-4.1.6.old/allegro.mft allegro-4.1.6/allegro.mft
122--- allegro-4.1.6.old/allegro.mft Sat Nov 30 12:18:28 2002
123+++ allegro-4.1.6/allegro.mft Fri Dec 6 17:40:10 2002
124@@ -685,6 +685,8 @@
125 allegro/src/unix/
126 allegro/src/unix/alsa.c
127 allegro/src/unix/alsamidi.c
128+allegro/src/unix/alsa9.c
129+allegro/src/unix/alsa9midi.c
130 allegro/src/unix/arts.c
131 allegro/src/unix/sgial.c
132 allegro/src/unix/udjgpp.c
133diff -uNr allegro-4.1.6.old/configure.in allegro-4.1.6/configure.in
134--- allegro-4.1.6.old/configure.in Sat Nov 30 12:13:21 2002
135+++ allegro-4.1.6/configure.in Fri Dec 6 17:40:10 2002
136@@ -304,6 +304,17 @@
137 AC_DEFINE(ALLEGRO_WITH_ALSAMIDI)
138 fi
139
140+dnl Test for ALSA9 drivers.
141+ALLEGRO_ACTEST_ALSA9DIGI
142+if test "$allegro_cv_support_alsa9digi" = yes; then
143+ AC_DEFINE(ALLEGRO_WITH_ALSA9DIGI)
144+fi
145+
146+ALLEGRO_ACTEST_ALSA9MIDI
147+if test "$allegro_cv_support_alsa9midi" = yes; then
148+ AC_DEFINE(ALLEGRO_WITH_ALSA9MIDI)
149+fi
150+
151 dnl Test for ESD drivers.
152 ALLEGRO_ACTEST_ESDDIGI
153 if test -n "$allegro_support_esddigi"; then
154@@ -478,6 +489,16 @@
155 ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-alsamidi.so"
156 fi
157
158+ dnl ALSA9 DIGI.
159+ if test "X$allegro_cv_support_alsa9digi" = "Xyes"; then
160+ ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-alsa9digi.so"
161+ fi
162+
163+ dnl ALSA9 MIDI.
164+ if test "X$allegro_cv_support_alsa9midi" = "Xyes"; then
165+ ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-alsa9midi.so"
166+ fi
167+
168 dnl ESD DIGI.
169 if test "X$allegro_support_esddigi" = "Xyes"; then
170 ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-esddigi.so"
171diff -uNr allegro-4.1.6.old/makefile.in allegro-4.1.6/makefile.in
172--- allegro-4.1.6.old/makefile.in Fri Dec 6 17:39:38 2002
173+++ allegro-4.1.6/makefile.in Fri Dec 6 17:40:10 2002
174@@ -526,6 +526,8 @@
175 $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh dga2 -lXxf86dga $(ALLEGRO_MODULE_DGA2_FILES)' >> makefile.dep
176 $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh alsadigi -lasound $(ALLEGRO_MODULE_ALSADIGI_FILES)' >>makefile.dep
177 $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh alsamidi -lasound $(ALLEGRO_MODULE_ALSAMIDI_FILES)' >>makefile.dep
178+ $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh alsa9digi -lasound $(ALLEGRO_MODULE_ALSA9DIGI_FILES)' >>makefile.dep
179+ $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh alsa9midi -lasound $(ALLEGRO_MODULE_ALSA9MIDI_FILES)' >>makefile.dep
180 $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh esddigi "\`esd-config --libs\`" $(ALLEGRO_MODULE_ESD_FILES)' >>makefile.dep
181 $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh artsdigi "\`artsc-config --libs\`" $(ALLEGRO_MODULE_ARTS_FILES)' >>makefile.dep
182 $(SHELL) -c 'cd $(srcdir) && misc/depmod.sh sgialdigi -laudio $(ALLEGRO_MODULE_SGIAL_FILES)' >>makefile.dep
183diff -uNr allegro-4.1.6.old/makefile.lst allegro-4.1.6/makefile.lst
184--- allegro-4.1.6.old/makefile.lst Sat Nov 30 12:13:21 2002
185+++ allegro-4.1.6/makefile.lst Fri Dec 6 17:40:10 2002
186@@ -268,6 +268,8 @@
187 ALLEGRO_SRC_UNIX_FILES = \
188 src/unix/alsa.c \
189 src/unix/alsamidi.c \
190+ src/unix/alsa9.c \
191+ src/unix/alsa9midi.c \
192 src/unix/arts.c \
193 src/unix/sgial.c \
194 src/unix/udjgpp.c \
195@@ -350,6 +352,12 @@
196 ALLEGRO_MODULE_ALSAMIDI_FILES = \
197 src/unix/alsamidi.c
198
199+ALLEGRO_MODULE_ALSA9DIGI_FILES = \
200+ src/unix/alsa9.c
201+
202+ALLEGRO_MODULE_ALSA9MIDI_FILES = \
203+ src/unix/alsa9midi.c
204+
205 ALLEGRO_MODULE_ESD_FILES = \
206 src/unix/uesd.c
207
208diff -uNr allegro-4.1.6.old/modules.lst allegro-4.1.6/modules.lst
209--- allegro-4.1.6.old/modules.lst Sat Nov 30 12:13:21 2002
210+++ allegro-4.1.6/modules.lst Fri Dec 6 17:40:10 2002
211@@ -9,3 +9,5 @@
212 alleg-sgialdigi.so
213 alleg-alsadigi.so
214 alleg-alsamidi.so
215+alleg-alsa9digi.so
216+alleg-alsa9midi.so
217diff -uNr allegro-4.1.6.old/setup/setup.c allegro-4.1.6/setup/setup.c
218--- allegro-4.1.6.old/setup/setup.c Sat Nov 30 12:13:22 2002
219+++ allegro-4.1.6/setup/setup.c Fri Dec 6 17:42:22 2002
220@@ -234,6 +234,17 @@
221 { "alsa_rawmidi_card", param_int, "", "", NULL, "Card:", NULL, NULL, "ALSA RawMIDI card number" },
222 { "alsa_rawmidi_device",param_int, "", "", NULL, "Dev:", NULL, NULL, "ALSA RawMIDI device number" },
223 #endif
224+
225+ #ifdef DIGI_ALSA9
226+ { "alsa_card", param_int, "", "", NULL, "Card:", NULL, NULL, "ALSA card number" },
227+ { "alsa_pcmdevice", param_int, "", "", NULL, "Dev:", NULL, NULL, "ALSA PCM device number" },
228+ { "alsa_numfrags", param_int, "", "", NULL, "NumFr:", NULL, NULL, "Number of fragments (use 2, other values make little difference)" },
229+ #endif
230+
231+ #ifdef MIDI_ALSA9
232+ { "alsa_rawmidi_card", param_int, "", "", NULL, "Card:", NULL, NULL, "ALSA RawMIDI card number" },
233+ { "alsa_rawmidi_device",param_int, "", "", NULL, "Dev:", NULL, NULL, "ALSA RawMIDI device number" },
234+ #endif
235
236 #ifdef MIDI_BEOS
237 { "be_midi_quality", param_int, "", "1", NULL, "Qual:", NULL, NULL, "BeOS MIDI synthetizer instruments quality (0 = low, 1 = high)" },
238@@ -432,6 +443,16 @@
239 }
240 #endif
241
242+ #ifdef DIGI_ALSA9
243+ case DIGI_ALSA9:
244+ {
245+ static char *param[] = {"flip_pan", "sound_bits", "sound_stereo", "alsa_numfrags", "alsa_card", "alsa_pcmdevice", "sound_freq", "digi_volume", NULL};
246+ digi_cards[c].param = uconvert_static_string_array(param);
247+ digi_cards[c].desc = uconvert_static_string("ALSA Sound System");
248+ break;
249+ }
250+ #endif
251+
252 #ifdef DIGI_BEOS
253 case DIGI_BEOS:
254 {
255@@ -550,6 +571,16 @@
256 {
257 static char *param[] = {"22", "alsa_rawmidi_card", "alsa_rawmidi_device", "", "midi_volume", NULL};
258 midi_cards[c].param = uconvert_static_string_array(param);
259+ midi_cards[c].desc = uconvert_static_string("ALSA RawMIDI");
260+ break;
261+ }
262+ #endif
263+
264+ #ifdef MIDI_ALSA9
265+ case MIDI_ALSA9:
266+ {
267+ static char *param[] = {"22", "alsa_rawmidi_card", "alsa_rawmidi_device", "", "midi_volume", NULL};
268+ midi_cards[c].param = uconvert_static_string_array(param);
269 midi_cards[c].desc = uconvert_static_string("ALSA RawMIDI");
270 break;
271 }
272diff -uNr allegro-4.1.6.old/src/unix/alsa9.c allegro-4.1.6/src/unix/alsa9.c
273--- allegro-4.1.6.old/src/unix/alsa9.c Thu Jan 1 01:00:00 1970
274+++ allegro-4.1.6/src/unix/alsa9.c Mon Oct 28 21:20:48 2002
275@@ -0,0 +1,428 @@
276+/* ______ ___ ___
277+ * /\ _ \ /\_ \ /\_ \
278+ * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___
279+ * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\
280+ * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \
281+ * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
282+ * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
283+ * /\____/
284+ * \_/__/
285+ *
286+ * ALSA 0.9 sound driver.
287+ *
288+ * By Grzegorz Godlewski based on Alsa 0.5, OSS and MPlayer 0.9
289+ *
290+ * See readme.txt for copyright information.
291+ */
292+
293+
294+#include "allegro.h"
295+
296+#if (defined DIGI_ALSA9) && ((!defined ALLEGRO_WITH_MODULES) || (defined ALLEGRO_MODULE))
297+
298+#include "allegro/internal/aintern.h"
299+#ifdef ALLEGRO_QNX
300+#include "allegro/platform/aintqnx.h"
301+#else
302+#include "allegro/platform/aintunix.h"
303+#endif
304+
305+#ifndef SCAN_DEPEND
306+ #include <string.h>
307+ #include <alsa/asoundlib.h>
308+#endif
309+
310+#ifndef SND_PCM_FORMAT_S16_NE
311+ #ifdef ALLEGRO_BIG_ENDIAN
312+ #define SND_PCM_FORMAT_S16_NE SND_PCM_FORMAT_S16_BE
313+ #else
314+ #define SND_PCM_FORMAT_S16_NE SND_PCM_FORMAT_S16_LE
315+ #endif
316+#endif
317+#ifndef SND_PCM_FORMAT_U16_NE
318+ #ifdef ALLEGRO_BIG_ENDIAN
319+ #define SND_PCM_FORMAT_U16_NE SND_PCM_FORMAT_U16_BE
320+ #else
321+ #define SND_PCM_FORMAT_U16_NE SND_PCM_FORMAT_U16_LE
322+ #endif
323+#endif
324+
325+
326+#define ALSA9_DEFAULT_NUMFRAGS 2
327+#define ALSA9_DEFAULT_FRAGSIZE 8192
328+
329+static snd_pcm_t *pcm_handle=NULL;
330+static int alsa9_bufsize;
331+static unsigned char *alsa9_bufdata;
332+static int alsa9_bits, alsa9_signed, alsa9_rate, alsa9_stereo;
333+static int periods,periodsize;
334+
335+static char alsa9_desc[256] = EMPTY_STRING;
336+
337+
338+
339+static int alsa9_detect(int input);
340+static int alsa9_init(int input, int voices);
341+static void alsa9_exit(int input);
342+static int alsa9_mixer_volume(int volume);
343+static int alsa9_buffer_size(void);
344+
345+
346+
347+DIGI_DRIVER digi_alsa9 =
348+{
349+ DIGI_ALSA9,
350+ empty_string,
351+ empty_string,
352+ "ALSA9",
353+ 0,
354+ 0,
355+ MIXER_MAX_SFX,
356+ MIXER_DEF_SFX,
357+
358+ alsa9_detect,
359+ alsa9_init,
360+ alsa9_exit,
361+ alsa9_mixer_volume,
362+
363+ NULL,
364+ NULL,
365+ alsa9_buffer_size,
366+ _mixer_init_voice,
367+ _mixer_release_voice,
368+ _mixer_start_voice,
369+ _mixer_stop_voice,
370+ _mixer_loop_voice,
371+
372+ _mixer_get_position,
373+ _mixer_set_position,
374+
375+ _mixer_get_volume,
376+ _mixer_set_volume,
377+ _mixer_ramp_volume,
378+ _mixer_stop_volume_ramp,
379+
380+ _mixer_get_frequency,
381+ _mixer_set_frequency,
382+ _mixer_sweep_frequency,
383+ _mixer_stop_frequency_sweep,
384+
385+ _mixer_get_pan,
386+ _mixer_set_pan,
387+ _mixer_sweep_pan,
388+ _mixer_stop_pan_sweep,
389+
390+ _mixer_set_echo,
391+ _mixer_set_tremolo,
392+ _mixer_set_vibrato,
393+ 0, 0,
394+ 0,
395+ 0,
396+ 0,
397+ 0,
398+ 0,
399+ 0
400+};
401+
402+
403+
404+/* alsa9_buffer_size:
405+ * Returns the current DMA buffer size, for use by the audiostream code.
406+ */
407+static int alsa9_buffer_size()
408+{
409+ return alsa9_bufsize;
410+}
411+
412+/* alsa9_update:
413+ * Update data.
414+ */
415+static void alsa9_update(int threaded)
416+{
417+ int frames;
418+
419+ if (!pcm_handle) {
420+ printf("alsa-play: device configuration error");
421+ return;
422+ }
423+
424+ frames = periodsize >> ((alsa9_stereo)?3:2);
425+ while (snd_pcm_writei(pcm_handle, alsa9_bufdata, frames) <0)
426+ {
427+ snd_pcm_prepare(pcm_handle);
428+ }
429+ _mix_some_samples((unsigned long) alsa9_bufdata, 0, alsa9_signed);
430+}
431+
432+
433+
434+/* alsa9_detect:
435+ * Detect driver presence.
436+ */
437+static int alsa9_detect(int input)
438+{
439+ snd_pcm_t *handle;
440+ int card, device;
441+ char tmp1[128], tmp2[128];
442+ int ret = FALSE;
443+ snd_pcm_hw_params_t *hwparams;
444+ char pcm_name[128];
445+
446+ card = get_config_int(uconvert_ascii("sound", tmp1),
447+ uconvert_ascii("alsa_card", tmp2),
448+ 0);
449+
450+ device = get_config_int(uconvert_ascii("sound", tmp1),
451+ uconvert_ascii("alsa_pcmdevice", tmp2),
452+ 0);
453+
454+
455+ sprintf(pcm_name,"plughw:%d,%d",card,device);
456+ snd_pcm_hw_params_alloca(&hwparams);
457+
458+ if (!(snd_pcm_open(&handle, pcm_name, SND_PCM_STREAM_PLAYBACK , 0) < 0)) {
459+ if (!(snd_pcm_hw_params_any(handle, hwparams) < 0)) {
460+ ret = TRUE;
461+ }
462+ snd_pcm_close(handle);
463+ }
464+
465+ return ret;
466+}
467+
468+
469+
470+/* alsa9_init:
471+ * ALSA9 init routine.
472+ */
473+static int alsa9_init(int input, int voices)
474+{
475+ int card, device;
476+ int format, bps; //, fragsize, numfrags;
477+ char tmp1[128], tmp2[128];
478+ int exact_rate;
479+ int dir;
480+
481+ snd_pcm_hw_params_t *hwparams;
482+ char pcm_name[128];
483+
484+ if (input) {
485+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Input is not supported"));
486+ return -1;
487+ }
488+
489+ /* Load config. */
490+ card = get_config_int(uconvert_ascii("sound", tmp1),
491+ uconvert_ascii("alsadigi_card", tmp2),
492+ 0); //snd_defaults_card());
493+
494+ device = get_config_int(uconvert_ascii("sound", tmp1),
495+ uconvert_ascii("alsadigi_pcmdevice", tmp2),
496+ 0); //snd_defaults_pcm_device());
497+
498+ periodsize = get_config_int(uconvert_ascii("sound", tmp1),
499+ uconvert_ascii("alsa_fragsize", tmp2),
500+ ALSA9_DEFAULT_FRAGSIZE);
501+
502+ periods = get_config_int(uconvert_ascii("sound", tmp1),
503+ uconvert_ascii("alsa_numfrags", tmp2),
504+ ALSA9_DEFAULT_NUMFRAGS);
505+
506+ sprintf(pcm_name,"plughw:%d,%d",card,device);
507+ snd_pcm_hw_params_alloca(&hwparams);
508+
509+ /* Open PCM device. */
510+ if (snd_pcm_open(&pcm_handle, pcm_name, (SND_PCM_STREAM_PLAYBACK), 0) < 0) {
511+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Can not open card/pcm device"));
512+ goto error;
513+ }
514+
515+ /* Init hwparams with full configuration space */
516+ if (snd_pcm_hw_params_any(pcm_handle, hwparams) < 0) {
517+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Can not configure this PCM device"));
518+ goto error;
519+ }
520+
521+ if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
522+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Error setting access"));
523+ goto error;
524+ }
525+
526+ /* Set format variables. */
527+ alsa9_bits = (_sound_bits == 8) ? 8 : 16;
528+ alsa9_stereo = (_sound_stereo) ? 1 : 0;
529+ alsa9_rate = (_sound_freq > 0) ? _sound_freq : 44100;
530+
531+ format = ((alsa9_bits == 16) ? SND_PCM_FORMAT_S16_NE : SND_PCM_FORMAT_S8);
532+
533+ alsa9_signed = 0;
534+ bps = alsa9_rate * (alsa9_stereo ? 2 : 1);
535+ switch (format) {
536+ case SND_PCM_FORMAT_S8:
537+ alsa9_signed = 1;
538+ case SND_PCM_FORMAT_U8:
539+ alsa9_bits = 8;
540+ break;
541+ case SND_PCM_FORMAT_S16_NE:
542+ alsa9_signed = 1;
543+ case SND_PCM_FORMAT_U16_NE:
544+ alsa9_bits = 16;
545+ bps <<= 1;
546+ if (sizeof(short) != 2) {
547+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported sample format"));
548+ goto error;
549+ }
550+ break;
551+ default:
552+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported sample format"));
553+ goto error;
554+ }
555+
556+ /* Set sample format */
557+ if (snd_pcm_hw_params_set_format(pcm_handle, hwparams, format) < 0) {
558+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Error setting format"));
559+ goto error;
560+ }
561+
562+
563+ /* Set sample rate. If the exact rate is not supported */
564+ /* by the hardware, use nearest possible rate. */
565+ exact_rate=snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, alsa9_rate, &dir);
566+ if (dir!=0)
567+ {
568+ //fprintf(stderr, "The rate %d Hz is not supported by your hardware.\n
569+ // ==> Using %d Hz instead.\n", rate, exact_rate);
570+// ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("The rate is not supported by your hardware"));
571+// goto error;
572+ }
573+
574+ /* Set number of channels */
575+ if (snd_pcm_hw_params_set_channels(pcm_handle, hwparams, (alsa9_stereo) ? 2:1) < 0) {
576+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Error setting channels"));
577+ goto error;
578+ }
579+
580+ /* Set number of numfrags. numfrags used to be called fragments. */
581+ if (snd_pcm_hw_params_set_periods(pcm_handle, hwparams, periods, 0) < 0) {
582+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Error setting numfrags"));
583+ goto error;
584+ }
585+
586+ alsa9_bufsize=(periodsize * periods)>>2;
587+ /* Set buffer size (in frames). The resulting latency is given by */
588+ /* latency = fragsize * numfrags / (rate * bytes_per_frame) */
589+ if (snd_pcm_hw_params_set_buffer_size(pcm_handle, hwparams, alsa9_bufsize) < 0) {
590+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Error setting buffersize"));
591+ goto error;
592+ }
593+
594+ /* Apply HW parameter settings to */
595+ /* PCM device and prepare device */
596+ if (snd_pcm_hw_params(pcm_handle, hwparams) < 0) {
597+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Error setting HW params"));
598+ goto error;
599+ }
600+
601+ alsa9_bufdata = malloc(alsa9_bufsize);
602+
603+ if (!alsa9_bufdata) {
604+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Can not allocate audio buffer"));
605+ goto error;
606+ }
607+
608+ /* Initialise mixer. */
609+ digi_alsa9.voices = voices;
610+
611+ if (_mixer_init(alsa9_bufsize / (alsa9_bits / 8), alsa9_rate,
612+ alsa9_stereo, ((alsa9_bits == 16) ? 1 : 0),
613+ &digi_alsa9.voices) != 0) {
614+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Can not init software mixer"));
615+ goto error;
616+ }
617+
618+ _mix_some_samples((unsigned long) alsa9_bufdata, 0, alsa9_signed);
619+
620+ /* Add audio interrupt. */
621+ _unix_bg_man->register_func(alsa9_update);
622+
623+ uszprintf(alsa9_desc, sizeof(alsa9_desc),
624+ get_config_text("Card #%d, device #%d: %d bits, %s, %d bps, %s"),
625+ card, device, alsa9_bits,
626+ uconvert_ascii((alsa9_signed ? "signed" : "unsigned"), tmp1),
627+ alsa9_rate,
628+ uconvert_ascii((alsa9_stereo ? "stereo" : "mono"), tmp2));
629+
630+ digi_driver->desc = alsa9_desc;
631+ return 0;
632+
633+ error:
634+
635+ if (pcm_handle) {
636+ snd_pcm_close(pcm_handle);
637+ pcm_handle = NULL;
638+ }
639+
640+ return -1;
641+}
642+
643+
644+
645+/* alsa9_exit:
646+ * Shutdown ALSA9 driver.
647+ */
648+static void alsa9_exit(int input)
649+{
650+ if (input) {
651+ return;
652+ }
653+
654+ _unix_bg_man->unregister_func(alsa9_update);
655+
656+ free(alsa9_bufdata);
657+ alsa9_bufdata = NULL;
658+
659+ _mixer_exit();
660+
661+ snd_pcm_close(pcm_handle);
662+}
663+
664+
665+
666+/* alsa9_mixer_volume:
667+ * Set mixer volume (0-255)
668+ */
669+static int alsa9_mixer_volume(int volume)
670+{
671+ /* TODO */
672+#if 0
673+ snd_mixer_t *handle;
674+ int card, device;
675+
676+ if (snd_mixer_open(&handle, card, device) == 0) {
677+ /* do something special */
678+ snd_mixer_close(handle);
679+ return 0;
680+ }
681+
682+ return -1;
683+#else
684+ return 0;
685+#endif
686+}
687+
688+
689+
690+#ifdef ALLEGRO_MODULE
691+
692+/* _module_init:
693+ * Called when loaded as a dynamically linked module.
694+ */
695+void _module_init(int system_driver)
696+{
697+ _unix_register_digi_driver(DIGI_ALSA9, &digi_alsa9, TRUE, TRUE);
698+}
699+
700+#endif
701+
702+#endif
703+
704diff -uNr allegro-4.1.6.old/src/unix/alsa9midi.c allegro-4.1.6/src/unix/alsa9midi.c
705--- allegro-4.1.6.old/src/unix/alsa9midi.c Thu Jan 1 01:00:00 1970
706+++ allegro-4.1.6/src/unix/alsa9midi.c Mon Oct 28 20:51:06 2002
707@@ -0,0 +1,251 @@
708+/* ______ ___ ___
709+ * /\ _ \ /\_ \ /\_ \
710+ * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___
711+ * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\
712+ * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \
713+ * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
714+ * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
715+ * /\____/
716+ * \_/__/
717+ *
718+ * ALSA 0.9 RawMIDI Sound driver.
719+ *
720+ * By Grzegorz Godlewski based on 0.5 version
721+ *
722+ * See readme.txt for copyright information.
723+ */
724+
725+#include "allegro.h"
726+
727+#if (defined MIDI_ALSA9) && ((!defined ALLEGRO_WITH_MODULES) || (defined ALLEGRO_MODULE))
728+
729+#include "allegro/internal/aintern.h"
730+#ifdef ALLEGRO_QNX
731+#include "allegro/platform/aintqnx.h"
732+#else
733+#include "allegro/platform/aintunix.h"
734+#endif
735+
736+#ifndef SCAN_DEPEND
737+ #include <stdlib.h>
738+ #include <stdio.h>
739+ #include <string.h>
740+ #include <errno.h>
741+ #include <sys/asoundlib.h>
742+#endif
743+
744+/* external interface to the ALSA9 rawmidi driver */
745+static int alsa9_rawmidi_detect(int input);
746+static int alsa9_rawmidi_init(int input, int voices);
747+static void alsa9_rawmidi_exit(int input);
748+static void alsa9_rawmidi_output(int data);
749+
750+static char alsa9_rawmidi_desc[256];
751+
752+static snd_rawmidi_t *rawmidi_handle = NULL;
753+
754+MIDI_DRIVER midi_alsa9 =
755+{
756+ MIDI_ALSA9, /* id */
757+ empty_string, /* name */
758+ empty_string, /* desc */
759+ "ALSA9 RawMIDI", /* ASCII name */
760+ 0, 0, 0xFFFF, 0, -1, -1, /* voices, basevoice, max_voices, def_voices, xmin, xmax */
761+ alsa9_rawmidi_detect, /* detect */
762+ alsa9_rawmidi_init, /* init */
763+ alsa9_rawmidi_exit, /* exit */
764+ NULL, /* mixer_volume */
765+ alsa9_rawmidi_output, /* raw_midi */
766+ _dummy_load_patches, /* load_patches */
767+ _dummy_adjust_patches, /* adjust_patches */
768+ _dummy_key_on, /* key_on */
769+ _dummy_noop1, /* key_off */
770+ _dummy_noop2, /* set_volume */
771+ _dummy_noop3, /* set_pitch */
772+ _dummy_noop2, /* set_pan */
773+ _dummy_noop2 /* set_vibrato */
774+};
775+
776+/* alsa9_rawmidi_detect:
777+ * ALSA9 RawMIDI detection.
778+ */
779+static int alsa9_rawmidi_detect(int input)
780+{
781+ int card = -1;
782+ int device = -1;
783+ int ret = FALSE, err;
784+ char tmp1[128], tmp2[128], temp[256];
785+ snd_rawmidi_t *handle = NULL;
786+ char pcm_name[128];
787+
788+ if(input) {
789+ /* Input not supported.
790+ card = get_config_int(uconvert_ascii("sound", tmp1),
791+ uconvert_ascii("alsa_rawmidi_input_card", tmp2),
792+ 0); // snd_defaults_rawmidi_card());
793+
794+ device = get_config_int(uconvert_ascii("sound", tmp1),
795+ uconvert_ascii("alsa_rawmidi_input_device", tmp2),
796+ 0); // snd_defaults_rawmidi_device());
797+
798+ sprintf(pcm_name,"plughw:%d,%d",card,device);
799+ if ((err = snd_rawmidi_open(&handle, NULL,pcm_name, SND_RAWMIDI_OPEN_INPUT)) < 0) {
800+ snprintf(temp, sizeof(temp), "Could not open card/rawmidi device: %s", snd_strerror(err));
801+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text(temp));
802+ ret = FALSE;
803+ }
804+
805+ snd_rawmidi_close(handle);
806+ */
807+ ret = FALSE;
808+
809+ }
810+ else {
811+
812+ card = get_config_int(uconvert_ascii("sound", tmp1),
813+ uconvert_ascii("alsa_rawmidi_card", tmp2),
814+ 0); // snd_defaults_rawmidi_card());
815+
816+ device = get_config_int(uconvert_ascii("sound", tmp1),
817+ uconvert_ascii("alsa_rawmidi_device", tmp2),
818+ 0); // snd_defaults_rawmidi_device());
819+
820+ sprintf(pcm_name,"plughw:%d,%d",card,device);
821+// if ((err = snd_rawmidi_open(NULL,&handle, pcm_name, SND_RAWMIDI_APPEND)) < 0) {
822+ if ((err = snd_rawmidi_open(NULL,&handle, "default", SND_RAWMIDI_APPEND)) < 0) {
823+ snprintf(temp, sizeof(temp), "Could not open card/rawmidi device: %s", snd_strerror(err));
824+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text(temp));
825+ ret = FALSE;
826+ }
827+
828+ snd_rawmidi_close(handle);
829+
830+ ret = TRUE;
831+ }
832+
833+ return ret;
834+}
835+
836+/* alsa9_rawmidi_init:
837+ * Setup the ALSA RawMIDI interface.
838+ */
839+static int alsa9_rawmidi_init(int input, int voices)
840+{
841+ int card = -1;
842+ int device = -1;
843+ int ret = -1, err;
844+ char tmp1[128], tmp2[128], temp[256];
845+// snd_rawmidi_info_t info;
846+ char pcm_name[128];
847+
848+ if(input) {
849+ /* Input not supported
850+ card = get_config_int(uconvert_ascii("sound", tmp1),
851+ uconvert_ascii("alsa_rawmidi_input_card", tmp2),
852+ 0); // snd_defaults_rawmidi_card());
853+
854+ device = get_config_int(uconvert_ascii("sound", tmp1),
855+ uconvert_ascii("alsa_rawmidi_input_device", tmp2),
856+ 0); // snd_defaults_rawmidi_device());
857+
858+ sprintf(pcm_name,"plughw:%d,%d",card,device);
859+ if ((err = snd_rawmidi_open(&rawmidi_handle, NULL,pcm_name, SND_RAWMIDI_OPEN_INPUT)) < 0) {
860+ snprintf(temp, sizeof(temp), "Could not open card/rawmidi device: %s", snd_strerror(err));
861+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text(temp));
862+ ret = -1;
863+ }
864+ */
865+ ret = -1;
866+
867+ }
868+ else {
869+
870+ card = get_config_int(uconvert_ascii("sound", tmp1),
871+ uconvert_ascii("alsa_rawmidi_card", tmp2),
872+ 0); // snd_defaults_rawmidi_card());
873+
874+ device = get_config_int(uconvert_ascii("sound", tmp1),
875+ uconvert_ascii("alsa_rawmidi_device", tmp2),
876+ 0); // snd_defaults_rawmidi_device());
877+
878+ sprintf(pcm_name,"plughw:%d,%d",card,device);
879+
880+// if ((err = snd_rawmidi_open(NULL,&rawmidi_handle, pcm_name, SND_RAWMIDI_APPEND)) < 0) {
881+ if ((err = snd_rawmidi_open(NULL,&rawmidi_handle, "default", SND_RAWMIDI_APPEND)) < 0) {
882+ snprintf(temp, sizeof(temp), "Could not open card/rawmidi device: %s", snd_strerror(err));
883+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text(temp));
884+ ret = -1;
885+ }
886+
887+ ret = 0;
888+ }
889+
890+ if(rawmidi_handle) {
891+ snd_rawmidi_block_mode(rawmidi_handle, 1);
892+// snd_rawmidi_info(rawmidi_handle, &info);
893+
894+// strcpy(alsa9_rawmidi_desc, info.name);
895+// midi_alsa9.desc = alsa9_rawmidi_desc;
896+
897+ LOCK_VARIABLE(alsa9_rawmidi_desc);
898+ LOCK_VARIABLE(rawmidi_handle);
899+ LOCK_VARIABLE(midi_alsa9);
900+ LOCK_FUNCTION(alsa9_rawmidi_output);
901+ }
902+
903+ return ret;
904+}
905+
906+/* alsa9_rawmidi_exit:
907+ * Clean up.
908+ */
909+static void alsa9_rawmidi_exit(int input)
910+{
911+ if(rawmidi_handle) {
912+ snd_rawmidi_output_drain(rawmidi_handle);
913+ snd_rawmidi_close(rawmidi_handle);
914+ }
915+
916+ rawmidi_handle = NULL;
917+}
918+
919+/* alsa9_rawmidi_output:
920+ * Outputs MIDI data.
921+ */
922+static void alsa9_rawmidi_output(int data)
923+{
924+ int err;
925+
926+ err = snd_rawmidi_write(rawmidi_handle, &data, sizeof(char));
927+
928+}
929+END_OF_STATIC_FUNCTION(alsa9_rawmidi_output);
930+
931+/* alsa9_rawmidi_input:
932+ * Reads MIDI data.
933+ * not supported...
934+static INLINE int alsa9_rawmidi_input(void)
935+{
936+ char data = 0;
937+
938+ if(snd_rawmidi_read(rawmidi_handle, &data, sizeof(char)) > 0)
939+ return data;
940+ else
941+ return 0;
942+}
943+*/
944+
945+#ifdef ALLEGRO_MODULE
946+
947+/* _module_init:
948+ * Called when loaded as a dynamically linked module.
949+ */
950+void _module_init(int system_driver)
951+{
952+ _unix_register_midi_driver(MIDI_ALSA9, &midi_alsa9, TRUE, TRUE);
953+}
954+
955+#endif /* ALLEGRO_MODULE */
956+
957+#endif /* MIDI_ALSA9 */
958+
This page took 0.14328 seconds and 4 git commands to generate.