// SPDX-License-Identifier: MIT // // Copyright (c) 2009-2014 Cesar Rincon "NightFox" // // NightFox LIB - Include de funciones de sonido // http://www.nightfoxandco.com/ // Version 20140413 #ifdef __cplusplus extern "C" { #endif #ifndef __NF_SOUND_H__ #define __NF_SOUND_H__ #include /// @file nf_sound.h /// @brief Sound support functions. /// @defgroup nf_sound Sound support functions. /// /// Simple helpers to load and play raw PCM sound files. /// /// @{ /// Number of slot availables for raw sound effects #define NF_SLOTS_RAWSOUND 32 /// Buffers of all loaded sound files extern char* NF_BUFFER_RAWSOUND[NF_SLOTS_RAWSOUND]; /// Struct that holds information about the loaded sound files typedef struct { bool available; ///< True if this slot is available u32 size; ///< Size of the sound effect in bytes u16 freq; ///< Frecuency of the sample u8 format; ///< Format of the sample } NF_TYPE_RAWSOUND_INFO; /// Information of all sound effects. extern NF_TYPE_RAWSOUND_INFO NF_RAWSOUND[NF_SLOTS_RAWSOUND]; /// Initialize all buffers and variables to load sound files. /// /// You must use this function once before loading or using any sound file. /// Remember to initialize the DS sound engine using soundEnable(). void NF_InitRawSoundBuffers(void); /// Resets all sound buffers and clears the data in them. /// /// It's useful when you change a level in the game, for example. void NF_ResetRawSoundBuffers(void); /// Load a RAW file from the filesystem to RAM. /// /// To convert sound files to "RAW" format you can use the free program "Switch" /// http://www.nch.com.au/switch/plus.html. The best parameters for "RAW" files /// on the DS are: 8 bits signed, mono, 11025 Hz or 22050 Hz. /// /// Example: /// ``` /// // Load "music.raw" to slot 1. This file is encoded as 8 bit at 22050 Hz /// NF_LoadRawSound("music", 1, 22050, 0); /// ``` /// /// @param file File name without extension /// @param id Destination slot number (0 - 31) /// @param freq Frequency of the sample in Hz (11025, 22050, etc) /// @param format Sample format (0 -> 8 bits, 1 -> 16 bits, 2 -> ADPCM). void NF_LoadRawSound(const char* file, u16 id, u16 freq, u8 format); /// Deletes from RAM the sound file stored in the specified slot. /// /// @param id Slot number (0 - 31) void NF_UnloadRawSound(u8 id); /// Play the sound file loaded in the specified slot. /// /// If you want to loop the sound you must also set the sample number where the /// loop starts. /// /// This fuction also returns the channel number asigned to the playback. /// /// Example: /// ``` /// // Play the sound stored in slot 1 with full volume (127), centered (64), /// // with looping enabled from the beginning. /// NF_PlayRawSound(1, 127, 64, true, 0); /// ``` /// /// You can use libnds functions to pause, stop and set the volume of the sound /// while it plays. /// /// @param id Slot number (0 - 31) /// @param volume Volume (0 - 127) /// @param pan Panning. 0: left, 64: center, 127: right. /// @param loop True if you want the sound to loop. /// @param loopfrom Loop starting point /// @return Channel number that is playing the sound. u8 NF_PlayRawSound(u8 id, u8 volume, u8 pan, bool loop, u16 loopfrom); /// @} #endif #ifdef __cplusplus } #endif