22 #ifndef KYRA_SOUND_INTERN_H 23 #define KYRA_SOUND_INTERN_H 26 #include "kyra/sound/sound.h" 27 #include "kyra/sound/sound_pc_v1.h" 29 #include "audio/midiparser.h" 30 #include "audio/miles.h" 31 #include "audio/softsynth/emumidi.h" 32 #include "audio/softsynth/fmtowns_pc98/towns_audio.h" 34 #include "common/mutex.h" 40 class PCSpeakerStream;
42 class HalestormDriver;
64 kType getMusicType()
const override {
return _type; }
68 void updateVolumeSettings()
override;
70 void initAudioResourceInfo(
int set,
void *info)
override;
71 void selectAudioResourceSet(
int set)
override;
72 bool hasSoundFile(uint file)
const override;
73 void loadSoundFile(uint file)
override;
77 void playTrack(uint8 track)
override;
78 void haltTrack()
override;
79 bool isPlaying()
const override;
81 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
82 void stopAllSoundEffects()
override;
84 void beginFadeOut()
override;
86 void pause(
bool paused)
override;
88 static void onTimer(
void *data);
91 int _musicVolume, _sfxVolume;
93 uint32 _fadeStartTime;
98 byte *_musicFile, *_sfxFile;
105 int _currentResourceSet;
123 kType getMusicType()
const override {
return kTowns; }
125 bool init()
override;
126 void process()
override;
128 void initAudioResourceInfo(
int set,
void *info)
override;
129 void selectAudioResourceSet(
int set)
override;
130 bool hasSoundFile(uint file)
const override;
131 void loadSoundFile(uint file)
override;
134 void playTrack(uint8 track)
override;
135 void haltTrack()
override;
137 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
138 void stopAllSoundEffects()
override;
140 void beginFadeOut()
override;
142 void updateVolumeSettings()
override;
143 void enableMusic(
int enable)
override;
146 bool loadInstruments();
147 void playEuphonyTrack(uint32 offset,
int loop);
149 void fadeOutSoundEffects();
154 uint8 *_musicTrackData;
166 int _currentResourceSet;
168 const uint8 *_musicFadeTable;
169 const uint8 *_sfxBTTable;
170 const uint8 *_sfxWDTable;
178 kType getMusicType()
const override {
return kPC98; }
180 bool init()
override;
182 void initAudioResourceInfo(
int set,
void *info)
override;
183 void selectAudioResourceSet(
int set)
override;
184 bool hasSoundFile(uint file)
const override;
185 void loadSoundFile(uint file)
override;
188 void playTrack(uint8 track)
override;
189 void haltTrack()
override;
190 void beginFadeOut()
override;
193 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
195 void updateVolumeSettings()
override;
199 uint8 *_musicTrackData;
200 uint8 *_sfxTrackData;
203 const char *resPattern() {
return _resInfo[_currentResourceSet]->c_str(); }
205 int _currentResourceSet;
213 kType getMusicType()
const override {
return _vm->gameFlags().platform == Common::kPlatformFMTowns ? kTowns : kPC98; }
215 bool init()
override;
216 void process()
override;
218 void initAudioResourceInfo(
int set,
void *info)
override;
219 void selectAudioResourceSet(
int set)
override;
220 bool hasSoundFile(uint file)
const override;
224 void playTrack(uint8 track)
override;
225 void haltTrack()
override;
226 void beginFadeOut()
override;
228 int32 voicePlay(
const char *file,
Audio::SoundHandle *handle, uint8 volume = 255, uint8 priority = 255,
bool isSfx =
true)
override;
229 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
231 void updateVolumeSettings()
override;
238 uint8 *_musicTrackData;
239 uint8 *_sfxTrackData;
244 int _currentResourceSet;
256 void send(uint32 data)
override;
258 MidiChannel *allocateChannel()
override {
return 0; }
259 MidiChannel *getPercussionChannel()
override {
return 0; }
262 void generateSamples(int16 *buffer,
int numSamples)
override;
266 int getRate()
const override {
return _rate; }
273 uint8 pitchBendLow, pitchBendHigh;
280 void resetController(
int channel);
284 uint8 hardwareChannel;
295 void noteOn(
int channel,
int note);
296 void noteOff(
int channel,
int note);
298 void turnNoteOn(
int note);
299 void overwriteNote(
int note);
300 void turnNoteOff(
int note);
302 void setupTone(
int note);
305 uint8 _hardwareChannel[1];
306 bool _modulationFlag;
309 void onTimer()
override;
311 static const uint8 _noteTable1[];
312 static const uint8 _noteTable2[];
329 kType getMusicType()
const override {
return kAmiga; }
331 bool init()
override;
333 void initAudioResourceInfo(
int set,
void *info)
override;
334 void selectAudioResourceSet(
int set)
override;
335 bool hasSoundFile(uint file)
const override;
336 void loadSoundFile(uint file)
override;
339 void playTrack(uint8 track)
override;
340 void haltTrack()
override;
341 void beginFadeOut()
override;
344 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
347 Audio::MaxTrax *_driver;
349 enum FileType { kFileNone = -1, kFileIntro = 0, kFileGame = 1, kFileFinal = 2 } _fileLoaded;
352 int _tableSfxIntro_Size;
355 int _tableSfxGame_Size;
364 kType getMusicType()
const override;
366 bool init()
override {
return init(musicEnabled() == 1); }
367 bool init(
bool hiQuality);
369 void selectAudioResourceSet(
int set)
override;
373 void playTrack(uint8 track)
override;
374 void haltTrack()
override;
375 void playSoundEffect(uint16 track, uint8)
override;
376 bool isPlaying()
const override;
377 void beginFadeOut()
override;
378 void updateVolumeSettings()
override;
379 void enableMusic(
int enable)
override;
382 void setQuality(
bool hi);
386 const int _talkieFlag;
389 const uint16 *_resIDMusic;
390 int _currentResourceSet;
392 static const uint16 _resIDMusicIntro[4];
393 static const uint16 _resIDMusicIngame[35];
394 static const uint8 _musicLoopTable[35];
395 static const uint16 _resIDSfxIntro[2][39];
396 static const uint16 _resIDSfxIngame[2][39];
398 struct SoundEffectDef {
405 static const SoundEffectDef _soundEffectDefsIntro[16];
406 static const SoundEffectDef _soundEffectDefsIngame[120];
414 ~SoundTowns_Darkmoon()
override;
416 kType getMusicType()
const override {
return kTowns; }
418 bool init()
override;
420 void timerCallback(
int timerId)
override;
422 void initAudioResourceInfo(
int set,
void *info)
override;
423 void selectAudioResourceSet(
int set)
override;
424 bool hasSoundFile(uint file)
const override;
425 void loadSoundFile(uint file)
override;
428 void playTrack(uint8 track)
override;
429 void haltTrack()
override;
430 bool isPlaying()
const override;
432 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
433 void stopAllSoundEffects()
override;
435 void beginFadeOut()
override;
437 void updateVolumeSettings()
override;
439 int checkTrigger()
override;
441 void resetTrigger()
override;
444 struct SoundTableEntry {
450 const char *
const *_fileList;
468 class SoundAmiga_EoB:
public Sound {
471 ~SoundAmiga_EoB()
override;
473 kType getMusicType()
const override;
475 bool init()
override;
476 void initAudioResourceInfo(
int set,
void *info)
override;
477 void selectAudioResourceSet(
int set)
override;
478 bool hasSoundFile(uint file)
const override {
return false; }
479 void loadSoundFile(uint)
override {}
482 void playTrack(uint8 track)
override;
483 void haltTrack()
override;
484 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
485 void beginFadeOut()
override { beginFadeOut(160); }
486 void beginFadeOut(
int delay)
override;
487 void updateVolumeSettings()
override;
488 int checkTrigger()
override;
494 AudioMaster2 *_driver;
498 int _currentResourceSet;
504 class SoundPC98_EoB :
public Sound {
507 ~SoundPC98_EoB()
override;
509 kType getMusicType()
const override;
511 bool init()
override;
512 void initAudioResourceInfo(
int set,
void *info)
override;
513 void selectAudioResourceSet(
int set)
override;
514 bool hasSoundFile(uint file)
const override {
return false; }
515 void loadSoundFile(uint file)
override;
516 void loadSoundFile(
const Common::Path &file)
override {}
518 void playTrack(uint8 track)
override;
519 void haltTrack()
override;
520 void playSoundEffect(uint16 track, uint8)
override;
521 void beginFadeOut()
override {}
522 void updateVolumeSettings()
override;
529 int _currentResourceSet;
536 class CapcomPC98AudioDriver;
537 class SoundPC98_Darkmoon :
public Sound {
540 ~SoundPC98_Darkmoon()
override;
542 kType getMusicType()
const override;
543 kType getSfxType()
const override;
545 bool init()
override;
547 void initAudioResourceInfo(
int set,
void *info)
override;
548 void selectAudioResourceSet(
int set)
override;
549 bool hasSoundFile(uint file)
const override {
return true; }
550 void loadSoundFile(uint file)
override;
553 void playTrack(uint8 track)
override;
554 void haltTrack()
override;
555 bool isPlaying()
const override;
557 void playSoundEffect(uint16 track, uint8 volume = 0xFF)
override;
558 void stopAllSoundEffects()
override;
560 void beginFadeOut()
override;
562 void pause(
bool paused)
override;
564 void updateVolumeSettings()
override;
566 int checkTrigger()
override;
567 void resetTrigger()
override {}
570 void restartBackgroundMusic();
571 const uint8 *getData(uint16 track)
const;
574 CapcomPC98AudioDriver *_driver;
575 uint8 *_soundData, *_fileBuffer;
581 int _currentResourceSet;
590 class SegaAudioDriver;
591 class SoundSegaCD_EoB :
public Sound {
594 ~SoundSegaCD_EoB()
override;
596 kType getMusicType()
const override;
598 bool init()
override;
599 void initAudioResourceInfo(
int,
void*)
override {}
600 void selectAudioResourceSet(
int)
override {}
601 bool hasSoundFile(uint file)
const override {
return false; }
602 void loadSoundFile(uint file)
override {}
603 void loadSoundFile(
const Common::Path &file)
override {}
604 void playTrack(uint8 track)
override;
605 void haltTrack()
override;
606 void playSoundEffect(uint16 track, uint8 volume)
override;
607 bool isPlaying()
const override;
608 void beginFadeOut()
override {}
609 void updateVolumeSettings()
override;
616 SegaAudioDriver *_driver;
618 uint8 _pcmOffsets[8];
619 uint16 _fmOffsets[140];
620 const uint8 *_fmData;
621 int _lastSoundEffect;
624 static const uint8 _fmTrackMap[140];
Definition: sound_intern.h:208
Definition: halestorm.h:44
void loadSoundFile(const Common::Path &) override
Definition: sound_intern.h:132
uint32 DeviceHandle
Definition: mididrv.h:322
void loadSoundFile(const Common::Path &) override
Definition: sound_intern.h:337
void loadSoundFile(uint) override
Definition: sound_intern.h:371
Definition: kyra_v1.h:126
bool init() override
Definition: sound_intern.h:366
Definition: sound_intern.h:324
Definition: mididrv.h:313
bool hasSoundFile(uint) const override
Definition: sound_intern.h:370
bool isStereo() const override
Definition: sound_intern.h:265
Definition: towns_audio.h:37
Definition: sound_intern.h:248
Definition: towns_euphony.h:115
Definition: algorithm.h:29
int32 voicePlay(const char *file, Audio::SoundHandle *handle, uint8 volume, uint8 priority, bool isSfx) override
Definition: sound_intern.h:343
Definition: audiostream.h:50
void close() override
Definition: sound_intern.h:254
Definition: sound_intern.h:173
Definition: mididrv.h:541
Definition: detection.h:27
Definition: towns_pc98_driver.h:34
void loadSoundFile(uint file) override
Definition: sound_intern.h:221
int getRate() const override
Definition: sound_intern.h:266
Definition: sound_intern.h:359
Definition: sound_intern.h:118
Definition: sound_mac_res.h:41
int32 voicePlay(const char *file, Audio::SoundHandle *handle, uint8 volume, uint8 priority, bool isSfx) override
Definition: sound_intern.h:192
void initAudioResourceInfo(int, void *) override
Definition: sound_intern.h:368
Definition: sound_intern.h:316
Definition: sound_intern.h:59
void loadSoundFile(const Common::Path &) override
Definition: sound_intern.h:372
Definition: midiparser.h:354
Definition: towns_audio.h:31