mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-31 07:53:36 +00:00
PS3: Add a SDL 1.3 mixer, for use with the PS3 backend.
SDL 1.3 allows converting from the S16SYS sound format to F32MSB, which is required by the PS3.
This commit is contained in:
parent
11cfa0d357
commit
8bd78b6325
109
backends/mixer/sdl13/sdl13-mixer.cpp
Normal file
109
backends/mixer/sdl13/sdl13-mixer.cpp
Normal file
@ -0,0 +1,109 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "common/scummsys.h"
|
||||
|
||||
#if defined(SDL_BACKEND)
|
||||
|
||||
#include "backends/mixer/sdl13/sdl13-mixer.h"
|
||||
#include "common/debug.h"
|
||||
#include "common/system.h"
|
||||
#include "common/config-manager.h"
|
||||
#include "common/textconsole.h"
|
||||
|
||||
#ifdef GP2X
|
||||
#define SAMPLES_PER_SEC 11025
|
||||
#else
|
||||
#define SAMPLES_PER_SEC 22050
|
||||
#endif
|
||||
//#define SAMPLES_PER_SEC 44100
|
||||
|
||||
Sdl13MixerManager::Sdl13MixerManager()
|
||||
:
|
||||
SdlMixerManager(),
|
||||
_device(0) {
|
||||
|
||||
}
|
||||
|
||||
Sdl13MixerManager::~Sdl13MixerManager() {
|
||||
_mixer->setReady(false);
|
||||
|
||||
SDL_CloseAudioDevice(_device);
|
||||
|
||||
delete _mixer;
|
||||
}
|
||||
|
||||
void Sdl13MixerManager::init() {
|
||||
// Start SDL Audio subsystem
|
||||
if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) {
|
||||
error("Could not initialize SDL: %s", SDL_GetError());
|
||||
}
|
||||
|
||||
// Get the desired audio specs
|
||||
SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC);
|
||||
|
||||
// Start SDL audio with the desired specs
|
||||
_device = SDL_OpenAudioDevice(NULL, 0, &desired, &_obtained,
|
||||
SDL_AUDIO_ALLOW_FREQUENCY_CHANGE);
|
||||
|
||||
if (_device <= 0) {
|
||||
warning("Could not open audio device: %s", SDL_GetError());
|
||||
|
||||
_mixer = new Audio::MixerImpl(g_system, desired.freq);
|
||||
assert(_mixer);
|
||||
_mixer->setReady(false);
|
||||
} else {
|
||||
debug(1, "Output sample rate: %d Hz", _obtained.freq);
|
||||
|
||||
_mixer = new Audio::MixerImpl(g_system, _obtained.freq);
|
||||
assert(_mixer);
|
||||
_mixer->setReady(true);
|
||||
|
||||
startAudio();
|
||||
}
|
||||
}
|
||||
|
||||
void Sdl13MixerManager::startAudio() {
|
||||
// Start the sound system
|
||||
SDL_PauseAudioDevice(_device, 0);
|
||||
}
|
||||
|
||||
void Sdl13MixerManager::suspendAudio() {
|
||||
SDL_CloseAudioDevice(_device);
|
||||
_audioSuspended = true;
|
||||
}
|
||||
|
||||
int Sdl13MixerManager::resumeAudio() {
|
||||
if (!_audioSuspended)
|
||||
return -2;
|
||||
|
||||
_device = SDL_OpenAudioDevice(NULL, 0, &_obtained, NULL, 0);
|
||||
if (_device <= 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
SDL_PauseAudioDevice(_device, 0);
|
||||
_audioSuspended = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
67
backends/mixer/sdl13/sdl13-mixer.h
Normal file
67
backends/mixer/sdl13/sdl13-mixer.h
Normal file
@ -0,0 +1,67 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef BACKENDS_MIXER_SDL13_H
|
||||
#define BACKENDS_MIXER_SDL13_H
|
||||
|
||||
#include "backends/mixer/sdl/sdl-mixer.h"
|
||||
|
||||
/**
|
||||
* SDL mixer manager. It wraps the actual implementation
|
||||
* of the Audio:Mixer used by the engine, and setups
|
||||
* the SDL audio subsystem and the callback for the
|
||||
* audio mixer implementation.
|
||||
*/
|
||||
class Sdl13MixerManager : public SdlMixerManager {
|
||||
public:
|
||||
Sdl13MixerManager();
|
||||
virtual ~Sdl13MixerManager();
|
||||
|
||||
/**
|
||||
* Initialize and setups the mixer
|
||||
*/
|
||||
virtual void init();
|
||||
|
||||
/**
|
||||
* Pauses the audio system
|
||||
*/
|
||||
virtual void suspendAudio();
|
||||
|
||||
/**
|
||||
* Resumes the audio system
|
||||
*/
|
||||
virtual int resumeAudio();
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* The opened SDL audio device
|
||||
*/
|
||||
SDL_AudioDeviceID _device;
|
||||
|
||||
/**
|
||||
* Starts SDL audio
|
||||
*/
|
||||
virtual void startAudio();
|
||||
};
|
||||
|
||||
#endif
|
@ -108,7 +108,8 @@ ifdef PLAYSTATION3
|
||||
MODULE_OBJS += \
|
||||
fs/posix/posix-fs.o \
|
||||
fs/posix/posix-fs-factory.o \
|
||||
fs/ps3/ps3-fs-factory.o
|
||||
fs/ps3/ps3-fs-factory.o \
|
||||
mixer/sdl13/sdl13-mixer.o
|
||||
endif
|
||||
|
||||
ifeq ($(BACKEND),ds)
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
|
||||
#include "backends/saves/default/default-saves.h"
|
||||
#include "backends/fs/ps3/ps3-fs-factory.h"
|
||||
#include "backends/mixer/sdl13/sdl13-mixer.h"
|
||||
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
@ -65,6 +66,14 @@ void OSystem_PS3::initBackend() {
|
||||
if (_savefileManager == 0)
|
||||
_savefileManager = new DefaultSaveFileManager(PREFIX "/saves");
|
||||
|
||||
// Create the mixer manager
|
||||
if (_mixer == 0) {
|
||||
_mixerManager = new Sdl13MixerManager();
|
||||
|
||||
// Setup and start mixer
|
||||
_mixerManager->init();
|
||||
}
|
||||
|
||||
// Invoke parent implementation of this method
|
||||
OSystem_SDL::initBackend();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user