winamp/Src/Wasabi/api/core/corehandle.h

561 lines
12 KiB
C++

#ifndef _COREHANDLE_H
#define _COREHANDLE_H
#include <api/syscb/callbacks/corecb.h>
// a helper class to access the playback cores within an object for you
typedef unsigned int CoreToken;
#define NO_CORE_TOKEN (CoreToken)(0xffffffff)
// Fwd References
class CfgItem;
class ItemSequencer;
/**
Helper class to access the currently instantiated
playback cores.
To create a corehandle on the main playback core
use the core token value from the enum ("maincore_token") or
the core name "main".
Here is an example:
CoreHandle * ch = new CoreHandle("main");
@short Access playback cores.
@author Nullsoft
@ver 1.0
@see Core
*/
class CoreHandle {
public:
enum { maincore_token=0 };
/**
Create a new CoreHandle while optionally
setting the core token to be used.
Core tokens are handles to cores
currently instantiated.
@see CoreHandle(const char *name)
@param token Core token of the core to attach to.
*/
CoreHandle(CoreToken token=maincore_token);
/**
Create a new CoreHandle for a core
using it's name.
The main core name is "main".
@see CoreHandle(CoreToken toke=maincore_token)
@param name Name of the core to attach to.
*/
CoreHandle(const wchar_t *name);
/**
Detaches the CoreHandle from the Core.
*/
virtual ~CoreHandle();
int isCoreLoaded(); // are we attached to a core?
/**
Get the list of supported extensions
from the core. This is a zero delimited list
with double zero termination.
@see getExtSupportedExtensions()
@see getExtensionFamily()
@ret List of supported extensions.
*/
const char *getSupportedExtensions(); //just the *.mp3 or whatever
/**
Get the extended list of supported extensions
from the core. This will include the proper
names of the extensions, for example:
"MP3 Files (*.mp3)".
This is returned as a zero delimited list with double
zero termination.
@see getSupportedExtensions()
@see getExtensionFamily()
@ret Extended list of supported extensions.
*/
const char *getExtSupportedExtensions(); // including names
/**
Get the family name to which the extension
is associated with (Families are "Audio", "Video", etc.)
@see getExtSupportedExtensions()
@see getSupportedExtensions()
@ret Family name of the extension.
@param extension Extension to get family name of.
*/
const wchar_t *getExtensionFamily(const wchar_t *extension);
/**
Register an extension with the core.
@see unregisterExtension()
@see getExtSupportedExtensions()
@see getSupportedExtensions()
@see getExtensionFamily()
@param extensions Extension to register.
@param extension_name Name of the extension.
*/
void registerExtension(const char *extensions, const char *extension_name);
/**
Unregister an extension with the core.
@see registerExtension()
@see getExtSupportedExtensions()
@see getSupportedExtensions()
@see getExtensionFamily()
@param extensions Extension to unregister.
*/
void unregisterExtension(const char *extensions);
String getTitle();
/**
Set the next file to be played by the core.
You can manually select the output of this
file. Either "WAVEOUT" or "DIRECTSOUND". If
you do not specify one, it will be automatically
selected for you.
@ret 1, success; 0, failure;
@param playstring Playstring of the next file to be played.
@param destination Output to be used for the next file.
*/
int setNextFile(const char *playstring, const char *destination=NULL);
/**
Get the playback status of the core.
@see pause()
@see play()
@see stop()
@ret -1, Paused; 0, Stopped; 1, Playing;
*/
int getStatus(); // returns -1 if paused, 0 if stopped and 1 if playing
/**
Get the playstring of the currently playing
item.
@ret Playstring of the currently playing item.
*/
const char *getCurrent();
/**
Get the number of items (tracks) present
in the currently registered sequencer.
@see getCurPlaybackNumber()
@ret Number of items present in the sequencer.
*/
int getNumTracks();
/**
Get the index number of the currently
playing item of the currently registered
sequencer.
@see getNumTracks()
@ret Index number (in the sequencer) of the item playing.
*/
int getCurPlaybackNumber();
/**
Get the playback position of the currently
playing file.
@see getWritePosition()
@see getLength()
@see setPosition()
@ret Position in the file (in milliseconds).
*/
int getPosition();
/**
Help?
@see getPosition()
@see getLength()
@see setPosition()
@ret Current write position (in milliseconds).
*/
int getWritePosition();
/**
Seek to a specific position in the
currently playing item.
@see getPosition()
@see getLength()
@see getWritePosition()
@ret 1, Success; 0, Failure;
@param ms Position in the file (in milliseconds, 0 being the beginning).
*/
int setPosition(int ms);
/**
Get the length of the currently
playing item.
@see getPosition()
@see setPosition()
@see getWritePosition()
@ret Length of the item (in milliseconds).
*/
int getLength();
// this method queries the core plugins directly, bypassing the db
/**
*/
int getPluginData(const char *playstring, const char *name,
char *data, int data_len, int data_type=0); // returns size of data
/**
Get the volume of the core.
@see setVolume()
@see getMute()
@see setMute()
@ret Volume (0 to 255).
*/
unsigned int getVolume(); // 0..255
/**
Set the volume of the core.
@see getVolume()
@see getMute()
@see setMute()
@param vol Volume (0 to 255).
*/
void setVolume(unsigned int vol); // 0..255
/**
Get the panning value of the core.
@see setPan()
@ret Panning value (-127 [left] to 127 [right]).
*/
int getPan(); // -127..127
/**
Set the panning value of the core.
@see getPan()
@param bal Panning value (-127 [left] to 127 [right])
*/
void setPan(int bal); // -127..127
/**
Mute the output.
@see getVolume()
@see setVolume()
@see getMute()
@param mute 0, No muting; 1, Mute;
*/
void setMute(int mute);
/**
Get the mute state of the output.
@see getVolume()
@see setVolume()
@see setMute()
@ret 0, Not muted; 1, Muted;
*/
int getMute();
// register here for general callbacks in core status.
/**
Register a callback with the core to
receive core status callbacks.
@see delCallback()
@param cb Core Callback to register.
*/
void addCallback(CoreCallback *cb);
/**
Unregister a callback with the core.
@see addCallback()
@param cb Core Callback to unregister.
*/
void delCallback(CoreCallback *cb);
// get visualization data, returns 0 if you should blank out
/**
Get visualization data for the currently
playing item.
We suggest using a struct like this to read the vis
data:
typedef struct {
enum {
LEFT = 0,
RIGHT = 1
};
unsigned char spectrumData[2][576];
char waveformData[2][576];
} VisData;
A call using this struct would like so:
getVisData(&myVisData, sizeof(VisData));
@see getLeftVuMeter()
@see getRightVuMeter()
@ret 0, If there is no VIS data; > 0, VIS data available;
@param dataptr Buffer to receive VIS data.
@param sizedataptr Size of the buffer.
*/
int getVisData(void *dataptr, int sizedataptr);
/**
Get the value of the left VU meter.
@see getVisData()
@see getRightVuMeter()
@ret Value of the left VU meter (0 to 255).
*/
int getLeftVuMeter();
/**
Get the value of the left VU meter.
@see getVisData()
@see getLeftVuMeter()
@ret Value of the right VU meter (0 to 255).
*/
int getRightVuMeter();
/**
Register an item sequencer with the core.
The item sequencer feeds the playstrings
of the next item to be played to the core.
@see deregisterSequencer()
@ret 1, Success; 0, Failure;
@param seq Sequencer to register.
*/
int registerSequencer(ItemSequencer *seq);
/**
Unregister a sequencer with the core.
@see registerSequencer()
@ret 1, Success; 0, Failure;
@param seq Sequencer to unregister.
*/
int deregisterSequencer(ItemSequencer *seq);
ItemSequencer *getSequencer();
/**
Get the EQ status.
@see setEqStatus()
@see getEqPreamp()
@see setEqPreamp()
@see getEqBand()
@see setEqBand()
@ret 1, On; 0, Off;
*/
int getEqStatus(); // returns 1 if on, 0 if off
/**
Set the EQ state.
@see getEqStatus()
@see getEqPreamp()
@see setEqPreamp()
@see getEqBand()
@see setEqBand()
@param enable 1, On; 0, Off;
*/
void setEqStatus(int enable);
/**
Get the pre-amp value of the EQ.
@see setEqStatus()
@see getEqStatus()
@see setEqPreamp()
@see getEqBand()
@see setEqBand()
@ret Pre-amp value (-127 [-20dB] to 127 [+20dB]).
*/
int getEqPreamp(); // -127 to 127 (-20db to +20db)
/**
Set the pre-amp value of the EQ.
@see setEqStatus()
@see getEqStatus()
@see getEqPreamp()
@see getEqBand()
@see setEqBand()
@param pre Pre-amp value (-127 [-20dB] to 127 [+20dB]).
*/
void setEqPreamp(int pre);
/**
Get the value of an EQ band. There
are 10 bands available.
Here is the list:
0 - 60 Hz 1 - 170 Hz
2 - 310 Hz 3 - 600 Hz
4 - 1 kHz 5 - 3 kHz
6 - 6 kHz 7 - 12 kHz
8 - 14 kHz 9 - 16 kHz
@see setEqStatus()
@see getEqStatus()
@see getEqPreamp()
@see setEqBand()
@ret EQ band value (-127 [-20dB] to 127 [+20dB]).
@param band EQ band to read (0 to 9).
*/
int getEqBand(int band); // band=0-9
/**
Set the value of an EQ band. There
are 10 bands available.
Here is the list:
0 - 60 Hz 1 - 170 Hz
2 - 310 Hz 3 - 600 Hz
4 - 1 kHz 5 - 3 kHz
6 - 6 kHz 7 - 12 kHz
8 - 14 kHz 9 - 16 kHz
@see setEqStatus()
@see getEqStatus()
@see getEqPreamp()
@see setEqBand()
@param band EQ band to set (0 to 9)
@param val EQ band value (-127 [-20dB] to 127 [+20dB]).
*/
void setEqBand(int band, int val);
/**
Get the automatic EQ preset loading state.
@see setEqAuto()
@ret 1, On; 0, Off;
*/
int getEqAuto(); // returns 1 if on, 0 if off
/**
Set the automatic EQ preset loading.
@see getEqAuto()
@param enable 1, On; 0, Off;
*/
void setEqAuto(int enable);
/**
Trigger the previous event.
@see next()
@see play()
@see stop()
@see pause()
*/
void prev();
/**
Trigger the play event.
@see prev()
@see next()
@see stop()
@see pause()
*/
void play();
/**
Trigger the pause event.
@see prev()
@see next()
@see stop()
@see play()
*/
void pause();
/**
Trigger the stop event.
*/
void stop();
/**
Trigger the next event.
@see prev()
@see stop()
@see play()
@see pause()
*/
void next();
/**
Set the thread priority of the core.
@see getPriority()
@param priority Thread priority.
*/
void setPriority(int priority);
/**
Get the thread priority of the core.
@see setPriority()
@ret Thread priority level.
*/
int getPriority();
/**
As the function name implies, rebuilds the converters chain (no shit?)
*/
void rebuildConvertersChain();
/**
Send a message to all converters in the current
playback chain of a core.
It's possible to pass any pointer using this messanging
system, as long as the pointer is valid across dll boundries.
@param msg Message.
@param value Message value.
*/
int sendConvertersMsg(const char *msg, const char *value);
private:
void userButton(int button);
CoreToken token;
int createdcore;
};
#endif