📄 our_sdl_audio.h
字号:
/* SDL - Simple DirectMedia Layer Copyright (C) 1997-2004 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Sam Lantinga slouken@libsdl.org*/#ifdef SAVE_RCSIDstatic char rcsid = "@(#) $Id: Our_SDL_audio.h,v 1.5 2004/12/03 23:33:38 wmaycisco Exp $";#endif/* Access to the raw audio mixing buffer for the SDL library */#ifndef _OURSDL_audio_h#define _OURSDL_audio_h#include <SDL.h>#include <SDL_thread.h>#include <begin_code.h>/* Set up for C function definitions, even when using C++ */#ifdef __cplusplusextern "C" {#endif/* Function prototypes *//* These functions are used internally, and should not be used unless you * have a specific need to specify the audio driver you want to use. * You should normally use SDL_Init() or SDL_InitSubSystem(). */extern DECLSPEC int SDLCALL Our_SDL_AudioInit(const char *driver_name);extern DECLSPEC void SDLCALL Our_SDL_AudioQuit(void);/* This function fills the given character buffer with the name of the * current audio driver, and returns a pointer to it if the audio driver has * been initialized. It returns NULL if no driver has been initialized. */extern DECLSPEC char * SDLCALL Our_SDL_AudioDriverName(char *namebuf, int maxlen);/* * This function opens the audio device with the desired parameters, and * returns 0 if successful, placing the actual hardware parameters in the * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio * data passed to the callback function will be guaranteed to be in the * requested format, and will be automatically converted to the hardware * audio format if necessary. This function returns -1 if it failed * to open the audio device, or couldn't set up the audio thread. * * When filling in the desired audio spec structure, * 'desired->freq' should be the desired audio frequency in samples-per-second. * 'desired->format' should be the desired audio format. * 'desired->samples' is the desired size of the audio buffer, in samples. * This number should be a power of two, and may be adjusted by the audio * driver to a value more suitable for the hardware. Good values seem to * range between 512 and 8096 inclusive, depending on the application and * CPU speed. Smaller values yield faster response time, but can lead * to underflow if the application is doing heavy processing and cannot * fill the audio buffer in time. A stereo sample consists of both right * and left channels in LR ordering. * Note that the number of samples is directly related to time by the * following formula: ms = (samples*1000)/freq * 'desired->size' is the size in bytes of the audio buffer, and is * calculated by SDL_OpenAudio(). * 'desired->silence' is the value used to set the buffer to silence, * and is calculated by SDL_OpenAudio(). * 'desired->callback' should be set to a function that will be called * when the audio device is ready for more data. It is passed a pointer * to the audio buffer, and the length in bytes of the audio buffer. * This function usually runs in a separate thread, and so you should * protect data structures that it accesses by calling SDL_LockAudio() * and SDL_UnlockAudio() in your code. * 'desired->userdata' is passed as the first parameter to your callback * function. * * The audio device starts out playing silence when it's opened, and should * be enabled for playing by calling SDL_PauseAudio(0) when you are ready * for your audio callback function to be called. Since the audio driver * may modify the requested size of the audio buffer, you should allocate * any local mixing buffers after you open the audio device. */#define AUDIO_FORMAT_HW_AC3 0xfefeextern DECLSPEC int SDLCALL Our_SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained);/* * Get the current audio state: */extern DECLSPEC SDL_audiostatus SDLCALL Our_SDL_GetAudioStatus(void);/* * This function pauses and unpauses the audio callback processing. * It should be called with a parameter of 0 after opening the audio * device to start playing sound. This is so you can safely initialize * data for your callback function after opening the audio device. * Silence will be written to the audio device during the pause. */extern DECLSPEC void SDLCALL Our_SDL_PauseAudio(int pause_on);/* * This function takes a source format and rate and a destination format * and rate, and initializes the 'cvt' structure with information needed * by SDL_ConvertAudio() to convert a buffer of audio data from one format * to the other. * This function returns 0, or -1 if there was an error. */extern DECLSPEC int SDLCALL Our_SDL_BuildAudioCVT(SDL_AudioCVT *cvt, Uint16 src_format, Uint8 src_channels, int src_rate, Uint16 dst_format, Uint8 dst_channels, int dst_rate);/* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), * created an audio buffer cvt->buf, and filled it with cvt->len bytes of * audio data in the source format, this function will convert it in-place * to the desired format. * The data conversion may expand the size of the audio data, so the buffer * cvt->buf should be allocated after the cvt structure is initialized by * SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long. */extern DECLSPEC int SDLCALL Our_SDL_ConvertAudio(SDL_AudioCVT *cvt);/* * This takes two audio buffers of the playing audio format and mixes * them, performing addition, volume adjustment, and overflow clipping. * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME * for full audio volume. Note this does not change hardware volume. * This is provided for convenience -- you can mix your own audio data. */#define SDL_MIX_MAXVOLUME 128extern DECLSPEC void SDLCALL Our_SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume);/* * The lock manipulated by these functions protects the callback function. * During a LockAudio/UnlockAudio pair, you can be guaranteed that the * callback function is not running. Do not call these from the callback * function or you will cause deadlock. */extern DECLSPEC void SDLCALL Our_SDL_LockAudio(void);extern DECLSPEC void SDLCALL Our_SDL_UnlockAudio(void);/* * This function shuts down audio processing and closes the audio device. */extern DECLSPEC void SDLCALL Our_SDL_CloseAudio(void);/* * Determine if we have the ability to detect the audio buffer delay */extern DECLSPEC int Our_SDL_HasAudioDelay(void);/* * Determine the audio buffer delay in samples */extern DECLSPEC int Our_SDL_AudioDelay(void);/* Ends C function definitions when using C++ */#ifdef __cplusplus}#endif#include <close_code.h>#endif /* _SDL_audio_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -