Class: kodi::addon::CInstanceVisualization
Visualization add-on instance
Music visualization, or music visualisation, is a feature in Kodi that generates animated imagery based on a piece of music. The imagery is usually generated and rendered in real time synchronized to the music.
Visualization techniques range from simple ones (e.g., a simulation of an oscilloscope display) to elaborate ones, which often include a plurality of composited effects. The changes in the music's loudness and frequency spectrum are among the properties used as input to the visualization.
Include the header #include <kodi/addon-instance/Visualization.h> to use this class.
This interface allows the creation of visualizations for Kodi, based upon DirectX or/and OpenGL rendering with C++
code.
Additionally, there are several other functions available in which the child class can ask about the current hardware, including the device, display and several other parts.
Here's an example on addon.xml:
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="visualization.myspecialnamefor"
version="1.0.0"
name="My special visualization addon"
provider-name="Your Name">
<requires>@ADDON_DEPENDS@</requires>
<extension
point="xbmc.player.musicviz"
library_@PLATFORM@="@LIBRARY_FILENAME@"/>
<extension point="xbmc.addon.metadata">
<summary lang="en_GB">My visualization addon addon</summary>
<description lang="en_GB">My visualization addon description</description>
<platform>@PLATFORM@</platform>
</extension>
</addon>
Description to visualization related addon.xml values:
Name | Description |
point | Addon type specification
At all addon types and for this kind always "xbmc.player.musicviz". |
library_@PLATFORM@ | Sets the used library name, which is automatically set by cmake at addon build. |
Here is an example of the minimum required code to start a visualization:
#include <kodi/addon-instance/Visualization.h>
{
public:
CMyVisualization();
bool Start(int channels, int samplesPerSec, int bitsPerSample, std::string songName) override;
void AudioData(const float* audioData, int audioDataLength, float* freqData, int freqDataLength) override;
void Render() override;
};
CMyVisualization::CMyVisualization()
{
...
}
bool CMyVisualization::Start(int channels, int samplesPerSec, int bitsPerSample, std::string songName)
{
...
return true;
}
void CMyVisualization::AudioData(const float* audioData, int audioDataLength, float* freqData, int freqDataLength)
{
...
}
void CMyVisualization::Render()
{
...
}
ADDONCREATOR(CMyVisualization)
Definition: AddonBase.h:322
Definition: Visualization.h:396
Here is another example where the visualization is used together with other instance types:
#include <kodi/addon-instance/Visualization.h>
{
public:
CMyVisualization(KODI_HANDLE instance, const std::string& version);
bool Start(int channels, int samplesPerSec, int bitsPerSample, std::string songName) override;
void AudioData(const float* audioData, int audioDataLength, float* freqData, int freqDataLength) override;
void Render() override;
};
CMyVisualization::CMyVisualization(KODI_HANDLE instance, const std::string& version)
: kodi::addon::CInstanceAudioDecoder(instance, version)
{
...
}
bool CMyVisualization::Start(int channels, int samplesPerSec, int bitsPerSample, std::string songName)
{
...
return true;
}
void CMyVisualization::AudioData(const float* audioData, int audioDataLength, float* freqData, int freqDataLength)
{
...
}
void CMyVisualization::Render()
{
...
}
{
public:
CMyAddon() { }
const std::string& instanceID,
KODI_HANDLE instance,
const std::string& version,
KODI_HANDLE& addonInstance) override;
};
const std::string& instanceID,
KODI_HANDLE instance,
const std::string& version,
KODI_HANDLE& addonInstance)
{
{
addonInstance = new CMyVisualization(instance, version);
}
else if (...)
{
...
}
}
ADDONCREATOR(CMyAddon)
@ ADDON_LOG_INFO
1 : To include information messages in the log file.
Definition: addon_base.h:177
ADDON_STATUS
Definition: addon_base.h:128
@ ADDON_STATUS_OK
For everything OK and no error.
Definition: addon_base.h:130
@ ADDON_STATUS_UNKNOWN
Unknown and incomprehensible error.
Definition: addon_base.h:142
@ ADDON_INSTANCE_VISUALIZATION
Music visualization instance, see kodi::addon::CInstanceVisualization.
Definition: versions.h:238
virtual ADDON_STATUS CreateInstance(int instanceType, const std::string &instanceID, KODI_HANDLE instance, const std::string &version, KODI_HANDLE &addonInstance)
Instance created.
Definition: AddonBase.h:481
void ATTRIBUTE_HIDDEN Log(const AddonLog loglevel, const char *format,...)
Add a message to Kodi's log.
Definition: AddonBase.h:749
The destruction of the example class CMyVisualization
is called from Kodi's header. Manually deleting the add-on instance is not required.
◆ CInstanceVisualization() [1/2]
Visualization class constructor.
Used by an add-on that only supports visualizations.
◆ CInstanceVisualization() [2/2]
Visualization class constructor used to support multiple instance types.
- Parameters
-
[in] | instance | The instance value given to kodi::addon::CAddonBase::CreateInstance(...) . |
[in] | kodiVersion | [opt] Version used in Kodi for this instance, to allow compatibility to older Kodi versions. |
- Note
- Recommended to set
kodiVersion
.
Here's example about the use of this:
{
public:
CMyVisualization(KODI_HANDLE instance, const std::string& kodiVersion)
: kodi::addon::CInstanceAudioDecoder(instance, kodiVersion)
{
...
}
...
};
const std::string& instanceID,
KODI_HANDLE instance,
const std::string& version,
KODI_HANDLE& addonInstance)
{
addonInstance = new CMyVisualization(instance, version);
}
Definition: AudioDecoder.h:382
◆ ~CInstanceVisualization()
◆ Start()
virtual bool Start |
( |
int |
channels, |
|
|
int |
samplesPerSec, |
|
|
int |
bitsPerSample, |
|
|
std::string |
songName |
|
) |
| |
|
inlinevirtual |
Used to notify the visualization that a new song has been started.
- Parameters
-
[in] | channels | Number of channels in the stream |
[in] | samplesPerSec | Samples per second of stream |
[in] | bitsPerSample | Number of bits in one sample |
[in] | songName | The name of the currently-playing song |
- Returns
- true if start successful done
◆ Stop()
Used to inform the visualization that the rendering control was stopped.
◆ AudioData()
virtual void AudioData |
( |
const float * |
audioData, |
|
|
int |
audioDataLength, |
|
|
float * |
freqData, |
|
|
int |
freqDataLength |
|
) |
| |
|
inlinevirtual |
Pass audio data to the visualization.
- Parameters
-
[in] | audioData | The raw audio data |
[in] | audioDataLength | Length of the audioData array |
[in] | freqData | The FFT of the audio data |
[in] | freqDataLength | Length of frequency data array |
Values freqData and freqDataLength are used if GetInfo() returns true for the wantsFreq
parameter. Otherwise, freqData is set to nullptr
and freqDataLength is 0
.
◆ IsDirty()
Used to inform Kodi that the rendered region is dirty and need an update.
- Returns
- True if dirty
◆ Render()
Used to indicate when the add-on should render.
◆ GetInfo()
virtual void GetInfo |
( |
bool & |
wantsFreq, |
|
|
int & |
syncDelay |
|
) |
| |
|
inlinevirtual |
Used to get the number of buffers from the current visualization.
- Parameters
-
[out] | wantsFreq | Indicates whether the add-on wants FFT data. If set to true, the freqData and freqDataLength parameters of AudioData() are used |
[out] | syncDelay | The number of buffers to delay before calling AudioData() |
- Note
- If this function is not implemented, it will default to
wantsFreq
= false and syncDelay
= 0.
◆ GetPresets()
virtual bool GetPresets |
( |
std::vector< std::string > & |
presets | ) |
|
|
inlinevirtual |
Used to get a list of visualization presets the user can select. from.
- Parameters
-
[out] | presets | The vector list containing the names of presets that the user can select |
- Returns
- Return true if successful, or false if there are no presets to choose from
◆ GetActivePreset()
virtual int GetActivePreset |
( |
| ) |
|
|
inlinevirtual |
Get the index of the current preset.
- Returns
- Index number of the current preset
◆ IsLocked()
virtual bool IsLocked |
( |
| ) |
|
|
inlinevirtual |
Check if the add-on is locked to the current preset.
- Returns
- True if locked to the current preset
◆ PrevPreset()
virtual bool PrevPreset |
( |
| ) |
|
|
inlinevirtual |
Load the previous visualization preset.
- Returns
- Return true if the previous preset was loaded
◆ NextPreset()
virtual bool NextPreset |
( |
| ) |
|
|
inlinevirtual |
Load the next visualization preset.
- Returns
- Return true if the next preset was loaded
◆ LoadPreset()
virtual bool LoadPreset |
( |
int |
select | ) |
|
|
inlinevirtual |
Load a visualization preset.
This function is called after a new preset is selected.
- Parameters
-
[in] | select | Preset index to use |
- Returns
- Return true if the preset is loaded
◆ RandomPreset()
virtual bool RandomPreset |
( |
| ) |
|
|
inlinevirtual |
Switch to a new random preset.
- Returns
- Return true if a random preset was loaded
◆ LockPreset()
virtual bool LockPreset |
( |
bool |
lockUnlock | ) |
|
|
inlinevirtual |
Lock the current visualization preset, preventing it from changing.
- Parameters
-
[in] | lockUnlock | If set to true, the preset should be locked |
- Returns
- Return true if the current preset is locked
◆ RatePreset()
virtual bool RatePreset |
( |
bool |
plusMinus | ) |
|
|
inlinevirtual |
Used to increase/decrease the visualization preset rating.
- Parameters
-
[in] | plusMinus | If set to true the rating is increased, otherwise decreased |
- Returns
- Return true if the rating is modified
◆ UpdateAlbumart()
virtual bool UpdateAlbumart |
( |
std::string |
albumart | ) |
|
|
inlinevirtual |
Inform the visualization of the current album art image.
- Parameters
-
[in] | albumart | Path to the current album art image |
- Returns
- Return true if the image is used
◆ UpdateTrack()
Inform the visualization of the current track's tag information.
- Parameters
-
[in] | track | Visualization track information structure |
- Returns
- Return true if the track information is used
The following table contains values that can be set with class VisualizationTrack :
Example:
#include <kodi/addon-instance/Visualization.h>
{
public:
CMyVisualization(KODI_HANDLE instance, const std::string& version);
...
private:
};
{
m_runningTrack = track;
return true;
}
Definition: Visualization.h:40