This was just an experiment, and was hashed in to test it out. It does not look like it would be a very efficient thing to ship this in the main app at all, especially since the collection of presets is so dang huge. It was also never meant to replace the existing visualizations, but instead as another option. One of the things from this branch will make it into the final: Optional nullability of the Visualization Manager parameters, since technically they're both checked on call. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
136 lines
5.8 KiB
C
136 lines
5.8 KiB
C
/**
|
|
* @file playlist_playback.h
|
|
* @copyright 2003-2023 projectM Team
|
|
* @brief Playback control functions.
|
|
*
|
|
* projectM -- Milkdrop-esque visualisation SDK
|
|
* Copyright (C)2003-2023 projectM Team
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
* See 'LICENSE.txt' included within this release
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "projectM-4/playlist_types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief Enable or disable shuffle mode.
|
|
* @param instance The playlist manager instance.
|
|
* @param shuffle True to enable random shuffling, false to play presets in playlist order.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT void projectm_playlist_set_shuffle(projectm_playlist_handle instance, bool shuffle);
|
|
|
|
/**
|
|
* @brief Retrieves the current state of shuffle mode.
|
|
* @param instance The playlist manager instance.
|
|
* @return True if shuffle mode is enabled, false otherwise.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT bool projectm_playlist_get_shuffle(projectm_playlist_handle instance);
|
|
|
|
/**
|
|
* @brief Sets the number of retries after failed preset switches.
|
|
* @note Don't set this value too high, as each retry is done recursively.
|
|
* @param instance The playlist manager instance.
|
|
* @param retry_count The number of retries after failed preset switches. Default is 5. Set to 0
|
|
* to simply forward the failure event from projectM.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT void projectm_playlist_set_retry_count(projectm_playlist_handle instance, uint32_t retry_count);
|
|
|
|
/**
|
|
* @brief Returns the number of retries after failed preset switches.
|
|
* @param instance The playlist manager instance.
|
|
* @return The number of retries after failed preset switches.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT uint32_t projectm_playlist_get_retry_count(projectm_playlist_handle instance);
|
|
|
|
/**
|
|
* @brief Plays the preset at the requested playlist position and returns the actual playlist index.
|
|
*
|
|
* If the requested position is out of bounds, the returned position will wrap to 0, effectively
|
|
* repeating the playlist as if shuffle was disabled. It has no effect if the playlist is empty.
|
|
*
|
|
* This method ignores the shuffle setting and will always jump to the requested index, given it is
|
|
* within playlist bounds.
|
|
*
|
|
* @param instance The playlist manager instance.
|
|
* @param new_position The new position to jump to.
|
|
* @param hard_cut If true, the preset transition is instant. If true, a smooth transition is played.
|
|
* @return The new playlist position. If the playlist is empty, 0 will be returned.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT uint32_t projectm_playlist_set_position(projectm_playlist_handle instance, uint32_t new_position,
|
|
bool hard_cut);
|
|
|
|
/**
|
|
* @brief Returns the current playlist position.
|
|
* @param instance The playlist manager instance.
|
|
* @return The current playlist position. If the playlist is empty, 0 will be returned.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT uint32_t projectm_playlist_get_position(projectm_playlist_handle instance);
|
|
|
|
/**
|
|
* @brief Plays the next playlist item and returns the index of the new preset.
|
|
*
|
|
* If shuffle is on, it will select a random preset, otherwise the next in the playlist. If the
|
|
* end of the playlist is reached in continuous mode, it will wrap back to 0.
|
|
*
|
|
* The old playlist item is added to the history.
|
|
*
|
|
* @param instance The playlist manager instance.
|
|
* @param hard_cut If true, the preset transition is instant. If true, a smooth transition is played.
|
|
* @return The new playlist position. If the playlist is empty, 0 will be returned.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT uint32_t projectm_playlist_play_next(projectm_playlist_handle instance, bool hard_cut);
|
|
|
|
/**
|
|
* @brief Plays the previous playlist item and returns the index of the new preset.
|
|
*
|
|
* If shuffle is on, it will select a random preset, otherwise the next in the playlist. If the
|
|
* end of the playlist is reached in continuous mode, it will wrap back to 0.
|
|
*
|
|
* The old playlist item is added to the history.
|
|
*
|
|
* @param instance The playlist manager instance.
|
|
* @param hard_cut If true, the preset transition is instant. If true, a smooth transition is played.
|
|
* @return The new playlist position. If the playlist is empty, 0 will be returned.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT uint32_t projectm_playlist_play_previous(projectm_playlist_handle instance, bool hard_cut);
|
|
|
|
/**
|
|
* @brief Plays the last preset played in the history and returns the index of the preset.
|
|
*
|
|
* The history keeps track of the last 1000 presets and will go back in the history. The
|
|
* playback history will be cleared whenever the playlist items are changed.
|
|
*
|
|
* If the history is empty, this call behaves identical to projectm_playlist_play_previous(),
|
|
* but the item is not added to the history.
|
|
*
|
|
* Presets which failed to load are not recorded in the history and thus will be skipped when
|
|
* calling this method.
|
|
*
|
|
* @param instance The playlist manager instance.
|
|
* @param hard_cut If true, the preset transition is instant. If true, a smooth transition is played.
|
|
* @return The new playlist position. If the playlist is empty, 0 will be returned.
|
|
*/
|
|
PROJECTM_PLAYLIST_EXPORT uint32_t projectm_playlist_play_last(projectm_playlist_handle instance, bool hard_cut);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|