BizHawk/waterbox/stella/port/SoundBizhawk.hxx

175 lines
4.8 KiB
C++

//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2024 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifdef SOUND_SUPPORT
#ifndef SOUND_SDL2_HXX
#define SOUND_SDL2_HXX
class OSystem;
class AudioQueue;
class EmulationTiming;
class AudioSettings;
class Resampler;
#include "bspf.hxx"
#include "Sound.hxx"
/**
This class implements the sound API for SDL.
@author Stephen Anthony and Christian Speckner (DirtyHairy)
*/
class SoundBizhawk : public Sound
{
public:
/**
Create a new sound object. The init method must be invoked before
using the object.
*/
SoundBizhawk(OSystem& osystem, AudioSettings& audioSettings);
/**
Destructor
*/
~SoundBizhawk() override;
public:
/**
Enables/disables the sound subsystem.
@param enable Either true or false, to enable or disable the sound system
*/
void setEnabled(bool enable) override;
/**
Initializes the sound device. This must be called before any
calls are made to derived methods.
*/
void open(shared_ptr<AudioQueue> audioQueue,
EmulationTiming* emulationTiming) override;
/**
Sets the sound mute state; sound processing continues. When enabled,
sound volume is 0; when disabled, sound volume returns to previously
set level.
@param enable Mutes sound if true, unmute if false
*/
void mute(bool enable) override;
/**
Toggles the sound mute state; sound processing continues.
Switches between mute(true) and mute(false).
*/
void toggleMute() override;
/**
Set the pause state of the sound object. While paused, sound is
neither played nor processed (ie, the sound subsystem is temporarily
disabled).
@param enable Pause sound if true, unpause if false
@return The previous (old) pause state
*/
bool pause(bool enable) override;
/**
Sets the volume of the sound device to the specified level. The
volume is given as a range from 0 to 100 (0 indicates mute). Values
outside this range indicate that the volume shouldn't be changed at all.
@param volume The new volume level for the sound device
*/
void setVolume(uInt32 volume) override;
/**
Adjusts the volume of the sound device based on the given direction.
@param direction +1 indicates increase, -1 indicates decrease.
*/
void adjustVolume(int direction = 1) override;
/**
This method is called to provide information about the sound device.
*/
string about() const override;
/**
Play a WAV file.
@param fileName The name of the WAV file
@param position The position to start playing
@param length The played length
@return True if the WAV file can be played, else false
*/
bool playWav(const string& fileName, const uInt32 position = 0,
const uInt32 length = 0) override;
/**
Stop any currently playing WAV file.
*/
void stopWav() override;
/**
Get the size of the WAV file which remains to be played.
@return The remaining number of bytes
*/
uInt32 wavSize() const override;
private:
/**
This method is called to query the audio devices.
@param devices List of device names
*/
void queryHardware(VariantList& devices) override;
/**
The actual sound device is opened only when absolutely necessary.
Typically this will only happen once per program run, but it can also
happen dynamically when changing sample rate and/or fragment size.
*/
bool openDevice();
void initResampler();
private:
AudioSettings& myAudioSettings;
// Audio specification structure
static float myVolumeFactor; // Current volume level (0 - 100)
private:
// Callback functions invoked by the SDL Audio library when it needs data
static void callback(void* object, uInt8* stream, int len);
// Following constructors and assignment operators not supported
SoundBizhawk() = delete;
SoundBizhawk(const SoundBizhawk&) = delete;
SoundBizhawk(SoundBizhawk&&) = delete;
SoundBizhawk& operator=(const SoundBizhawk&) = delete;
SoundBizhawk& operator=(SoundBizhawk&&) = delete;
};
#endif
#endif // SOUND_SUPPORT