mirror of
https://github.com/libretro/scummvm.git
synced 2025-04-10 10:41:41 +00:00
Buggy support for ripped tracks.
svn-id: r18849
This commit is contained in:
parent
cfe0b5936b
commit
a0cff37f06
@ -28,6 +28,9 @@
|
|||||||
#include "sound/audiostream.h"
|
#include "sound/audiostream.h"
|
||||||
#include "sound/mididrv.h"
|
#include "sound/mididrv.h"
|
||||||
#include "sound/midiparser.h"
|
#include "sound/midiparser.h"
|
||||||
|
#include "sound/mp3.h"
|
||||||
|
#include "sound/vorbis.h"
|
||||||
|
#include "sound/flac.h"
|
||||||
#include "common/config-manager.h"
|
#include "common/config-manager.h"
|
||||||
#include "common/file.h"
|
#include "common/file.h"
|
||||||
|
|
||||||
@ -35,6 +38,24 @@ namespace Saga {
|
|||||||
|
|
||||||
#define BUFFER_SIZE 4096
|
#define BUFFER_SIZE 4096
|
||||||
|
|
||||||
|
struct TrackFormat {
|
||||||
|
DigitalTrackInfo* (*openTrackFunction)(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
static const TrackFormat TRACK_FORMATS[] = {
|
||||||
|
#ifdef USE_FLAC
|
||||||
|
{ getFlacTrack },
|
||||||
|
#endif
|
||||||
|
#ifdef USE_VORBIS
|
||||||
|
{ getVorbisTrack },
|
||||||
|
#endif
|
||||||
|
#ifdef USE_MAD
|
||||||
|
{ getMP3Track },
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{ NULL } // Terminator
|
||||||
|
};
|
||||||
|
|
||||||
// I haven't decided yet if it's a good idea to make looping part of the audio
|
// I haven't decided yet if it's a good idea to make looping part of the audio
|
||||||
// stream class, or if I should use a "wrapper" class, like I did for Broken
|
// stream class, or if I should use a "wrapper" class, like I did for Broken
|
||||||
// Sword 2, to make it easier to add support for compressed music... but I'll
|
// Sword 2, to make it easier to add support for compressed music... but I'll
|
||||||
@ -277,6 +298,8 @@ Music::Music(SagaEngine *vm, Audio::Mixer *mixer, MidiDriver *driver, int enable
|
|||||||
|
|
||||||
_songTableLen = 0;
|
_songTableLen = 0;
|
||||||
_songTable = 0;
|
_songTable = 0;
|
||||||
|
|
||||||
|
_track = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Music::~Music() {
|
Music::~Music() {
|
||||||
@ -345,6 +368,7 @@ void Music::play(uint32 resourceId, MusicFlags flags) {
|
|||||||
ResourceContext *context;
|
ResourceContext *context;
|
||||||
byte *resourceData;
|
byte *resourceData;
|
||||||
size_t resourceSize;
|
size_t resourceSize;
|
||||||
|
|
||||||
debug(2, "Music::play %d, %d", resourceId, flags);
|
debug(2, "Music::play %d, %d", resourceId, flags);
|
||||||
|
|
||||||
if (!_enabled) {
|
if (!_enabled) {
|
||||||
@ -359,6 +383,16 @@ void Music::play(uint32 resourceId, MusicFlags flags) {
|
|||||||
_player->stopMusic();
|
_player->stopMusic();
|
||||||
_mixer->stopHandle(_musicHandle);
|
_mixer->stopHandle(_musicHandle);
|
||||||
|
|
||||||
|
// Try to open standalone digital track
|
||||||
|
for (int i = 0; i < ARRAYSIZE(TRACK_FORMATS) - 1; ++i)
|
||||||
|
if (_track = TRACK_FORMATS[i].openTrackFunction(resourceId - 8)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (_track) {
|
||||||
|
_track->play(_mixer, &_musicHandle, (MUSIC_LOOP ? -1 : 1), 10000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_vm->getGameType() == GType_ITE) {
|
if (_vm->getGameType() == GType_ITE) {
|
||||||
if (resourceId >= 9 && resourceId <= 34) {
|
if (resourceId >= 9 && resourceId <= 34) {
|
||||||
if (flags == MUSIC_DEFAULT) {
|
if (flags == MUSIC_DEFAULT) {
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#ifndef SAGA_MUSIC_H_
|
#ifndef SAGA_MUSIC_H_
|
||||||
#define SAGA_MUSIC_H_
|
#define SAGA_MUSIC_H_
|
||||||
|
|
||||||
|
#include "sound/audiocd.h"
|
||||||
#include "sound/mixer.h"
|
#include "sound/mixer.h"
|
||||||
#include "sound/mididrv.h"
|
#include "sound/mididrv.h"
|
||||||
#include "sound/midiparser.h"
|
#include "sound/midiparser.h"
|
||||||
@ -136,6 +137,8 @@ private:
|
|||||||
MidiParser *xmidiParser;
|
MidiParser *xmidiParser;
|
||||||
MidiParser *smfParser;
|
MidiParser *smfParser;
|
||||||
|
|
||||||
|
DigitalTrackInfo *_track;
|
||||||
|
|
||||||
static void musicVolumeGaugeCallback(void *refCon);
|
static void musicVolumeGaugeCallback(void *refCon);
|
||||||
void musicVolumeGauge(void);
|
void musicVolumeGauge(void);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user