annotate Plugins/Input/amidi-plug/backend-dummy/b-dummy.c @ 1387:b0590e16329f trunk

[svn] import amidi-plug 0.5
author giacomo
date Mon, 10 Jul 2006 04:52:51 -0700
parents
children f12d7e208b43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1387
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
1 /*
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
2 *
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
3 * Author: Giacomo Lozito <james@develia.org>, (C) 2005-2006
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
4 *
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
5 * This program is free software; you can redistribute it and/or modify it
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
6 * under the terms of the GNU General Public License as published by the
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
7 * Free Software Foundation; either version 2 of the License, or (at your
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
8 * option) any later version.
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
9 *
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful, but
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
13 * General Public License for more details.
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
14 *
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License along
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
16 * with this program; if not, write to the Free Software Foundation, Inc.,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
17 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
18 *
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
19 */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
20
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
21 #include "b-dummy.h"
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
22 #include "b-dummy-config.h"
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
23
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
24 /* dummy sequencer instance */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
25 static sequencer_client_t sc;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
26 /* options */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
27 static amidiplug_cfg_dumm_t amidiplug_cfg_dumm;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
28
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
29
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
30 gint backend_info_get( gchar ** name , gchar ** longname , gchar ** desc , gint * ppos )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
31 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
32 if ( name != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
33 *name = g_strdup( "dummy" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
34 if ( longname != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
35 *longname = g_strdup( "Dummy Backend " AMIDIPLUG_VERSION );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
36 if ( desc != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
37 *desc = g_strdup( _("This backend does not produce audio at all. It is mostly "
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
38 "useful for analysis and testing purposes, as it can log "
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
39 "all MIDI events to standard output, standard error or file.\n"
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
40 "Backend written by Giacomo Lozito.") );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
41 if ( ppos != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
42 *ppos = 3; /* preferred position in backend list */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
43 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
44 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
45
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
46
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
47 gint backend_init( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
48 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
49 i_cfg_read(); /* read configuration options */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
50
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
51 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
52 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
53
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
54
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
55 gint backend_cleanup( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
56 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
57 i_cfg_free(); /* free configuration options */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
58
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
59 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
60 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
61
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
62
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
63 gint sequencer_get_port_count( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
64 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
65 return 1; /* always return a single port here */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
66 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
67
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
68
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
69 gint sequencer_start( gchar * midi_fname )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
70 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
71 switch( amidiplug_cfg_dumm.dumm_logger_enable )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
72 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
73 case 1:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
74 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
75 sc.file = stdout; /* log to standard output */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
76 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
77 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
78 case 2:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
79 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
80 sc.file = stderr; /* log to standard error */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
81 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
82 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
83 case 3:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
84 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
85 switch ( amidiplug_cfg_dumm.dumm_logger_lfstyle )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
86 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
87 case 0:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
88 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
89 sc.file = fopen( amidiplug_cfg_dumm.dumm_logger_logfile , "w" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
90 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
91 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
92 case 1:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
93 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
94 sc.file = fopen( amidiplug_cfg_dumm.dumm_logger_logfile , "a" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
95 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
96 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
97 case 2:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
98 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
99 gchar *midi_basefname = G_PATH_GET_BASENAME( midi_fname );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
100 gchar *logfile = g_strjoin( "" , amidiplug_cfg_dumm.dumm_logger_logdir ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
101 "/" , midi_basefname , ".log" , NULL );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
102 sc.file = fopen( logfile , "w" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
103 g_free( logfile );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
104 g_free( midi_basefname );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
105 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
106 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
107 default: /* shouldn't happen, let's handle this anyway */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
108 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
109 sc.file = NULL;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
110 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
111 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
112 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
113 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
114 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
115 case 0:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
116 default:
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
117 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
118 sc.file = NULL;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
119 break;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
120 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
121 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
122
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
123 if (( sc.file == NULL ) && ( amidiplug_cfg_dumm.dumm_logger_enable != 0 ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
124 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
125 DEBUGMSG( "Unable to get a FILE pointer\n" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
126 return 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
127 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
128 else
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
129 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
130 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
131
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
132
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
133 gint sequencer_stop( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
134 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
135 if (( sc.file != NULL ) && ( amidiplug_cfg_dumm.dumm_logger_enable == 3 ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
136 fclose( sc.file );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
137
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
138 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
139 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
140
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
141
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
142 /* activate sequencer client */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
143 gint sequencer_on( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
144 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
145 sc.tick_offset = 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
146 if ( amidiplug_cfg_dumm.dumm_playback_speed == 0 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
147 sc.timer_seq = g_timer_new(); /* create the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
148 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
149 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
150
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
151
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
152 /* shutdown sequencer client */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
153 gint sequencer_off( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
154 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
155 if (( amidiplug_cfg_dumm.dumm_playback_speed == 0 ) && ( sc.timer_seq != NULL ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
156 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
157 g_timer_destroy( sc.timer_seq ); /* destroy the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
158 sc.timer_seq = NULL;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
159 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
160 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
161 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
162
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
163
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
164 /* queue set tempo */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
165 gint sequencer_queue_tempo( gint tempo , gint ppq )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
166 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
167 sc.ppq = ppq;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
168 sc.usec_per_tick = (gdouble)tempo / (gdouble)ppq;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
169 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
170 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
171
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
172
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
173 gint sequencer_queue_start( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
174 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
175 if ( amidiplug_cfg_dumm.dumm_playback_speed == 0 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
176 g_timer_start( sc.timer_seq ); /* reset the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
177 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
178 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
179
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
180
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
181 gint sequencer_event_init( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
182 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
183 /* common settings for all our events */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
184 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
185 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
186
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
187
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
188 gint sequencer_event_noteon( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
189 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
190 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
191 i_printf( sc.file , "NOTEON : ti %i : ch %i : no %i : ve %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
192 event->tick , event->data.d[0] , event->data.d[1] , event->data.d[2] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
193 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
194 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
195
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
196
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
197 gint sequencer_event_noteoff( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
198 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
199 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
200 i_printf( sc.file , "NOTEOFF : ti %i : ch %i : no %i : ve %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
201 event->tick , event->data.d[0] , event->data.d[1] , event->data.d[2] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
202 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
203 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
204
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
205
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
206 gint sequencer_event_keypress( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
207 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
208 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
209 i_printf( sc.file , "KEYPRESS : ti %i : ch %i : no %i : ve %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
210 event->tick , event->data.d[0] , event->data.d[1] , event->data.d[2] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
211 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
212 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
213
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
214
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
215 gint sequencer_event_controller( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
216 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
217 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
218 i_printf( sc.file , "CONTROLLER : ti %i : ch %i : pa %i : va %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
219 event->tick , event->data.d[0] , event->data.d[1] , event->data.d[2] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
220 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
221 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
222
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
223
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
224 gint sequencer_event_pgmchange( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
225 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
226 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
227 i_printf( sc.file , "PGMCHANGE : ti %i : ch %i : va %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
228 event->tick , event->data.d[0] , event->data.d[1] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
229 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
230 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
231
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
232
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
233 gint sequencer_event_chanpress( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
234 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
235 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
236 i_printf( sc.file , "CHANPRESS : ti %i : ch %i : va %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
237 event->tick , event->data.d[0] , event->data.d[1] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
238 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
239 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
240
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
241
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
242 gint sequencer_event_pitchbend( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
243 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
244 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
245 i_printf( sc.file , "PITCHBEND : ti %i : ch %i : va %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
246 event->tick , event->data.d[0] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
247 ((((event->data.d[2]) & 0x7f) << 7) | ((event->data.d[1]) & 0x7f)) );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
248 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
249 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
250
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
251
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
252 gint sequencer_event_sysex( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
253 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
254 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
255 i_printf( sc.file , "SYSEX : ti %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
256 event->tick );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
257 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
258 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
259
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
260
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
261 gint sequencer_event_tempo( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
262 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
263 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
264 i_printf( sc.file , "TEMPOCHANGE : ti %i : va %i\n" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
265 event->tick , event->data.tempo );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
266 sc.usec_per_tick = (gdouble)event->data.tempo / (gdouble)sc.ppq;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
267 if ( amidiplug_cfg_dumm.dumm_playback_speed == 0 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
268 g_timer_start( sc.timer_seq ); /* reset the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
269 sc.tick_offset = event->tick_real;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
270 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
271 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
272
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
273
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
274 gint sequencer_event_other( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
275 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
276 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
277 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
278
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
279
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
280 gint sequencer_output( gpointer * buffer , gint * len )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
281 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
282 return 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
283 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
284
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
285
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
286 gint sequencer_output_shut( guint max_tick , gint skip_offset )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
287 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
288 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
289 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
290
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
291
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
292 /* unimplemented (useless for dummy backend) */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
293 gint audio_volume_get( gint * left_volume , gint * right_volume )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
294 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
295 return 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
296 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
297 gint audio_volume_set( gint left_volume , gint right_volume )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
298 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
299 return 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
300 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
301
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
302
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
303 gint audio_info_get( gint * channels , gint * bitdepth , gint * samplerate )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
304 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
305 /* not applicable for dummy backend */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
306 *channels = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
307 *bitdepth = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
308 *samplerate = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
309 return 0; /* not valid information */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
310 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
311
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
312
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
313 gboolean audio_check_autonomous( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
314 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
315 return TRUE; /* Dummy deals itself with audio (well, it doesn't produce any at all :)) */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
316 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
317
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
318
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
319
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
320 /* ******************************************************************
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
321 *** INTERNALS ****************************************************
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
322 ****************************************************************** */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
323
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
324
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
325 void i_sleep( guint tick )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
326 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
327 if ( amidiplug_cfg_dumm.dumm_playback_speed == 0 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
328 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
329 gdouble elapsed_tick_usecs = (gdouble)(tick - sc.tick_offset) * sc.usec_per_tick;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
330 gdouble elapsed_seq_usecs = g_timer_elapsed( sc.timer_seq , NULL ) * 1000000;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
331 if ( elapsed_seq_usecs < elapsed_tick_usecs )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
332 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
333 G_USLEEP( elapsed_tick_usecs - elapsed_seq_usecs );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
334 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
335 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
336 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
337
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
338
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
339 void i_printf( FILE * fp , const gchar * format , ... )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
340 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
341 va_list args;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
342 va_start( args , format );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
343 if ( fp != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
344 G_VFPRINTF( fp , format , args );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
345 va_end( args );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
346 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
347
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
348
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
349 void i_cfg_read( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
350 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
351 pcfg_t *cfgfile;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
352 gchar * def_logfile = g_strjoin( "" , g_get_home_dir() , "/amidi-plug.log" , NULL );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
353 gchar * def_logdir = (gchar*)g_get_home_dir();
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
354 gchar * config_pathfilename = g_strjoin( "" , g_get_home_dir() , "/" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
355 PLAYER_LOCALRCDIR , "/amidi-plug.conf" , NULL );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
356 cfgfile = i_pcfg_new_from_file( config_pathfilename );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
357
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
358 if ( !cfgfile )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
359 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
360 /* fluidsynth backend defaults */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
361 amidiplug_cfg_dumm.dumm_logger_enable = 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
362 amidiplug_cfg_dumm.dumm_logger_lfstyle = 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
363 amidiplug_cfg_dumm.dumm_playback_speed = 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
364 amidiplug_cfg_dumm.dumm_logger_logfile = g_strdup( def_logfile );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
365 amidiplug_cfg_dumm.dumm_logger_logdir = g_strdup( def_logdir );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
366 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
367 else
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
368 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
369 i_pcfg_read_integer( cfgfile , "dumm" , "dumm_logger_enable" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
370 &amidiplug_cfg_dumm.dumm_logger_enable , 0 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
371 i_pcfg_read_integer( cfgfile , "dumm" , "dumm_logger_lfstyle" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
372 &amidiplug_cfg_dumm.dumm_logger_lfstyle , 0 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
373 i_pcfg_read_integer( cfgfile , "dumm" , "dumm_playback_speed" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
374 &amidiplug_cfg_dumm.dumm_playback_speed , 0 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
375 i_pcfg_read_string( cfgfile , "dumm" , "dumm_logger_logfile" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
376 &amidiplug_cfg_dumm.dumm_logger_logfile , def_logfile );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
377 i_pcfg_read_string( cfgfile , "dumm" , "dumm_logger_logdir" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
378 &amidiplug_cfg_dumm.dumm_logger_logdir , def_logdir );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
379
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
380 i_pcfg_free( cfgfile );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
381 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
382
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
383 g_free( config_pathfilename );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
384 g_free( def_logfile );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
385 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
386
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
387
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
388 void i_cfg_free( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
389 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
390 g_free( amidiplug_cfg_dumm.dumm_logger_logfile );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
391 g_free( amidiplug_cfg_dumm.dumm_logger_logdir );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
392 }