1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #pragma once
- #include "foundation/dispatch.h"
- /* ok, this could have easily been a config group, but I decided to make it its own interface for two reasons
- 1) it's a little more maintainable and easier to understand and use, rather than just using a generic key/value interface
- 2) the original ReplayGain specs suggests using the average gain of the last 10 played tracks in cases of missing replay gain data
- http://replaygain.hydrogenaudio.org/proposal/player_scale.html
- So we need a way to have the playback object pass along gain values so they can be averages in this way
- */
- // {1CE24DEC-A189-4BC7-86A7-C6CDB0F8953D}
- static const GUID replaygain_settings_interface_guid =
- { 0x1ce24dec, 0xa189, 0x4bc7, { 0x86, 0xa7, 0xc6, 0xcd, 0xb0, 0xf8, 0x95, 0x3d } };
- class ifc_metadata;
- class ifc_replaygain_settings : public Wasabi2::Dispatchable
- {
- protected:
- ifc_replaygain_settings() : Wasabi2::Dispatchable(DISPATCHABLE_VERSION) {}
- ~ifc_replaygain_settings() {}
- public:
- static GUID GetInterfaceGUID() { return replaygain_settings_interface_guid; }
- enum
- {
- REPLAYGAIN_OFF=0x0,
- REPLAYGAIN_ON=0x1,
- REPLAYGAIN_MODE_TRACK=0x2,
- REPLAYGAIN_MODE_ALBUM=0x4,
- REPLAYGAIN_MODE_MASK=REPLAYGAIN_MODE_TRACK|REPLAYGAIN_MODE_ALBUM,
- REPLAYGAIN_PREVENT_CLIPPING=0x8,
- REPLAYGAIN_AUTO=0x16, // automatically determine gain values for unscanned tracks from prior history
- };
- /* pass the ifc_metadata associated with the track
- warning values:
- NErr_Success: gain is set to the gain adjustment to play this track with
- NErr_False: gain is set to the default gain adjustment because there was no metadata
- NErr_Unknown: gain is set to the default gain adjustment, because the metadata object does not understand the ReplayGain metadata keys (MetadataKeys::TRACK_GAIN, etc)
- return values:
- NErr_Success: *gain has been assigned and is valid
- NErr_Disabled: ReplayGain is turned off
- */
- int GetGain(ifc_metadata *metadata, double *gain, int *warning) { return ReplayGainSettings_GetGain(metadata, gain, warning); }
- /* Adds a track to the history, which is optionally used when playing back tracks without ReplayGain
- pass the track length (or an estimate). Pass 0.0 for length if don't know.
- You should only call this if GetGain returned NErr_Success and there was no warning!
- */
- int AddToHistory(double seconds, double gain) { return ReplayGainSettings_AddToHistory(seconds, gain); }
- private:
- virtual int WASABICALL ReplayGainSettings_GetGain(ifc_metadata *metadata, double *gain, int *warning)=0;
- virtual int WASABICALL ReplayGainSettings_AddToHistory(double seconds, double gain)=0;
- enum
- {
- DISPATCHABLE_VERSION,
- };
- };
|