annotate Plugins/Input/amidi-plug/backend-fluidsynth/b-fluidsynth.c @ 1463:47c7695095d4 trunk

[svn] - ok, lets use real URIs here
author nenolod
date Wed, 02 Aug 2006 17:52:07 -0700
parents 705d4c089fce
children daabad781796
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.,
1459
705d4c089fce [svn] Fix postal code.
chainsaw
parents: 1458
diff changeset
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1387
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-fluidsynth.h"
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
22 #include "b-fluidsynth-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 /* 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_fsyn_t amidiplug_cfg_fsyn;
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( "fluidsynth" );
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( "FluidSynth 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 produces audio by sending MIDI events "
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
38 "to FluidSynth, a real-time software synthesizer based "
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
39 "on the SoundFont2 specification (www.fluidsynth.org).\n"
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
40 "Produced audio can be manipulated via player effect "
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
41 "plugins and is processed by chosen ouput plugin.\n"
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
42 "Backend written by Giacomo Lozito.") );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
43 if ( ppos != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
44 *ppos = 2; /* preferred position in backend list */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
45 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
46 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
47
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
48
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
49 gint backend_init( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
50 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
51 /* read configuration options */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
52 i_cfg_read();
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
53
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
54 sc.soundfont_id = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
55 sc.sample_rate = amidiplug_cfg_fsyn.fsyn_synth_samplerate;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
56 sc.settings = new_fluid_settings();
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
57
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
58 fluid_settings_setnum( sc.settings , "synth.sample-rate" , amidiplug_cfg_fsyn.fsyn_synth_samplerate );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
59 if ( amidiplug_cfg_fsyn.fsyn_synth_gain != -1 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
60 fluid_settings_setnum( sc.settings , "synth.gain" , (gdouble)amidiplug_cfg_fsyn.fsyn_synth_gain / 10 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
61 if ( amidiplug_cfg_fsyn.fsyn_synth_poliphony != -1 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
62 fluid_settings_setint( sc.settings , "synth.poliphony" , amidiplug_cfg_fsyn.fsyn_synth_poliphony );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
63 if ( amidiplug_cfg_fsyn.fsyn_synth_reverb == 1 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
64 fluid_settings_setstr( sc.settings , "synth.reverb.active" , "yes" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
65 else if ( amidiplug_cfg_fsyn.fsyn_synth_reverb == 0 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
66 fluid_settings_setstr( sc.settings , "synth.reverb.active" , "no" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
67 if ( amidiplug_cfg_fsyn.fsyn_synth_chorus == 1 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
68 fluid_settings_setstr( sc.settings , "synth.chorus.active" , "yes" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
69 else if ( amidiplug_cfg_fsyn.fsyn_synth_chorus == 0 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
70 fluid_settings_setstr( sc.settings , "synth.chorus.active" , "no" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
71
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
72 sc.synth = new_fluid_synth( sc.settings );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
73
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
74 /* soundfont loader, check if we should load soundfont on backend init */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
75 if ( amidiplug_cfg_fsyn.fsyn_soundfont_load == 0 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
76 i_soundfont_load();
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
77
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
78 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
79 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
80
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
81
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
82 gint backend_cleanup( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
83 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
84 if ( sc.soundfont_id != -1 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
85 fluid_synth_sfunload( sc.synth , sc.soundfont_id , 0 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
86 delete_fluid_synth( sc.synth );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
87 delete_fluid_settings( sc.settings );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
88
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
89 i_cfg_free(); /* free configuration options */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
90
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
91 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
92 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
93
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
94
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
95 gint sequencer_get_port_count( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
96 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
97 /* always return a single port here */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
98 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
99 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
100
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
101
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
102 gint sequencer_start( gchar * midi_fname )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
103 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
104 /* soundfont loader, check if we should load soundfont on first midifile play */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
105 if (( amidiplug_cfg_fsyn.fsyn_soundfont_load == 1 ) && (sc.soundfont_id == -1 ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
106 i_soundfont_load();
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
107
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
108 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
109 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
110
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
111
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
112 gint sequencer_stop( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
113 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
114 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
115 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
116
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
117
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
118 /* activate sequencer client */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
119 gint sequencer_on( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
120 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
121 sc.last_sample_time = 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
122 sc.tick_offset = 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
123
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
124 sc.timer_seq = g_timer_new(); /* create the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
125 sc.timer_sample = g_timer_new(); /* create the sampler timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
126
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
127 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
128 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
129
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
130
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
131 /* shutdown sequencer client */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
132 gint sequencer_off( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
133 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
134 if ( sc.timer_seq != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
135 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
136 g_timer_destroy( sc.timer_seq ); /* destroy the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
137 sc.timer_seq = NULL;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
138 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
139 if ( sc.timer_sample != NULL )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
140 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
141 g_timer_destroy( sc.timer_sample ); /* destroy the sampler timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
142 sc.timer_sample = NULL;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
143 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
144 return 1; /* success */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
145 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
146
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
147
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
148 /* queue set tempo */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
149 gint sequencer_queue_tempo( gint tempo , gint ppq )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
150 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
151 sc.ppq = ppq;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
152 /* sc.cur_tick_per_sec = (gdouble)( ppq * 1000000 ) / (gdouble)tempo; */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
153 sc.cur_microsec_per_tick = (gdouble)tempo / (gdouble)ppq;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
154 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
155 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
156
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
157
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
158 gint sequencer_queue_start( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
159 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
160 g_timer_start( sc.timer_seq ); /* reset the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
161 g_timer_start( sc.timer_sample ); /* reset the sampler timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
162 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
163 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
164
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
165
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
166 gint sequencer_event_init( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
167 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
168 /* common settings for all our events */
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_event_noteon( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
174 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
175 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
176 fluid_synth_noteon( sc.synth ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
177 event->data.d[0] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
178 event->data.d[1] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
179 event->data.d[2] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
180 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
181 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
182
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
183
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
184 gint sequencer_event_noteoff( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
185 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
186 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
187 fluid_synth_noteoff( sc.synth ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
188 event->data.d[0] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
189 event->data.d[1] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
190 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
191 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
192
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
193
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
194 gint sequencer_event_keypress( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
195 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
196 /* KEY PRESSURE events are not handled by FluidSynth sequencer? */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
197 DEBUGMSG( "KEYPRESS EVENT with FluidSynth backend (unhandled)\n" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
198 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
199 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
200 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
201
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
202
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
203 gint sequencer_event_controller( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
204 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
205 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
206 fluid_synth_cc( sc.synth ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
207 event->data.d[0] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
208 event->data.d[1] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
209 event->data.d[2] );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
210 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
211 }
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 gint sequencer_event_pgmchange( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
215 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
216 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
217 fluid_synth_program_change( sc.synth ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
218 event->data.d[0] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
219 event->data.d[1] );
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_chanpress( 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 /* CHANNEL PRESSURE events are not handled by FluidSynth sequencer? */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
227 DEBUGMSG( "CHANPRESS EVENT with FluidSynth backend (unhandled)\n" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
228 i_sleep( event->tick_real );
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_pitchbend( 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 gint pb_value = (((event->data.d[2]) & 0x7f) << 7) | ((event->data.d[1]) & 0x7f);
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
236 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
237 fluid_synth_pitch_bend( sc.synth ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
238 event->data.d[0] ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
239 pb_value );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
240 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
241 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
242
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
243
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
244 gint sequencer_event_sysex( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
245 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
246 DEBUGMSG( "SYSEX EVENT with FluidSynth backend (unhandled)\n" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
247 i_sleep( event->tick_real );
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_tempo( 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 /* sc.cur_tick_per_sec = (gdouble)( sc.ppq * 1000000 ) / (gdouble)event->data.tempo; */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
256 sc.cur_microsec_per_tick = (gdouble)event->data.tempo / (gdouble)sc.ppq;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
257 g_timer_start( sc.timer_seq ); /* reset the sequencer timer */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
258 sc.tick_offset = event->tick_real;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
259 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
260 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
261
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
262
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
263 gint sequencer_event_other( midievent_t * event )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
264 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
265 /* unhandled */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
266 i_sleep( event->tick_real );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
267 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
268 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
269
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
270
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
271 gint sequencer_output( gpointer * buffer , gint * len )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
272 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
273 gdouble current_time = g_timer_elapsed( sc.timer_sample , NULL );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
274 if (( current_time > 0.000500 ) &&
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
275 ( (current_time - sc.last_sample_time) * 1000000 >=
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
276 ((gdouble)amidiplug_cfg_fsyn.fsyn_buffer_size * 1000000 / sc.sample_rate) ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
277 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
278 sc.last_sample_time = g_timer_elapsed( sc.timer_sample , NULL ) - 0.000500;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
279 /* number of samples to get = buffer size + incremental margin */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
280 /* g_print( "buf increment: %i\n" , amidiplug_cfg_fsyn.fsyn_buffer_margin +
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
281 ((gint)sc.last_sample_time / amidiplug_cfg_fsyn.fsyn_buffer_increment) ); */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
282 *len = (amidiplug_cfg_fsyn.fsyn_buffer_size + amidiplug_cfg_fsyn.fsyn_buffer_margin +
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
283 ((gint)sc.last_sample_time / amidiplug_cfg_fsyn.fsyn_buffer_increment) );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
284 *buffer = g_realloc( *buffer , *len * 4 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
285 fluid_synth_write_s16( sc.synth , *len , *buffer , 0 , 2 , *buffer , 1 , 2 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
286 *len = *len * 4; /* return the real buffer size in bytes */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
287 return 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
288 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
289 else
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
290 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
291 G_USLEEP( 500 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
292 return 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
293 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
294 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
295
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 sequencer_output_shut( guint max_tick , gint skip_offset )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
298 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
299 fluid_synth_system_reset( sc.synth ); /* all notes off and channels reset */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
300 return 1;
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
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
304 /* unimplemented, for autonomous audio == FALSE volume is set by the
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
305 output plugin mixer controls and is not handled by input plugins */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
306 gint audio_volume_get( gint * left_volume , gint * right_volume )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
307 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
308 return 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
309 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
310 gint audio_volume_set( gint left_volume , gint right_volume )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
311 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
312 return 0;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
313 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
314
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
315
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
316 gint audio_info_get( gint * channels , gint * bitdepth , gint * samplerate )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
317 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
318 *channels = 2;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
319 *bitdepth = 16; /* always 16 bit, we use fluid_synth_write_s16() */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
320 *samplerate = amidiplug_cfg_fsyn.fsyn_synth_samplerate;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
321 return 1; /* valid information */
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 gboolean audio_check_autonomous( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
326 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
327 return FALSE; /* FluidSynth gives produced audio back to player */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
328 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
329
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
330
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
331
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
332 /* ******************************************************************
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
333 *** INTERNALS ****************************************************
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 void i_sleep( guint tick )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
338 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
339 gdouble elapsed_tick_usecs = (gdouble)(tick - sc.tick_offset) * sc.cur_microsec_per_tick;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
340 gdouble elapsed_seq_usecs = g_timer_elapsed( sc.timer_seq , NULL ) * 1000000;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
341 if ( elapsed_seq_usecs < elapsed_tick_usecs )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
342 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
343 G_USLEEP( elapsed_tick_usecs - elapsed_seq_usecs );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
344 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
345 }
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 void i_soundfont_load( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
349 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
350 if ( strcmp( amidiplug_cfg_fsyn.fsyn_soundfont_file , "" ) )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
351 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
352 DEBUGMSG( "loading soundfont %s\n" , amidiplug_cfg_fsyn.fsyn_soundfont_file );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
353 sc.soundfont_id = fluid_synth_sfload( sc.synth , amidiplug_cfg_fsyn.fsyn_soundfont_file , 0 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
354 if ( sc.soundfont_id == -1 )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
355 g_warning( "unable to load SoundFont file %s\n" , amidiplug_cfg_fsyn.fsyn_soundfont_file );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
356 #ifdef DEBUG
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
357 else
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
358 DEBUGMSG( "soundfont %s successfully loaded\n" , amidiplug_cfg_fsyn.fsyn_soundfont_file );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
359 #endif
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
360 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
361 else
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
362 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
363 g_warning( "FluidSynth backend was selected, but no SoundFont has been specified\n" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
364 sc.soundfont_id = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
365 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
366 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
367
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
368
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
369 gboolean i_bounds_check( gint value , gint min , gint max )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
370 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
371 if (( value >= min ) && ( value <= max ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
372 return TRUE;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
373 else
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
374 return FALSE;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
375 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
376
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
377
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
378 void i_cfg_read( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
379 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
380 pcfg_t *cfgfile;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
381 gchar * config_pathfilename = g_strjoin( "" , g_get_home_dir() , "/" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
382 PLAYER_LOCALRCDIR , "/amidi-plug.conf" , NULL );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
383 cfgfile = i_pcfg_new_from_file( config_pathfilename );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
384
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
385 if ( !cfgfile )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
386 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
387 /* fluidsynth backend defaults */
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
388 amidiplug_cfg_fsyn.fsyn_soundfont_file = g_strdup( "" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
389 amidiplug_cfg_fsyn.fsyn_soundfont_load = 1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
390 amidiplug_cfg_fsyn.fsyn_synth_samplerate = 44100;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
391 amidiplug_cfg_fsyn.fsyn_synth_gain = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
392 amidiplug_cfg_fsyn.fsyn_synth_poliphony = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
393 amidiplug_cfg_fsyn.fsyn_synth_reverb = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
394 amidiplug_cfg_fsyn.fsyn_synth_chorus = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
395 amidiplug_cfg_fsyn.fsyn_buffer_size = 512;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
396 amidiplug_cfg_fsyn.fsyn_buffer_margin = 10;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
397 amidiplug_cfg_fsyn.fsyn_buffer_increment = 18;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
398 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
399 else
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
400 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
401 i_pcfg_read_string( cfgfile , "fsyn" , "fsyn_soundfont_file" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
402 &amidiplug_cfg_fsyn.fsyn_soundfont_file , "" );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
403
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
404 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_soundfont_load" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
405 &amidiplug_cfg_fsyn.fsyn_soundfont_load , 1 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
406
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
407 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_synth_samplerate" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
408 &amidiplug_cfg_fsyn.fsyn_synth_samplerate , 44100 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
409 if ( !i_bounds_check( amidiplug_cfg_fsyn.fsyn_synth_samplerate , 22050 , 96000 ) )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
410 amidiplug_cfg_fsyn.fsyn_synth_samplerate = 44100;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
411
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
412 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_synth_gain" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
413 &amidiplug_cfg_fsyn.fsyn_synth_gain , -1 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
414 if (( amidiplug_cfg_fsyn.fsyn_synth_gain != -1 ) &&
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
415 ( !i_bounds_check( amidiplug_cfg_fsyn.fsyn_synth_gain , 0 , 100 ) ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
416 amidiplug_cfg_fsyn.fsyn_synth_gain = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
417
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
418 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_synth_poliphony" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
419 &amidiplug_cfg_fsyn.fsyn_synth_poliphony , -1 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
420 if (( amidiplug_cfg_fsyn.fsyn_synth_poliphony != -1 ) &&
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
421 ( !i_bounds_check( amidiplug_cfg_fsyn.fsyn_synth_poliphony , 0 , 100 ) ))
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
422 amidiplug_cfg_fsyn.fsyn_synth_poliphony = -1;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
423
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
424 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_synth_reverb" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
425 &amidiplug_cfg_fsyn.fsyn_synth_reverb , -1 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
426
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
427 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_synth_chorus" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
428 &amidiplug_cfg_fsyn.fsyn_synth_chorus , -1 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
429
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
430 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_buffer_size" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
431 &amidiplug_cfg_fsyn.fsyn_buffer_size , 512 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
432 if ( !i_bounds_check( amidiplug_cfg_fsyn.fsyn_buffer_size , 100 , 99999 ) )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
433 amidiplug_cfg_fsyn.fsyn_buffer_size = 512;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
434
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
435 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_buffer_margin" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
436 &amidiplug_cfg_fsyn.fsyn_buffer_margin , 15 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
437 if ( !i_bounds_check( amidiplug_cfg_fsyn.fsyn_buffer_margin , 0 , 100 ) )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
438 amidiplug_cfg_fsyn.fsyn_buffer_margin = 15;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
439
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
440 i_pcfg_read_integer( cfgfile , "fsyn" , "fsyn_buffer_increment" ,
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
441 &amidiplug_cfg_fsyn.fsyn_buffer_increment , 18 );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
442 if ( !i_bounds_check( amidiplug_cfg_fsyn.fsyn_buffer_increment , 6 , 1000 ) )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
443 amidiplug_cfg_fsyn.fsyn_buffer_increment = 18;
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
444
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
445 i_pcfg_free( cfgfile );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
446 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
447
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
448 g_free( config_pathfilename );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
449 }
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
450
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
451
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
452 void i_cfg_free( void )
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
453 {
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
454 g_free( amidiplug_cfg_fsyn.fsyn_soundfont_file );
b0590e16329f [svn] import amidi-plug 0.5
giacomo
parents:
diff changeset
455 }