kobodl/sound/a_globals.h
Ville Lindholm dbc223eb84
Initial commit
Import existing source tree; original VCS history is no longer available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 16:35:31 +03:00

137 lines
3.3 KiB
C

/*(GPL)
---------------------------------------------------------------------------
a_globals.h - Private global audio engine stuff
---------------------------------------------------------------------------
* Copyright (C) 2001, 2002, David Olofson
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU 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 program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _A_GLOBALS_H_
#define _A_GLOBALS_H_
#ifndef DBG
# define DBG(x) x
# define DBG2(x)
# define DBG3(x)
#endif
#include "config.h"
#include "audio.h"
#include "a_pitch.h"
#include "a_commands.h"
#ifdef DEBUG
#define PROFILE_AUDIO
#endif
#define AUDIO_USE_VU
#undef AUDIO_LOCKING
/*
* Various private types, defaults and limits...
*/
/* Voices; virtually no per-unit overhead. */
#define AUDIO_MAX_VOICES 32
/* Busses; some overhead, but only for busses that are actually used. */
#define AUDIO_MAX_BUSSES 8
/* Bus inserts; minimal per-unit overhead. */
#define AUDIO_MAX_INSERTS 2
#define DEFAULT_VOL 65536
#define DEFAULT_RVB 65536
#define DEFAULT_LIM_RELEASE (65536 * 1 / 44100)
#define DEFAULT_LIM_THRESHOLD 32768
#define SDL_FRAGMENTS 2
#define OSS_FRAGMENTS 3
#define FREQ_BITS 20
#define RAMP_BITS 15
#define VOL_BITS 15
/*
* Restriction caused by the limited fixed point
* range in the resampling voice mixers.
*/
#define MAX_FRAGMENT_SPAN (1<<(32 - FREQ_BITS))
/*
* Maximum size of internal mixing buffers, in frames.
*
* This is a cache thrashing limiter! Tune
* to best trade-off between cache footprint
* and looping overhead.
*/
#define MAX_BUFFER_SIZE 128
/*
* Minimum *output* buffer size, in frames.
* This effectively sets a minimum latency limit.
*/
#define MIN_BUFFER_SIZE 16
/*
* Safety limits to prevent locking up the engine with silly input.
*/
#define MAX_STEP ((AUDIO_MAX_MIX_RATE / AUDIO_MIN_OUTPUT_RATE) << FREQ_BITS)
#define MIN_LOOP ((AUDIO_MAX_MIX_RATE / AUDIO_MIN_OUTPUT_RATE) >> 1)
/* Global engine settings */
struct settings_t
{
int samplerate;
unsigned output_buffersize;
unsigned buffersize;
audio_quality_t quality;
};
extern struct settings_t a_settings;
/* Defaults... */
extern accbank_t a_channel_def_ctl;
extern accbank_t a_group_def_ctl;
extern abcbank_t a_bus_def_ctl;
/* For debug oscilloscope */
#ifdef DEBUG
# define OSCFRAMES 240
# include "a_limiter.h"
extern int *oscbufl;
extern int *oscbufr;
extern int oscframes;
extern limiter_t limiter;
extern int oscpos;
void audio_print_info(void);
#endif
/* For audio engine profiling */
#ifdef PROFILE_AUDIO
# define AUDIO_CPU_FUNCTIONS 10
extern int audio_cpu_ticks;
extern float audio_cpu_total;
extern float audio_cpu_function[AUDIO_CPU_FUNCTIONS];
extern char audio_cpu_funcname[AUDIO_CPU_FUNCTIONS][20];
#endif
extern int _audio_running;
#endif /*_A_GLOBALS_H_*/