⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sounddef.h

📁 NES game Emulator in Linux.c and asm codes.
💻 H
字号:
/*

SNEeSe, an Open Source Super NES emulator.


Copyright (c) 1998-2004 Charles Bilyue'.
Portions Copyright (c) 2003-2004 Daniel Horchner.

This is free software.  See 'LICENSE' for details.
You must read and accept the license prior to use.

*/

#ifndef SNEeSe_apu_sounddef_h
#define SNEeSe_apu_sounddef_h

#include "../misc.h"

#define OUTPUT_AUDIO_UNSIGNED_8
#define OUTPUT_AUDIO_UNSIGNED_16

#define SOUND_FREQ 32000    /* 32kHz true SNES mix speed */
#define SOUND_LAG  10       /* Lag between sound mixed and sound heard (1/LAG sec) */

#define OUTPUT_PRECISION 23
#define PREMIX_SHIFT_16 (OUTPUT_PRECISION - 16)
#define PREMIX_UPPER_LIMIT_16 (0x7FFF << PREMIX_SHIFT_16)
#define PREMIX_LOWER_LIMIT_16 (~PREMIX_UPPER_LIMIT_16)
#define PREMIX_SHIFT_8 (OUTPUT_PRECISION - 8)
#define PREMIX_UPPER_LIMIT_8 (0x7F << PREMIX_SHIFT_8)
#define PREMIX_LOWER_LIMIT_8 (~PREMIX_UPPER_LIMIT_8)

#define ENVX_PRECISION_BITS 11
#define ENVX_DOWNSHIFT_BITS (ENVX_PRECISION_BITS - 7)

#define ENVX_MAX_BASE ((unsigned) 1 << (ENVX_PRECISION_BITS))
#define ENVX_MAX (ENVX_MAX_BASE - 1)

#ifdef OUTPUT_AUDIO_UNSIGNED_8
#define OUTPUT_ZERO_BASE_8 0x80
#define OUTPUT_LOWER_LIMIT_8 0
#define OUTPUT_UPPER_LIMIT_8 0xFF
typedef unsigned char output_sample_8;
#else
#define OUTPUT_ZERO_BASE_8 0
#define OUTPUT_LOWER_LIMIT_8 -0x80
#define OUTPUT_UPPER_LIMIT_8 0x7F
typedef signed char output_sample_8;
#endif

#ifdef OUTPUT_AUDIO_UNSIGNED_16
#define OUTPUT_ZERO_BASE_16 0x8000
#define OUTPUT_LOWER_LIMIT_16 0
#define OUTPUT_UPPER_LIMIT_16 0xFFFF
typedef unsigned short output_sample_16;
#else
#define OUTPUT_ZERO_BASE_16 0
#define OUTPUT_LOWER_LIMIT_16 -0x8000
#define OUTPUT_UPPER_LIMIT_16 0x7FFF
typedef short output_sample_16;
#endif

#define BRR_PACKET_END  (1 << 0)    /* BRR end block flag */
#define BRR_PACKET_LOOP (1 << 1)    /* BRR sample loop flag */

#define DSP_MAIN_LVOL   0x0C    /* Master volume, left channel */
#define DSP_MAIN_RVOL   0x1C    /* Master volume, right channel */
#define DSP_ECHO_LVOL   0x2C    /* Echo volume, left channel */
#define DSP_ECHO_RVOL   0x3C    /* Echo volume, right channel */
#define DSP_KON         0x4C    /* Key on */
#define DSP_KOF         0x5C    /* Key off */
#define DSP_FLG         0x6C    /* Reset, mute, echo enable, noise frequency */
#define DSP_ENDX        0x7C    /* Sample played end-block */

#define DSP_EFB     0x0D    /* Echo feedback */
#define DSP_PMON    0x2D    /* Pitch modulation */
#define DSP_NON     0x3D    /* Noise enable */
#define DSP_EON     0x4D    /* Echo enable */
#define DSP_DIR     0x5D    /* Sample directory */
#define DSP_ESA     0x6D    /* Echo start address */
#define DSP_EDL     0x7D    /* Echo delay */ 

#define DSP_VOICE_LVOL      0   /* Voice volume, left channel */
#define DSP_VOICE_RVOL      1   /* Voice volume, right channel */
#define DSP_VOICE_PITCH_L   2   /* Playback pitch, low 8 bits */
#define DSP_VOICE_PITCH_H   3   /* Playback pitch, high 6 bits */
#define DSP_VOICE_SRCN      4   /* Source number */
#define DSP_VOICE_ADSR1     5   /* ADSR register 1 */
#define DSP_VOICE_ADSR2     6   /* ADSR register 2 */
#define DSP_VOICE_GAIN      7   /* GAIN register */
#define DSP_VOICE_ENVX      8   /* ADSR/GAIN envelope height */
#define DSP_VOICE_OUTX      9   /* Envelope-applied sample output */

#define DSP_FLG_RESET (1 << 7)
#define DSP_FLG_MUTE  (1 << 6)
#define DSP_FLG_NECEN (1 << 5)

#ifdef FAST_SPC
#define SPC_CLOCK_HZ (2048000)
#define TIMER_0_CYCLES_TO_TICKS_SHIFT 8
#define TIMER_1_CYCLES_TO_TICKS_SHIFT 8
#define TIMER_2_CYCLES_TO_TICKS_SHIFT 5
#define SOUND_CYCLES_TO_SAMPLES_SHIFT 6
#else
#define SPC_CLOCK_HZ (1024000)
#define TIMER_0_CYCLES_TO_TICKS_SHIFT 7
#define TIMER_1_CYCLES_TO_TICKS_SHIFT 7
#define TIMER_2_CYCLES_TO_TICKS_SHIFT 4
#define SOUND_CYCLES_TO_SAMPLES_SHIFT 5
#endif

#define TIMER_0_CYCLES_PER_TICK (SPC_CLOCK_HZ / 8000)
#define TIMER_1_CYCLES_PER_TICK (SPC_CLOCK_HZ / 8000)
#define TIMER_2_CYCLES_PER_TICK (SPC_CLOCK_HZ / 64000)
#define SOUND_CYCLES_PER_SAMPLE (SPC_CLOCK_HZ / 32000)
#define RELEASE_TIME (SOUND_CYCLES_PER_SAMPLE)

#endif /* !defined(SNEeSe_apu_sounddef_h) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -