www.pudn.com > sn068s.zip > SOUND.H
#ifndef SNEeSe_sound_h #define SNEeSe_sound_h #include "misc.h" #include "spc.h" #define OUTPUT_AUDIO_UNSIGNED_8 #define OUTPUT_AUDIO_UNSIGNED_16 #define ADSR /*#define ADSR_OPTIONAL*/ #define SOUND_FREQ 32000 /* 32kHz true SNES mix speed */ #define SOUND_LAG 10 /* Lag between sound mixed and sound heard (1/LAG sec) */ #define PREMIX_LOWER_LIMIT_16 (-0x8000FF) #define PREMIX_UPPER_LIMIT_16 (0x7FFF00) #define PREMIX_SHIFT_16 8 #define PREMIX_LOWER_LIMIT_8 (-0x80FFFF) #define PREMIX_UPPER_LIMIT_8 (0x7F0000) #define PREMIX_SHIFT_8 16 #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 SPC_CTRL SPCRAM[0xF1] #define SPC_DSP_ADDR SPCRAM[0xF2] #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) #define ENVX_MAX 0x7F000000 #ifdef SPC2MHz #define SPC_CLOCK_HZ (2048000) #else #define SPC_CLOCK_HZ (1024000) #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) EXTERN unsigned TotalCycles,CycleLatch0,CycleLatch1,CycleLatch2; EXTERN unsigned SPC_T0_cycle_latch; EXTERN unsigned short SPC_T0_position, SPC_T0_target; EXTERN unsigned SPC_T1_cycle_latch; EXTERN unsigned short SPC_T1_position, SPC_T1_target; EXTERN unsigned SPC_T2_cycle_latch; EXTERN unsigned short SPC_T2_position, SPC_T2_target; EXTERN unsigned char SPC_T0_counter, SPC_T1_counter, SPC_T2_counter; EXTERN unsigned char SPC_MASK; EXTERN unsigned SPC_DSP_DATA; EXTERN signed char ENVX_ENABLED, sound_enabled; EXTERN int sound_bits; EXTERN unsigned sound_cycle_latch; EXTERN unsigned sound_output_position; EXTERN int voice_handle; EXTERN signed char block_written[2]; #ifdef ADSR_OPTIONAL EXTERN signed char ADSR_ENABLED = -1; #endif EXTERN unsigned char SPC_DSP[256]; EXTERN unsigned char SNDkeys; EXTERN void Remove_Sound(); EXTERN int Install_Sound(int stereo); EXTERN void Reset_Sound_DSP(); EXTERN void SPC_READ_DSP(); EXTERN void SPC_WRITE_DSP(); EXTERN void Update_SPC_Timer_0(); EXTERN void Update_SPC_Timer_1(); EXTERN void Update_SPC_Timer_2(); EXTERN void sound_pause(void); EXTERN void sound_resume(void); #endif /* SNEeSe_sound_h */