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>
137 lines
3.3 KiB
C
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_*/
|