annotate Plugins/Input/mikmod/drv_xmms.c @ 105:18fe59468510 trunk

[svn] Use header.game, over header.author, as most SPC files do not contain the composer information.
author nenolod
date Wed, 02 Nov 2005 19:33:25 -0800
parents fa848bd484d8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
2 /* MikMod sound library
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3 (c) 1998 Miodrag Vallat and others - see file AUTHORS for complete list
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
4
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
5 This library is free software; you can redistribute it and/or modify
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
6 it under the terms of the GNU Library General Public License as
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
7 published by the Free Software Foundation; either version 2 of
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
8 the License, or (at your option) any later version.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
9
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
13 GNU Library General Public License for more details.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
14
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
15 You should have received a copy of the GNU Library General Public
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
18
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
19 Modified 2/1/99 for xmms by J. Nick Koston (BlueDraco)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
22 /*==============================================================================
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24 $Id: drv_xmms.c,v 1.4 2002/04/27 18:47:08 havard Exp $
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26 Output data to xmms
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28 ==============================================================================*/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30 #ifdef HAVE_CONFIG_H
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
31 #include "config.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34 #ifdef HAVE_UNISTD_H
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 #include <unistd.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37 #include <stdlib.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38 #include "libaudacious/util.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40 #include "mikmod-plugin.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 static int buffer_size;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44 static SBYTE *audiobuffer = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45 extern MIKMODConfig mikmod_cfg;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46 static short audio_open = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47 gboolean mikmod_xmms_audio_error = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48 extern gboolean mikmod_going;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50 static BOOL xmms_IsThere(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52 return 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 static BOOL xmms_Init(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 AFormat fmt;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58 int nch;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60 buffer_size = 512;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61 if (!mikmod_cfg.force8bit)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 buffer_size *= 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 if (!mikmod_cfg.force_mono)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 buffer_size *= 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65 if (!(audiobuffer = (SBYTE *) g_malloc0(buffer_size)))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 return 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 fmt = (md_mode & DMODE_16BITS) ? FMT_S16_NE : FMT_U8;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 nch = (md_mode & DMODE_STEREO) ? 2 : 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 if (audio_open)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72 mikmod_ip.output->close_audio();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 if (!mikmod_ip.output->open_audio(fmt, md_mixfreq, nch))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 mikmod_xmms_audio_error = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 return 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 audio_open = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 return VC_Init();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 static void xmms_Exit(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86 VC_Exit();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 if (audiobuffer)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 g_free(audiobuffer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 audiobuffer = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 if (audio_open)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 mikmod_ip.output->close_audio();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 audio_open = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 static void xmms_Update(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 gint length;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104 length = VC_WriteBytes((SBYTE *) audiobuffer, buffer_size);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105 mikmod_ip.add_vis_pcm(mikmod_ip.output->written_time(), mikmod_cfg.force8bit ? FMT_U8 : FMT_S16_NE, mikmod_cfg.force_mono ? 1 : 2, length, audiobuffer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
106
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
107 while(mikmod_ip.output->buffer_free() < length && mikmod_going)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108 xmms_usleep(10000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109 if(mikmod_going)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 mikmod_ip.output->write_audio(audiobuffer, length);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
112 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
113
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
114 static BOOL xmms_Reset(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 VC_Exit();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117 return VC_Init();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120 MDRIVER drv_xmms =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 "xmms",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124 "xmms output driver v1.0",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 0, 255,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 #if (LIBMIKMOD_VERSION > 0x030106)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127 "xmms",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 xmms_IsThere,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131 VC_SampleLoad,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 VC_SampleUnload,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 VC_SampleSpace,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 VC_SampleLength,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135 xmms_Init,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136 xmms_Exit,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137 xmms_Reset,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138 VC_SetNumVoices,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 VC_PlayStart,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 VC_PlayStop,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 xmms_Update,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
143 VC_VoiceSetVolume,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 VC_VoiceGetVolume,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145 VC_VoiceSetFrequency,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 VC_VoiceGetFrequency,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
147 VC_VoiceSetPanning,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
148 VC_VoiceGetPanning,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
149 VC_VoicePlay,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
150 VC_VoiceStop,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
151 VC_VoiceStopped,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
152 VC_VoiceGetPosition,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153 VC_VoiceRealVolume
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
154
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
155 };