annotate music2/music.cc @ 66:d112357a0ec1

Fix a bug with savegames introduced with changeset c7bcc0ec2267. Warning: savegames created since c7bcc0ec2267 are probably corrupted, you may have to start the game over. If you chose not to do so, you should replace all occurrences of 'TextWindow' by 'TextImplWindow', and 'Text Window' by 'TextImpl Window' in your save files.
author Thibaut Girka <thib@sitedethib.com>
date Sat, 11 Dec 2010 18:36:20 +0100
parents 4416cfac86ae
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
223b71206888 Initial import
thib
parents:
diff changeset
1 /*
223b71206888 Initial import
thib
parents:
diff changeset
2 * Copyright (c) 2004-2006 Kazunori "jagarl" Ueno
223b71206888 Initial import
thib
parents:
diff changeset
3 * All rights reserved.
223b71206888 Initial import
thib
parents:
diff changeset
4 *
223b71206888 Initial import
thib
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
223b71206888 Initial import
thib
parents:
diff changeset
6 * modification, are permitted provided that the following conditions
223b71206888 Initial import
thib
parents:
diff changeset
7 * are met:
223b71206888 Initial import
thib
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
223b71206888 Initial import
thib
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
223b71206888 Initial import
thib
parents:
diff changeset
10 * 2. Redistributions in binary form must reproduce the above copyright
223b71206888 Initial import
thib
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer in the
223b71206888 Initial import
thib
parents:
diff changeset
12 * documentation and/or other materials provided with the distribution.
223b71206888 Initial import
thib
parents:
diff changeset
13 * 3. The name of the author may not be used to endorse or promote products
223b71206888 Initial import
thib
parents:
diff changeset
14 * derived from this software without specific prior written permission.
223b71206888 Initial import
thib
parents:
diff changeset
15 *
223b71206888 Initial import
thib
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
223b71206888 Initial import
thib
parents:
diff changeset
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
223b71206888 Initial import
thib
parents:
diff changeset
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
223b71206888 Initial import
thib
parents:
diff changeset
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
223b71206888 Initial import
thib
parents:
diff changeset
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
223b71206888 Initial import
thib
parents:
diff changeset
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
223b71206888 Initial import
thib
parents:
diff changeset
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
223b71206888 Initial import
thib
parents:
diff changeset
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
223b71206888 Initial import
thib
parents:
diff changeset
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
223b71206888 Initial import
thib
parents:
diff changeset
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
223b71206888 Initial import
thib
parents:
diff changeset
26 */
223b71206888 Initial import
thib
parents:
diff changeset
27
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
28 /* music.cc SDL_mixer を用いた音楽再生ルーチン */
0
223b71206888 Initial import
thib
parents:
diff changeset
29
223b71206888 Initial import
thib
parents:
diff changeset
30
223b71206888 Initial import
thib
parents:
diff changeset
31 #include <string.h>
223b71206888 Initial import
thib
parents:
diff changeset
32 #include <stdio.h>
223b71206888 Initial import
thib
parents:
diff changeset
33 #include <unistd.h>
223b71206888 Initial import
thib
parents:
diff changeset
34 #include <fcntl.h>
223b71206888 Initial import
thib
parents:
diff changeset
35 #include <ctype.h>
223b71206888 Initial import
thib
parents:
diff changeset
36 #include <signal.h>
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
37 #include "system/system_config.h"
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
38 #include "system/file.h"
0
223b71206888 Initial import
thib
parents:
diff changeset
39 #include "music.h"
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
40 #include <SDL.h>
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
41 #include <SDL_mixer.h>
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
42 #include "wavfile.h"
0
223b71206888 Initial import
thib
parents:
diff changeset
43
223b71206888 Initial import
thib
parents:
diff changeset
44 using namespace std;
223b71206888 Initial import
thib
parents:
diff changeset
45
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
46 MuSys * MuSys::_singleton = NULL;
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
47
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
48 MuSys* MuSys::GetInstance(void)
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
49 {
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
50 if (_singleton == NULL)
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
51 _singleton = new MuSys;
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
52 return _singleton;
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
53 }
0
223b71206888 Initial import
thib
parents:
diff changeset
54
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
55 void MuSys::Quit(void)
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
56 {
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
57 if (_singleton != NULL) {
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
58 _singleton->FinalizeMusic();
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
59 delete _singleton;
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
60 _singleton = NULL;
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
61 }
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
62 }
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
63
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
64 MuSys::MuSys() : movie_id(-1), music_enable(1) {
0
223b71206888 Initial import
thib
parents:
diff changeset
65 int i;
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
66 config = AyuSysConfig::GetInstance();
0
223b71206888 Initial import
thib
parents:
diff changeset
67 for (i=0; i<MIX_PCM_SIZE; i++)
223b71206888 Initial import
thib
parents:
diff changeset
68 play_chunk[i] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
69 cdrom_track[0] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
70 effec_track[0] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
71 }
223b71206888 Initial import
thib
parents:
diff changeset
72
223b71206888 Initial import
thib
parents:
diff changeset
73
223b71206888 Initial import
thib
parents:
diff changeset
74 // #define delete fprintf(stderr,"smus.cc: %d.",__LINE__), delete
223b71206888 Initial import
thib
parents:
diff changeset
75
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
76 void bgm_start(const char* path, int loop_pt);
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
77 void effec_start(int chn, const char* path, int loop, int fadein_time);
0
223b71206888 Initial import
thib
parents:
diff changeset
78 void bgm_fadeout(int time);
223b71206888 Initial import
thib
parents:
diff changeset
79
223b71206888 Initial import
thib
parents:
diff changeset
80 void MuSys::PlayCDROM(char* name, int play_count) {
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
81 config->GetParam("#VOLMOD", 4, &volmod[0], &volmod[1], &volmod[2], &volmod[3]);
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
82
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
83 char wave[128];
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
84 wave[127] = '\0';
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
85 wave[0] = '\0';
0
223b71206888 Initial import
thib
parents:
diff changeset
86
223b71206888 Initial import
thib
parents:
diff changeset
87 strcpy(cdrom_track, name);
223b71206888 Initial import
thib
parents:
diff changeset
88
223b71206888 Initial import
thib
parents:
diff changeset
89 StopCDROM(0);
223b71206888 Initial import
thib
parents:
diff changeset
90 strcpy(cdrom_track, name);
223b71206888 Initial import
thib
parents:
diff changeset
91
223b71206888 Initial import
thib
parents:
diff changeset
92 /* name -> track */
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
93 int track =config->track_name.CDTrack(name);
0
223b71206888 Initial import
thib
parents:
diff changeset
94 if (track == -1) track = atoi(name);
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
95 if (config->track_name.WaveTrack(name) != NULL)
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
96 strncpy(wave, config->track_name.WaveTrack(name), 127);
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
97 if (wave[0] == 0 && track != 0) { /* DSTRACK が見つからない場合、CDTRACKを使用する */
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
98 sprintf(wave, "audio_%02d", track);
0
223b71206888 Initial import
thib
parents:
diff changeset
99 }
223b71206888 Initial import
thib
parents:
diff changeset
100 if (wave == 0) return;
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
101 // BGM 再生
0
223b71206888 Initial import
thib
parents:
diff changeset
102 if (!pcm_enable) return;
223b71206888 Initial import
thib
parents:
diff changeset
103 if (play_count == 0)
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
104 bgm_start(wave, -1);
0
223b71206888 Initial import
thib
parents:
diff changeset
105 else
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
106 bgm_start(wave, config->track_name.TrackStart(name));
0
223b71206888 Initial import
thib
parents:
diff changeset
107 return;
223b71206888 Initial import
thib
parents:
diff changeset
108 }
223b71206888 Initial import
thib
parents:
diff changeset
109
223b71206888 Initial import
thib
parents:
diff changeset
110 void MuSys::StopCDROM(int time)
223b71206888 Initial import
thib
parents:
diff changeset
111 {
223b71206888 Initial import
thib
parents:
diff changeset
112 cdrom_track[0] = '\0';
223b71206888 Initial import
thib
parents:
diff changeset
113 if (!pcm_enable) return;
223b71206888 Initial import
thib
parents:
diff changeset
114 bgm_fadeout(time);
223b71206888 Initial import
thib
parents:
diff changeset
115 }
223b71206888 Initial import
thib
parents:
diff changeset
116
223b71206888 Initial import
thib
parents:
diff changeset
117 void MuSys::PlaySE(const char* se, int loop_flag, int channel) {
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
118 if (!pcm_enable) return;
0
223b71206888 Initial import
thib
parents:
diff changeset
119 if (loop_flag)
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
120 effec_start(MIX_PCM_EFFEC, se, 10000, 0);
0
223b71206888 Initial import
thib
parents:
diff changeset
121 else
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
122 effec_start(MIX_PCM_EFFEC, se, 0, 0);
0
223b71206888 Initial import
thib
parents:
diff changeset
123 return;
223b71206888 Initial import
thib
parents:
diff changeset
124 }
223b71206888 Initial import
thib
parents:
diff changeset
125 void MuSys::PlaySE(int number) {
223b71206888 Initial import
thib
parents:
diff changeset
126 if (! pcm_enable) return;
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
127 const char* se_name = config->track_name.SETrack(number);
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
128 if (se_name == NULL) return;
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
129 effec_start(MIX_PCM_EFFEC, se_name, 0, 0);
0
223b71206888 Initial import
thib
parents:
diff changeset
130 return;
223b71206888 Initial import
thib
parents:
diff changeset
131 }
223b71206888 Initial import
thib
parents:
diff changeset
132 void MuSys::StopSE(int time) {
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
133 if (!pcm_enable) return;
0
223b71206888 Initial import
thib
parents:
diff changeset
134 if (time == 0)
223b71206888 Initial import
thib
parents:
diff changeset
135 Mix_HaltChannel(MIX_PCM_EFFEC);
223b71206888 Initial import
thib
parents:
diff changeset
136 else
223b71206888 Initial import
thib
parents:
diff changeset
137 Mix_FadeOutChannel(MIX_PCM_EFFEC, time);
223b71206888 Initial import
thib
parents:
diff changeset
138 }
223b71206888 Initial import
thib
parents:
diff changeset
139 bool MuSys::IsStopSE(void) {
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
140 if (!pcm_enable) return true;
0
223b71206888 Initial import
thib
parents:
diff changeset
141 if (Mix_Playing(MIX_PCM_EFFEC) != 0) return false;
223b71206888 Initial import
thib
parents:
diff changeset
142 return true;
223b71206888 Initial import
thib
parents:
diff changeset
143 }
223b71206888 Initial import
thib
parents:
diff changeset
144
223b71206888 Initial import
thib
parents:
diff changeset
145 void MuSys::StopKoe(int time) {
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
146 if (!pcm_enable) return;
0
223b71206888 Initial import
thib
parents:
diff changeset
147 if (time == 0) Mix_HaltChannel(MIX_PCM_KOE);
223b71206888 Initial import
thib
parents:
diff changeset
148 else Mix_FadeOutChannel(MIX_PCM_KOE, time);
223b71206888 Initial import
thib
parents:
diff changeset
149 }
223b71206888 Initial import
thib
parents:
diff changeset
150
223b71206888 Initial import
thib
parents:
diff changeset
151 void MuSys::InitMusic(void)
223b71206888 Initial import
thib
parents:
diff changeset
152 {
223b71206888 Initial import
thib
parents:
diff changeset
153 if (music_enable != 1) return;
223b71206888 Initial import
thib
parents:
diff changeset
154 cdrom_track[0] = '\0';
223b71206888 Initial import
thib
parents:
diff changeset
155 if ( Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, DEFAULT_AUDIOBUF ) < 0 ){
223b71206888 Initial import
thib
parents:
diff changeset
156 // if ( Mix_OpenAudio( 48000, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, DEFAULT_AUDIOBUF ) < 0 ){
223b71206888 Initial import
thib
parents:
diff changeset
157 return;
223b71206888 Initial import
thib
parents:
diff changeset
158 }
223b71206888 Initial import
thib
parents:
diff changeset
159 int freq, channels; Uint16 format;
223b71206888 Initial import
thib
parents:
diff changeset
160 if ( Mix_QuerySpec(&freq, &format, &channels) ) {
223b71206888 Initial import
thib
parents:
diff changeset
161 WAVFILE::freq = freq;
223b71206888 Initial import
thib
parents:
diff changeset
162 WAVFILE::format = format;
223b71206888 Initial import
thib
parents:
diff changeset
163 WAVFILE::channels = channels;
223b71206888 Initial import
thib
parents:
diff changeset
164 }
223b71206888 Initial import
thib
parents:
diff changeset
165 pcm_enable = 1;
223b71206888 Initial import
thib
parents:
diff changeset
166 Mix_AllocateChannels( MIX_PCM_SIZE);
223b71206888 Initial import
thib
parents:
diff changeset
167 music_enable = 2;
223b71206888 Initial import
thib
parents:
diff changeset
168 }
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
169
0
223b71206888 Initial import
thib
parents:
diff changeset
170 void MuSys::FinalizeMusic(void)
223b71206888 Initial import
thib
parents:
diff changeset
171 {
223b71206888 Initial import
thib
parents:
diff changeset
172 if (music_enable != 2) return;
223b71206888 Initial import
thib
parents:
diff changeset
173 int i;
223b71206888 Initial import
thib
parents:
diff changeset
174 for (i=0; i<MIX_PCM_SIZE; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
175 Mix_HaltChannel(i);
223b71206888 Initial import
thib
parents:
diff changeset
176 if (play_chunk[i]) {
223b71206888 Initial import
thib
parents:
diff changeset
177 Mix_FreeChunk(play_chunk[i]);
223b71206888 Initial import
thib
parents:
diff changeset
178 }
223b71206888 Initial import
thib
parents:
diff changeset
179 play_chunk[i] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
180 }
223b71206888 Initial import
thib
parents:
diff changeset
181 Mix_HaltMusic();
223b71206888 Initial import
thib
parents:
diff changeset
182 Mix_HookMusic(0,0);
223b71206888 Initial import
thib
parents:
diff changeset
183 Mix_CloseAudio();
223b71206888 Initial import
thib
parents:
diff changeset
184 pcm_enable = 0;
223b71206888 Initial import
thib
parents:
diff changeset
185 music_enable = 1;
223b71206888 Initial import
thib
parents:
diff changeset
186 }
223b71206888 Initial import
thib
parents:
diff changeset
187
223b71206888 Initial import
thib
parents:
diff changeset
188 /*************************************************************************
223b71206888 Initial import
thib
parents:
diff changeset
189 **
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
190 ** ファイル読み込み / 外部コマンド呼び出し
0
223b71206888 Initial import
thib
parents:
diff changeset
191 */
223b71206888 Initial import
thib
parents:
diff changeset
192
223b71206888 Initial import
thib
parents:
diff changeset
193 struct WavChunk {
223b71206888 Initial import
thib
parents:
diff changeset
194 WAVFILE* wav;
223b71206888 Initial import
thib
parents:
diff changeset
195 int loop_pt;
26
f45da03ca631 * Corrected --disable-vorbis in configure.ac
thib
parents: 18
diff changeset
196 int *volmod;
0
223b71206888 Initial import
thib
parents:
diff changeset
197 static void callback(void* userdata, Uint8* stream, int len);
223b71206888 Initial import
thib
parents:
diff changeset
198 };
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
199
0
223b71206888 Initial import
thib
parents:
diff changeset
200 WavChunk wav_playing;
223b71206888 Initial import
thib
parents:
diff changeset
201 static int fadetime_total;
223b71206888 Initial import
thib
parents:
diff changeset
202 static int fadecount;
223b71206888 Initial import
thib
parents:
diff changeset
203
223b71206888 Initial import
thib
parents:
diff changeset
204 void WavChunk::callback(void *userdata, Uint8 *stream, int len)
223b71206888 Initial import
thib
parents:
diff changeset
205 {
223b71206888 Initial import
thib
parents:
diff changeset
206 WavChunk* chunk = (WavChunk*)userdata;
223b71206888 Initial import
thib
parents:
diff changeset
207 int count;
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
208 if (chunk->loop_pt == -2) { // 再生終了後
0
223b71206888 Initial import
thib
parents:
diff changeset
209 memset(stream, 0, len);
223b71206888 Initial import
thib
parents:
diff changeset
210 return;
223b71206888 Initial import
thib
parents:
diff changeset
211 }
37
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
212
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
213 char* stream_dup = new char[len];
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
214 count = chunk->wav->Read( (char*)stream_dup, 4, len/4);
0
223b71206888 Initial import
thib
parents:
diff changeset
215
223b71206888 Initial import
thib
parents:
diff changeset
216 if (count != len/4) {
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
217 // 最後まで再生した
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
218 if (chunk->loop_pt == -1) { // 終了
0
223b71206888 Initial import
thib
parents:
diff changeset
219 chunk->loop_pt = -2;
37
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
220 memset(stream_dup+count*4, 0, len-count*4);
0
223b71206888 Initial import
thib
parents:
diff changeset
221 } else {
223b71206888 Initial import
thib
parents:
diff changeset
222 chunk->wav->Seek(chunk->loop_pt);
37
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
223 chunk->wav->Read( (char*)(stream_dup+count*4), 4, len/4-count);
0
223b71206888 Initial import
thib
parents:
diff changeset
224 }
223b71206888 Initial import
thib
parents:
diff changeset
225 }
3
c4af1e9ab8d1 music volume can be changed (harcorded constant atm)
thib
parents: 0
diff changeset
226
26
f45da03ca631 * Corrected --disable-vorbis in configure.ac
thib
parents: 18
diff changeset
227 int cur_vol = (*chunk->volmod)*SDL_MIX_MAXVOLUME/255;
3
c4af1e9ab8d1 music volume can be changed (harcorded constant atm)
thib
parents: 0
diff changeset
228
0
223b71206888 Initial import
thib
parents:
diff changeset
229 if (fadetime_total) {
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
230 // 音楽を停止中 (fade out)
0
223b71206888 Initial import
thib
parents:
diff changeset
231 int count_total = fadetime_total*(WAVFILE::freq/1000);
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
232 if (fadecount > count_total || fadetime_total == 1) { // 音楽停止
0
223b71206888 Initial import
thib
parents:
diff changeset
233 chunk->loop_pt = -2;
223b71206888 Initial import
thib
parents:
diff changeset
234 memset(stream, 0, len);
37
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
235 delete[] stream_dup;
0
223b71206888 Initial import
thib
parents:
diff changeset
236 return;
223b71206888 Initial import
thib
parents:
diff changeset
237 }
3
c4af1e9ab8d1 music volume can be changed (harcorded constant atm)
thib
parents: 0
diff changeset
238 cur_vol = cur_vol*(count_total-fadecount)/count_total;
0
223b71206888 Initial import
thib
parents:
diff changeset
239 fadecount += len/4;
223b71206888 Initial import
thib
parents:
diff changeset
240 }
37
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
241
3
c4af1e9ab8d1 music volume can be changed (harcorded constant atm)
thib
parents: 0
diff changeset
242 SDL_MixAudio(stream, (Uint8*)stream_dup, len, cur_vol);
7
fa8511a21d05 Fixes somes memory leaks
thib
parents: 3
diff changeset
243 delete[] stream_dup;
37
f88d47a4bf87 * Modernize configure.ac
thib
parents: 26
diff changeset
244
0
223b71206888 Initial import
thib
parents:
diff changeset
245 return;
223b71206888 Initial import
thib
parents:
diff changeset
246 }
223b71206888 Initial import
thib
parents:
diff changeset
247 void bgm_fadeout(int time) {
223b71206888 Initial import
thib
parents:
diff changeset
248 fadecount = 0;
223b71206888 Initial import
thib
parents:
diff changeset
249 if (time <= 0) time = 1;
223b71206888 Initial import
thib
parents:
diff changeset
250 fadetime_total = time;
223b71206888 Initial import
thib
parents:
diff changeset
251 }
223b71206888 Initial import
thib
parents:
diff changeset
252
223b71206888 Initial import
thib
parents:
diff changeset
253 static SDL_RWops* OpenSDLRW(const char* path);
223b71206888 Initial import
thib
parents:
diff changeset
254 static WAVFILE* OpenWaveFile(const char* path);
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
255 void bgm_start(const char* path, int loop_pt) {
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
256 MuSys* mu = MuSys::GetInstance();
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
257
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
258 if (!mu->pcm_enable) return;
0
223b71206888 Initial import
thib
parents:
diff changeset
259 fprintf(stderr,"bgm start %s\n",path);
223b71206888 Initial import
thib
parents:
diff changeset
260 WAVFILE* wav = OpenWaveFile(path);
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
261 if (wav == NULL) return;
0
223b71206888 Initial import
thib
parents:
diff changeset
262 Mix_PauseMusic();
223b71206888 Initial import
thib
parents:
diff changeset
263 Mix_HaltMusic();
223b71206888 Initial import
thib
parents:
diff changeset
264 Mix_HookMusic(0,0);
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
265 /* 前に再生していたのを終了 */
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
266 if (wav_playing.wav != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
267 delete wav_playing.wav;
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
268 wav_playing.wav = NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
269 }
223b71206888 Initial import
thib
parents:
diff changeset
270 wav_playing.wav = wav;
223b71206888 Initial import
thib
parents:
diff changeset
271 wav_playing.loop_pt = loop_pt;
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
272 wav_playing.volmod = mu->volmod;
0
223b71206888 Initial import
thib
parents:
diff changeset
273 fadetime_total = 0;
223b71206888 Initial import
thib
parents:
diff changeset
274 fadecount = 0;
223b71206888 Initial import
thib
parents:
diff changeset
275 Mix_HookMusic( &(WavChunk::callback), (void*)&wav_playing);
223b71206888 Initial import
thib
parents:
diff changeset
276 }
223b71206888 Initial import
thib
parents:
diff changeset
277
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
278 void effec_start(int chn, const char* path, int loop, int fadein_time) {
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
279 MuSys* mu = MuSys::GetInstance();
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
280
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
281 if (!mu->pcm_enable) return;
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
282
0
223b71206888 Initial import
thib
parents:
diff changeset
283 SDL_RWops* op = OpenSDLRW(path);
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
284 if (op == NULL) { // ファイルが見付からない
0
223b71206888 Initial import
thib
parents:
diff changeset
285 return;
223b71206888 Initial import
thib
parents:
diff changeset
286 }
223b71206888 Initial import
thib
parents:
diff changeset
287 Mix_Pause(chn);
223b71206888 Initial import
thib
parents:
diff changeset
288
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
289 if (mu->play_chunk[chn] != NULL) {
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
290 Mix_FreeChunk(mu->play_chunk[chn]);
0
223b71206888 Initial import
thib
parents:
diff changeset
291 }
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
292 mu->play_chunk[chn] = Mix_LoadWAV_RW(op, 1);
0
223b71206888 Initial import
thib
parents:
diff changeset
293 if (fadein_time <= 0) {
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
294 Mix_Volume(chn, mu->volmod[3]*SDL_MIX_MAXVOLUME/255);
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
295 Mix_PlayChannel(chn, mu->play_chunk[chn], loop);
0
223b71206888 Initial import
thib
parents:
diff changeset
296 } else {
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
297 Mix_Volume(chn, mu->volmod[3]*SDL_MIX_MAXVOLUME/255);
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
298 Mix_FadeInChannel(chn, mu->play_chunk[chn], loop, fadein_time);
0
223b71206888 Initial import
thib
parents:
diff changeset
299 }
223b71206888 Initial import
thib
parents:
diff changeset
300 }
223b71206888 Initial import
thib
parents:
diff changeset
301
223b71206888 Initial import
thib
parents:
diff changeset
302 void MuSys::PlayKoe(const char* path) {
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
303 if (!pcm_enable) return;
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
304
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
305 MuSys* mu = MuSys::GetInstance();
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
306
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
307 static char* playing_koedata = NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
308 int len = 0;
223b71206888 Initial import
thib
parents:
diff changeset
309 AvgKoeInfo koeinfo;
223b71206888 Initial import
thib
parents:
diff changeset
310 int chn = MIX_PCM_KOE;
223b71206888 Initial import
thib
parents:
diff changeset
311
223b71206888 Initial import
thib
parents:
diff changeset
312 Mix_Pause(chn);
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
313 Mix_HaltChannel(chn); // これで RWop が解放されるはず…
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
314 if (mu->play_chunk[chn] != NULL) {
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
315 Mix_FreeChunk(mu->play_chunk[chn]);
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
316 mu->play_chunk[chn] = NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
317 }
223b71206888 Initial import
thib
parents:
diff changeset
318
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
319 if (playing_koedata != NULL) {
7
fa8511a21d05 Fixes somes memory leaks
thib
parents: 3
diff changeset
320 free(playing_koedata);
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
321 playing_koedata = NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
322 }
223b71206888 Initial import
thib
parents:
diff changeset
323
223b71206888 Initial import
thib
parents:
diff changeset
324 koeinfo = OpenKoeFile(path);
223b71206888 Initial import
thib
parents:
diff changeset
325
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
326 if (koeinfo.stream == NULL) return;
0
223b71206888 Initial import
thib
parents:
diff changeset
327 playing_koedata = decode_koe(koeinfo, &len);
223b71206888 Initial import
thib
parents:
diff changeset
328 fclose(koeinfo.stream);
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
329 if (playing_koedata == NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
330 return;
223b71206888 Initial import
thib
parents:
diff changeset
331 }
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
332 Mix_Volume(chn, mu->volmod[1]*SDL_MIX_MAXVOLUME/255);
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
333 mu->play_chunk[chn] = Mix_LoadWAV_RW(SDL_RWFromMem(playing_koedata, len+0x2c), 1);
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
334 Mix_PlayChannel(chn, mu->play_chunk[chn], 0);
0
223b71206888 Initial import
thib
parents:
diff changeset
335 }
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
336
0
223b71206888 Initial import
thib
parents:
diff changeset
337 AvgKoeInfo OpenKoeFile(const char* path) {
223b71206888 Initial import
thib
parents:
diff changeset
338 int radix = 10000;
223b71206888 Initial import
thib
parents:
diff changeset
339 /* if (global_system.Version() >= 2) */ radix *= 10;
223b71206888 Initial import
thib
parents:
diff changeset
340 AvgKoeInfo info;
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
341 info.stream = NULL;
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
342 info.length = 0;
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
343 info.offset = 0;
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
344 if (isdigit(path[0]) && strchr(path,'.') == NULL) { // 数値 (拡張子等なし)
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
345 /* avg32 形式の音声アーカイブのキャッシュを検索 */
0
223b71206888 Initial import
thib
parents:
diff changeset
346 int pointer = atoi(path);
223b71206888 Initial import
thib
parents:
diff changeset
347 int file_no = pointer / radix;
223b71206888 Initial import
thib
parents:
diff changeset
348 int index = pointer % radix;
223b71206888 Initial import
thib
parents:
diff changeset
349 info = FindKoe(file_no, index);
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
350 } else { // ファイル
0
223b71206888 Initial import
thib
parents:
diff changeset
351 int length;
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
352 ARCINFO* arcinfo = FileSearcher::GetInstance()->Find(FileSearcher::KOE, path, ".WPD");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
353 if (arcinfo == NULL) return info;
0
223b71206888 Initial import
thib
parents:
diff changeset
354 info.stream = arcinfo->OpenFile(&length);
223b71206888 Initial import
thib
parents:
diff changeset
355 info.rate = 22050;
223b71206888 Initial import
thib
parents:
diff changeset
356 info.length = length;
223b71206888 Initial import
thib
parents:
diff changeset
357 info.offset = ftell(info.stream);
223b71206888 Initial import
thib
parents:
diff changeset
358 info.type = koe_unknown;
223b71206888 Initial import
thib
parents:
diff changeset
359 delete arcinfo;
223b71206888 Initial import
thib
parents:
diff changeset
360 }
223b71206888 Initial import
thib
parents:
diff changeset
361 return info;
223b71206888 Initial import
thib
parents:
diff changeset
362 }
223b71206888 Initial import
thib
parents:
diff changeset
363
223b71206888 Initial import
thib
parents:
diff changeset
364 static SDL_RWops* OpenSDLRW(const char* path) {
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
365 /* まず wav ファイルを探す */
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
366 FileSearcher* file_searcher = FileSearcher::GetInstance();
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
367 ARCINFO* info = file_searcher->Find(FileSearcher::WAV, path, ".wav");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
368 if (info == NULL) {
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
369 info = file_searcher->Find(FileSearcher::WAV, path, ".nwa");
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
370 if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "nwa");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
371 if (info != NULL) { // read NWA file
0
223b71206888 Initial import
thib
parents:
diff changeset
372 int dummy;
223b71206888 Initial import
thib
parents:
diff changeset
373 FILE* f = info->OpenFile(&dummy);
223b71206888 Initial import
thib
parents:
diff changeset
374 static char* d = 0;
223b71206888 Initial import
thib
parents:
diff changeset
375 int sz;
223b71206888 Initial import
thib
parents:
diff changeset
376 if (d != 0) delete[] d;
223b71206888 Initial import
thib
parents:
diff changeset
377 d = NWAFILE::ReadAll(f, sz);
223b71206888 Initial import
thib
parents:
diff changeset
378 return SDL_RWFromMem(d, sz);
223b71206888 Initial import
thib
parents:
diff changeset
379 }
223b71206888 Initial import
thib
parents:
diff changeset
380 }
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
381 if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "wav");
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
382 if (info == NULL) info = file_searcher->Find(FileSearcher::WAV, path, ".ogg");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
383 if (info != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
384 int dummy;
223b71206888 Initial import
thib
parents:
diff changeset
385 FILE* f = info->OpenFile(&dummy);
223b71206888 Initial import
thib
parents:
diff changeset
386 delete info;
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
387 if (f == NULL) return NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
388 SDL_RWops* op = SDL_RWFromFP(f, 1);
223b71206888 Initial import
thib
parents:
diff changeset
389 return op;
223b71206888 Initial import
thib
parents:
diff changeset
390 }
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
391 return NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
392 }
223b71206888 Initial import
thib
parents:
diff changeset
393
223b71206888 Initial import
thib
parents:
diff changeset
394 static WAVFILE* OpenWaveFile(const char* path) {
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
395 /* まず wav ファイルを探す */
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
396 FileSearcher* file_searcher = FileSearcher::GetInstance();
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
397 ARCINFO* info = file_searcher->Find(FileSearcher::WAV, path, ".wav");
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
398 if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "wav");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
399 if (info != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
400 int size;
223b71206888 Initial import
thib
parents:
diff changeset
401 FILE* f = info->OpenFile(&size);
223b71206888 Initial import
thib
parents:
diff changeset
402 delete info;
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
403 if (f == NULL) return NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
404 WAVFILE* w = WAVFILE::MakeConverter(new WAVFILE_Stream(f, size));
223b71206888 Initial import
thib
parents:
diff changeset
405 return w;
223b71206888 Initial import
thib
parents:
diff changeset
406 }
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
407 /* 次に nwa ファイル */
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
408 info = file_searcher->Find(FileSearcher::WAV, path, ".nwa");
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
409 if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "nwa");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
410 if (info != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
411 int size;
223b71206888 Initial import
thib
parents:
diff changeset
412 FILE* f = info->OpenFile(&size);
223b71206888 Initial import
thib
parents:
diff changeset
413 delete info;
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
414 if (f == NULL) return NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
415 WAVFILE* w = WAVFILE::MakeConverter(new NWAFILE(f));
223b71206888 Initial import
thib
parents:
diff changeset
416 return w;
223b71206888 Initial import
thib
parents:
diff changeset
417 }
223b71206888 Initial import
thib
parents:
diff changeset
418
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
419 /* 次に mp3 ファイル */
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
420 info = file_searcher->Find(FileSearcher::WAV, path, ".mp3");
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
421 if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "mp3");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
422 if (info != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
423 int size;
223b71206888 Initial import
thib
parents:
diff changeset
424 FILE* f = info->OpenFile(&size);
223b71206888 Initial import
thib
parents:
diff changeset
425 delete info;
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
426 if (f == NULL) return NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
427 MP3FILE* w = new MP3FILE(f, size);
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
428 if (w->pimpl != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
429 return WAVFILE::MakeConverter(w);
223b71206888 Initial import
thib
parents:
diff changeset
430 }
223b71206888 Initial import
thib
parents:
diff changeset
431 delete w;
223b71206888 Initial import
thib
parents:
diff changeset
432 }
223b71206888 Initial import
thib
parents:
diff changeset
433
65
4416cfac86ae Convert EUC-JP files to UTF8
Thibaut Girka <thib@sitedethib.com>
parents: 53
diff changeset
434 /* 次に ogg ファイル */
53
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
435 info = file_searcher->Find(FileSearcher::WAV, path, ".ogg");
ddbcbd000206 * MuSys, AyuSysConfig, FileSearcher (former FILESEARCHER) and KeyHolder (former KEYHOLDER) are now singletons
thib
parents: 52
diff changeset
436 if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "ogg");
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
437 if (info != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
438 int size;
223b71206888 Initial import
thib
parents:
diff changeset
439 FILE* f = info->OpenFile(&size);
223b71206888 Initial import
thib
parents:
diff changeset
440 delete info;
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
441 if (f == NULL) return NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
442 OggFILE* w = new OggFILE(f, size);
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
443 if (w->pimpl != NULL) {
0
223b71206888 Initial import
thib
parents:
diff changeset
444 return WAVFILE::MakeConverter(w);
223b71206888 Initial import
thib
parents:
diff changeset
445 }
223b71206888 Initial import
thib
parents:
diff changeset
446 delete w;
223b71206888 Initial import
thib
parents:
diff changeset
447 }
52
15a18fbe6f21 * Known bugs added to the README
thib
parents: 43
diff changeset
448 return NULL;
0
223b71206888 Initial import
thib
parents:
diff changeset
449 }
223b71206888 Initial import
thib
parents:
diff changeset
450