cog/Frameworks/libsidplay/sidplay-residfp-code/.svn/pristine/38/388e1d2be6873a775dd41a83fe9...

221 lines
5.8 KiB
Plaintext

/*
* This file is part of sidplayfp, a console SID player.
*
* Copyright 2011-2014 Leandro Nini
* Copyright 2000-2001 Simon White
*
* 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 PLAYER_H
#define PLAYER_H
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <string>
#include <sidplayfp/SidTune.h>
#include <sidplayfp/sidplayfp.h>
#include <sidplayfp/event.h>
#include <sidplayfp/SidConfig.h>
#include <sidplayfp/SidTuneInfo.h>
#include <sidplayfp/SidDatabase.h>
#include "audio/IAudio.h"
#include "audio/AudioConfig.h"
#include "audio/null/null.h"
#include "IniConfig.h"
#ifdef HAVE_TSID
# if HAVE_TSID > 1
# include <tsid2/tsid2.h>
# define TSID TSID2
# else
# include <tsid/tsid.h>
# endif
#endif
typedef enum { black, red, green, yellow, blue, magenta, cyan, white }
player_colour_t;
typedef enum { tableStart, tableMiddle, tableSeparator, tableEnd }
player_table_t;
typedef enum
{
playerError = 0, playerRunning, playerPaused, playerStopped,
playerRestart, playerExit, playerFast = 128,
playerFastRestart = playerRestart | playerFast,
playerFastExit = playerExit | playerFast
} player_state_t;
typedef enum
{
/* Same as EMU_DEFAULT except no soundcard.
Still allows wav generation */
EMU_NONE = 0,
/* The following require a soundcard */
EMU_DEFAULT, EMU_RESIDFP, EMU_RESID,
/* The following should disable the soundcard */
EMU_HARDSID, EMU_SIDSTATION, EMU_COMMODORE,
EMU_SIDSYN, EMU_END} SIDEMUS;
typedef enum
{
/* Define possible output sources */
OUT_NULL = 0,
/* Hardware */
OUT_SOUNDCARD,
/* File creation support */
OUT_WAV, OUT_AU, OUT_END
} OUTPUTS;
// Error and status message numbers.
enum
{
ERR_SYNTAX = 0,
ERR_NOT_ENOUGH_MEMORY,
ERR_SIGHANDLER,
ERR_FILE_OPEN
};
void displayError (const char *arg0, unsigned int num);
// Grouped global variables
class ConsolePlayer: private Event
{
private:
#ifdef HAVE_SIDPLAYFP_BUILDERS_RESIDFP_H
static const char RESIDFP_ID[];
#endif
#ifdef HAVE_SIDPLAYFP_BUILDERS_RESID_H
static const char RESID_ID[];
#endif
#ifdef HAVE_SIDPLAYFP_BUILDERS_HARDSID_H
static const char HARDSID_ID[];
#endif
#ifdef HAVE_TSID
TSID m_tsid;
#endif
const char* const m_name;
sidplayfp m_engine;
SidConfig m_engCfg;
SidTune m_tune;
player_state_t m_state;
const char* m_outfile;
EventContext *m_context;
std::string m_filename;
IniConfig m_iniCfg;
SidDatabase m_database;
// Display parameters
uint_least8_t m_quietLevel;
uint_least8_t m_verboseLevel;
bool m_cpudebug;
bool v1mute, v2mute, v3mute;
bool v4mute, v5mute, v6mute;
int m_precision;
struct m_filter_t
{
// Filter parameter for reSID
double bias;
// Filter parameters for reSIDfp
double filterCurve6581;
int filterCurve8580;
bool enabled;
} m_filter;
struct m_driver_t
{
OUTPUTS output; // Selected output type
SIDEMUS sid; // Sid emulation
bool file; // File based driver
AudioConfig cfg;
IAudio* selected; // Selected Output Driver
IAudio* device; // HW/File Driver
Audio_Null null; // Used for everything
} m_driver;
struct m_timer_t
{ // secs
uint_least32_t start;
uint_least32_t current;
uint_least32_t stop;
uint_least32_t length;
bool valid;
} m_timer;
struct m_track_t
{
uint_least16_t first;
uint_least16_t selected;
uint_least16_t songs;
bool loop;
bool single;
} m_track;
struct m_speed_t
{
uint_least8_t current;
uint_least8_t max;
} m_speed;
private:
// Console
void consoleColour (player_colour_t colour, bool bold);
void consoleTable (player_table_t table);
void consoleRestore (void);
// Command line args
bool parseTime (const char *str, uint_least32_t &time);
bool parseAddress (const char *str, uint_least16_t &address);
void displayArgs (const char *arg = NULL);
void displayDebugArgs ();
bool createOutput (OUTPUTS driver, const SidTuneInfo *tuneInfo);
bool createSidEmu (SIDEMUS emu);
void displayError (const char *error);
void displayError (unsigned int num) { ::displayError (m_name, num); }
void decodeKeys (void);
void event (void);
void emuflush (void);
void menu (void);
const char* getModel (SidTuneInfo::model_t model);
IAudio* getWavFile(const SidTuneInfo *tuneInfo);
public:
ConsolePlayer (const char * const name);
virtual ~ConsolePlayer() {}
int args (int argc, const char *argv[]);
bool open (void);
void close (void);
bool play (void);
void stop (void);
player_state_t state (void) { return m_state; }
};
#endif // PLAYER_H