mirror of https://github.com/stella-emu/stella.git
Restructured the Sound class to support the improved SoundSDL class.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@258 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
f7d5d44594
commit
e08568a3d1
|
@ -8,12 +8,12 @@
|
||||||
// SS SS tt ee ll ll aa aa
|
// SS SS tt ee ll ll aa aa
|
||||||
// SSSS ttt eeeee llll llll aaaaa
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
//
|
//
|
||||||
// Copyright (c) 1995-2002 by Bradford W. Mott
|
// Copyright (c) 1995-2004 by Bradford W. Mott
|
||||||
//
|
//
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Sound.cxx,v 1.11 2004-04-27 00:50:51 stephena Exp $
|
// $Id: Sound.cxx,v 1.12 2004-06-13 04:54:25 bwmott Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include "Serializer.hxx"
|
#include "Serializer.hxx"
|
||||||
|
@ -22,9 +22,8 @@
|
||||||
#include "Sound.hxx"
|
#include "Sound.hxx"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Sound::Sound(uInt32 fragsize, uInt32 queuesize)
|
Sound::Sound(uInt32 fragsize)
|
||||||
: myPauseStatus(false),
|
: myLastRegisterSetCycle(0)
|
||||||
myLastSoundUpdateCycle(0)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,12 +32,24 @@ Sound::~Sound()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Sound::adjustCycleCounter(Int32 amount)
|
||||||
|
{
|
||||||
|
myLastRegisterSetCycle += amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Sound::mute(bool state)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Sound::init(Console* console, MediaSource* mediasrc, System* system)
|
void Sound::init(Console* console, MediaSource* mediasrc, System* system)
|
||||||
{
|
{
|
||||||
myConsole = console;
|
myConsole = console;
|
||||||
myMediaSource = mediasrc;
|
myMediaSource = mediasrc;
|
||||||
mySystem = system;
|
mySystem = system;
|
||||||
|
myLastRegisterSetCycle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -47,39 +58,22 @@ bool Sound::isSuccessfullyInitialized() const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Sound::reset()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Sound::set(uInt16 addr, uInt8 value, Int32 cycle)
|
||||||
|
{
|
||||||
|
myLastRegisterSetCycle = cycle;
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Sound::setVolume(Int32 volume)
|
void Sound::setVolume(Int32 volume)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void Sound::update()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void Sound::set(uInt16 addr, uInt8 value)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
bool Sound::save(Serializer& out)
|
|
||||||
{
|
|
||||||
out.putString("TIASound");
|
|
||||||
|
|
||||||
uInt8 reg = 0;
|
|
||||||
out.putLong(reg);
|
|
||||||
out.putLong(reg);
|
|
||||||
out.putLong(reg);
|
|
||||||
out.putLong(reg);
|
|
||||||
out.putLong(reg);
|
|
||||||
out.putLong(reg);
|
|
||||||
|
|
||||||
out.putLong(myLastSoundUpdateCycle);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool Sound::load(Deserializer& in)
|
bool Sound::load(Deserializer& in)
|
||||||
{
|
{
|
||||||
|
@ -95,7 +89,26 @@ bool Sound::load(Deserializer& in)
|
||||||
reg = (uInt8) in.getLong();
|
reg = (uInt8) in.getLong();
|
||||||
reg = (uInt8) in.getLong();
|
reg = (uInt8) in.getLong();
|
||||||
|
|
||||||
myLastSoundUpdateCycle = (Int32) in.getLong();
|
myLastRegisterSetCycle = (Int32)in.getLong();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool Sound::save(Serializer& out)
|
||||||
|
{
|
||||||
|
out.putString("TIASound");
|
||||||
|
|
||||||
|
uInt8 reg = 0;
|
||||||
|
out.putLong(reg);
|
||||||
|
out.putLong(reg);
|
||||||
|
out.putLong(reg);
|
||||||
|
out.putLong(reg);
|
||||||
|
out.putLong(reg);
|
||||||
|
out.putLong(reg);
|
||||||
|
|
||||||
|
out.putLong(myLastRegisterSetCycle);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
// SS SS tt ee ll ll aa aa
|
// SS SS tt ee ll ll aa aa
|
||||||
// SSSS ttt eeeee llll llll aaaaa
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
//
|
//
|
||||||
// Copyright (c) 1995-2002 by Bradford W. Mott
|
// Copyright (c) 1995-2004 by Bradford W. Mott
|
||||||
//
|
//
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Sound.hxx,v 1.10 2004-04-26 17:27:31 stephena Exp $
|
// $Id: Sound.hxx,v 1.11 2004-06-13 04:54:25 bwmott Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef SOUND_HXX
|
#ifndef SOUND_HXX
|
||||||
|
@ -32,16 +32,17 @@ class System;
|
||||||
It has almost no functionality, but is useful if one wishes
|
It has almost no functionality, but is useful if one wishes
|
||||||
to compile Stella with no sound support whatsoever.
|
to compile Stella with no sound support whatsoever.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony and Bradford W. Mott
|
||||||
@version $Id: Sound.hxx,v 1.10 2004-04-26 17:27:31 stephena Exp $
|
@version $Id: Sound.hxx,v 1.11 2004-06-13 04:54:25 bwmott Exp $
|
||||||
*/
|
*/
|
||||||
class Sound
|
class Sound
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
Create a new sound object
|
Create a new sound object. The init method must be invoked before
|
||||||
|
using the object.
|
||||||
*/
|
*/
|
||||||
Sound(uInt32 fragsize = 0, uInt32 queuesize = 0);
|
Sound(uInt32 fragsize = 512);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Destructor
|
Destructor
|
||||||
|
@ -49,6 +50,14 @@ class Sound
|
||||||
virtual ~Sound();
|
virtual ~Sound();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
The system cycle counter is being adjusting by the specified amount. Any
|
||||||
|
members using the system cycle counter should be adjusted as needed.
|
||||||
|
|
||||||
|
@param amount The amount the cycle counter is being adjusted by
|
||||||
|
*/
|
||||||
|
virtual void adjustCycleCounter(Int32 amount);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initializes the sound device. This must be called before any
|
Initializes the sound device. This must be called before any
|
||||||
calls are made to derived methods.
|
calls are made to derived methods.
|
||||||
|
@ -57,7 +66,7 @@ class Sound
|
||||||
@param mediasrc The mediasource
|
@param mediasrc The mediasource
|
||||||
@param system The system
|
@param system The system
|
||||||
*/
|
*/
|
||||||
void init(Console* console, MediaSource* mediasrc, System* system);
|
virtual void init(Console* console, MediaSource* mediasrc, System* system);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return true iff the sound device was successfully initialized.
|
Return true iff the sound device was successfully initialized.
|
||||||
|
@ -67,60 +76,51 @@ class Sound
|
||||||
virtual bool isSuccessfullyInitialized() const;
|
virtual bool isSuccessfullyInitialized() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Sets the volume of the sound device to the specified level. The
|
Set the mute state of the sound object. While muted no sound is played.
|
||||||
volume is given as a percentage from 0 to 100. A -1 indicates
|
|
||||||
that the volume shouldn't be changed at all.
|
|
||||||
|
|
||||||
@param percent The new volume percentage level for the sound device
|
@param state Mutes sound if true, unmute if false
|
||||||
*/
|
*/
|
||||||
virtual void setVolume(Int32 percent);
|
virtual void mute(bool state);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Update the sound device with audio samples.
|
Reset the sound device.
|
||||||
*/
|
*/
|
||||||
virtual void update();
|
virtual void reset();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Sets the sound register to a given value.
|
Sets the sound register to a given value.
|
||||||
|
|
||||||
@param addr The register address
|
@param addr The register address
|
||||||
@param value The value to save into the register
|
@param value The value to save into the register
|
||||||
|
@param cycle The system cycle at which the register is being updated
|
||||||
*/
|
*/
|
||||||
virtual void set(uInt16 addr, uInt8 value);
|
virtual void set(uInt16 addr, uInt8 value, Int32 cycle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Saves the current state of this device to the given Serializer.
|
Sets the volume of the sound device to the specified level. The
|
||||||
|
volume is given as a percentage from 0 to 100. Values outside
|
||||||
|
this range indicate that the volume shouldn't be changed at all.
|
||||||
|
|
||||||
@param out The serializer device to save to.
|
@param percent The new volume percentage level for the sound device
|
||||||
@return The result of the save. True on success, false on failure.
|
|
||||||
*/
|
*/
|
||||||
virtual bool save(Serializer& out);
|
virtual void setVolume(Int32 percent);
|
||||||
|
|
||||||
|
public:
|
||||||
/**
|
/**
|
||||||
Loads the current state of this device from the given Deserializer.
|
Loads the current state of this device from the given Deserializer.
|
||||||
|
|
||||||
@param in The deserializer device to load from.
|
@param in The deserializer device to load from.
|
||||||
@return The result of the load. True on success, false on failure.
|
@return The result of the load. True on success, false on failure.
|
||||||
*/
|
*/
|
||||||
virtual bool load(Deserializer& in);
|
virtual bool load(Deserializer& in);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Sets the pause status. While pause is selected, update()
|
Saves the current state of this device to the given Serializer.
|
||||||
should not play any sound.
|
|
||||||
|
|
||||||
@param status Toggle pause based on status
|
@param out The serializer device to save to.
|
||||||
|
@return The result of the save. True on success, false on failure.
|
||||||
*/
|
*/
|
||||||
void pause(bool status) { myPauseStatus = status; }
|
virtual bool save(Serializer& out);
|
||||||
|
|
||||||
/**
|
|
||||||
Resets the sound device.
|
|
||||||
*/
|
|
||||||
void reset() { myLastSoundUpdateCycle = 0; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
Resets the sound device.
|
|
||||||
*/
|
|
||||||
void setCycles(Int32 cycles) { myLastSoundUpdateCycle += cycles; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// The Console for the system
|
// The Console for the system
|
||||||
|
@ -132,11 +132,8 @@ class Sound
|
||||||
// The System for the system
|
// The System for the system
|
||||||
System* mySystem;
|
System* mySystem;
|
||||||
|
|
||||||
// The pause status
|
// Indicates the cycle when a sound register was last set
|
||||||
bool myPauseStatus;
|
Int32 myLastRegisterSetCycle;
|
||||||
|
|
||||||
// Indicates the CPU cycle when a TIA sound register was last updated
|
|
||||||
Int32 myLastSoundUpdateCycle;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue