OSDN Git Service

Import UnkoTim212
[timidity41/timidity41.git] / kbtim / _timidity_.c
1
2
3 #include "timidity.c"
4
5
6 //timidity.c \82Å static \82È\83O\83\8d\81[\83o\83\8b\95Ï\90\94\82É\83A\83N\83Z\83X\82·\82é\95K\97v\82ª\82 \82é
7 //timidity.c \82ð\88ê\90Ø\8f\91\82«\8a·\82¦\82È\82¢\82æ\82¤\82É\82·\82é\82½\82ß\82É\82Í\81A\82±\82¤\82·\82é\82µ\82©\82È\82¢\82Æ
8 //\8ev\82í\82ê\82é
9
10 void kbtim_initialize(char *szCfgFile);
11 void kbtim_uninitialize(void);
12 void kbtim_play_midi_file(char *szFileName);
13
14 static void kbtim_start_initialize(void);//timidity_start_initialize \91\8a\93\96
15 static void kbtim_init_player(void);//timidity_init_player \91\8a\93\96
16
17 extern void uninitialize_resampler_coeffs(void);
18 //extern void free_reverb_buffer(void);
19 extern void free_resamp_cache_data(void);
20 extern void free_audio_bucket(void);
21 extern void free_userdrum(void);
22 //extern void free_userdrum2(void);
23 extern void free_soundfonts(void);
24
25
26 void kbtim_start_initialize(void)//timidity_start_initialize \91\8a\93\96
27 {
28     int i;
29     static int drums[] = DEFAULT_DRUMCHANNELS;
30
31     if(!output_text_code){
32             output_text_code = safe_strdup(OUTPUT_TEXT_CODE);
33     }
34     if(!opt_aq_max_buff){
35             opt_aq_max_buff = safe_strdup("5.0");
36     }
37     if(!opt_aq_fill_buff){
38             opt_aq_fill_buff = safe_strdup("100%");
39     }
40     for(i = 0; i < MAX_CHANNELS; i++){
41             memset(&(channel[i]), 0, sizeof(Channel));
42     }
43
44     CLEAR_CHANNELMASK(quietchannels);
45     CLEAR_CHANNELMASK(default_drumchannels);
46
47     for(i = 0; drums[i] > 0; i++){
48             SET_CHANNELMASK(default_drumchannels, drums[i] - 1);
49     }
50     for(i = 16; i < MAX_CHANNELS; i++){
51         if(IS_SET_CHANNELMASK(default_drumchannels, i & 0xF)){
52                 SET_CHANNELMASK(default_drumchannels, i);
53         }
54     }
55     for(i = 0; i < MAX_CHANNELS; i++){
56             default_program[i] = DEFAULT_PROGRAM;
57             memset(channel[i].drums, 0, sizeof(channel[i].drums));
58     }
59     {
60         for(i = 0; url_module_list[i]; i++){
61                 url_add_module(url_module_list[i]);
62         }
63         init_string_table(&opt_config_string);
64             init_freq_table();
65             init_freq_table_tuning();
66         init_freq_table_pytha();
67             init_freq_table_meantone();
68             init_freq_table_pureint();
69             init_freq_table_user();
70             init_bend_fine();
71             init_bend_coarse();
72             init_tables();
73             init_gm2_pan_table();
74             init_attack_vol_table();
75             init_sb_vol_table();
76             init_modenv_vol_table();
77             init_def_vol_table();
78             init_gs_vol_table();
79             init_perceived_vol_table();
80             init_gm2_vol_table();
81         for(i = 0; i < NSPECIAL_PATCH; i++){
82                 special_patch[i] = NULL;
83         }
84             init_midi_trace();
85             int_rand(-1);       // initialize random seed
86             int_rand(42);       // the 1st number generated is not very random
87     }
88 }
89
90 ///r
91 void kbtim_init_player(void)//timidity_init_player \91\8a\93\96
92 {
93     // Allocate voice[]
94     free_voices();
95     safe_free(voice);
96     voice = (Voice*) safe_calloc(max_voices, sizeof(Voice));
97
98     // save defaults 
99     COPY_CHANNELMASK(drumchannels, default_drumchannels);
100     COPY_CHANNELMASK(drumchannel_mask, default_drumchannel_mask);
101         
102         init_output(); // div_playmode_rate
103         init_playmidi();
104         init_mix_c();
105 #ifdef INT_SYNTH
106         init_int_synth();
107 #endif // INT_SYNTH
108 }
109
110 void kbtim_initialize(char *szCfgFile)
111 {
112     char local[1024];
113     kbtim_start_initialize();
114     initialize_resampler_coeffs();
115     //timidity_pre_load_configuration \91\8a\93\96
116     lstrcpyn(local, szCfgFile, sizeof(local));
117 ///r
118         read_config_file(local, 0, READ_CONFIG_SUCCESS);
119
120     //timidity_post_load_configuration \91\8a\93\96
121     if(opt_config_string.nstring > 0){
122             char **config_string_list;
123             config_string_list = make_string_array(&opt_config_string);
124             if(config_string_list != NULL){
125             int i;
126             for(i = 0; config_string_list[i]; i++){
127                 read_config_file(config_string_list[i], 1, READ_CONFIG_SUCCESS); ///r
128                 }
129                 free(config_string_list[0]);
130                 free(config_string_list);
131             }
132     }
133     //
134     kbtim_init_player();
135         init_load_soundfont();  
136 ///r
137         load_all_instrument();
138 #ifdef MULTI_THREAD_COMPUTE
139         begin_compute_thread();
140 #endif
141 }
142
143 void kbtim_uninitialize(void)
144 {
145     int i;
146         
147         //timidity_play_main \82Ì\8cã\8en\96\96
148         free_archive_files();
149         
150         //win_main \82Ì\8cã\8en\96\96
151 #ifdef MULTI_THREAD_COMPUTE
152         terminate_compute_thread();
153 #endif
154         safe_free(pcm_alternate_file);
155         pcm_alternate_file = NULL;
156         safe_free(opt_output_name);
157         opt_output_name = NULL;
158         safe_free(opt_aq_max_buff);
159         opt_aq_max_buff = NULL;
160         safe_free(opt_aq_fill_buff);
161         opt_aq_fill_buff = NULL;
162         safe_free(opt_reduce_voice_threshold);
163         opt_reduce_voice_threshold = NULL;
164         safe_free(opt_reduce_quality_threshold);
165         opt_reduce_quality_threshold = NULL;
166         safe_free(opt_reduce_polyphony_threshold);
167         opt_reduce_polyphony_threshold = NULL;
168         safe_free(output_text_code);
169         output_text_code = NULL;
170         safe_free(wrdt_open_opts);
171         wrdt_open_opts = NULL;
172                 
173         free_soft_queue();
174         free_audio_bucket();
175         free_instruments(0);
176         free_soundfonts();
177         free_cache_data();
178         //freq.c::freq_initialize_fft_arrays \82Å\8am\95Û\82µ\82½\83\81\83\82\83\8a\82Ì\89ð\95ú
179         free_freq_data();
180         free_wrd();
181         free_readmidi();
182         free_playmidi();
183         free_mix_c();
184         free_global_mblock();
185         tmdy_free_config();
186         //free_reverb_buffer();
187         free_effect_buffers();
188 #ifdef INT_SYNTH
189         free_int_synth();
190 #endif // INT_SYNTH
191         free_voices();//free_voice_by_Kobarin() \82Ì\91ã\82í\82è
192     //initialize_resampler_coeffs \82Å\8am\95Û\82µ\82½\83\81\83\82\83\8a\82Ì\89ð\95ú
193     uninitialize_resampler_coeffs();
194
195         for (i = 0; i < MAX_CHANNELS; i++)
196                 free_drum_effect(i);
197 }
198
199 void kbtim_play_midi_file(char *szFileName)
200 {
201          // KbTimDecoder::Open()\82Ì\83\8c\81[\83g\94½\89f
202         init_output(); // div_playmode_rate
203         free_playmidi();
204         init_playmidi();
205         init_mix_c();
206 #ifdef INT_SYNTH
207         init_int_synth();
208 #endif // INT_SYNTH
209     if(!opt_control_ratio){
210             control_ratio = play_mode->rate / CONTROLS_PER_SECOND;
211         if(control_ratio < 1){
212             control_ratio = 1;
213         }
214         else if(control_ratio > MAX_CONTROL_RATIO){
215             control_ratio = MAX_CONTROL_RATIO;
216         }
217     }
218     aq_setup();
219         timidity_init_aq_buff();
220
221     if(allocate_cache_size > 0)
222            resamp_cache_reset();
223
224         if (def_prog >= 0)
225                 set_default_program(def_prog);
226         if (*def_instr_name)
227                 set_default_instrument(def_instr_name);
228
229     play_mode->open_output();
230     play_midi_file(szFileName);
231     aq_flush(1);
232         play_mode->close_output();
233         ctl->close();
234         wrdt->close();
235     if(free_instruments_afterwards){
236         free_instruments(0);
237     }
238     free_all_midi_file_info();//\82±\82ê\82ª\82È\82¢\82Æ\8bÈ\90Ø\82è\91Ö\82¦\8e\9e\82Ì\89\89\91t\82ª\82¨\82©\82µ\82­\82È\82é\81i\81H\81j
239     free_userdrum();          //init_userdrum() \82Å\8am\95Û\82µ\82½\83\81\83\82\83\8a\82Ì\89ð\95ú
240     free_archive_files();
241 }