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