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

📄 soundux.h

📁 著名SFC模拟器Snes9x的源代码。
💻 H
字号:
/* * Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. * * (c) Copyright 1996 - 2001 Gary Henderson (gary@daniver.demon.co.uk) and *                           Jerremy Koot (jkoot@snes9x.com) * * Super FX C emulator code  * (c) Copyright 1997 - 1999 Ivar (Ivar@snes9x.com) and *                           Gary Henderson. * Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_. * * DSP1 emulator code (c) Copyright 1998 Ivar, _Demo_ and Gary Henderson. * C4 asm and some C emulation code (c) Copyright 2000 zsKnight and _Demo_. * C4 C code (c) Copyright 2001 Gary Henderson (gary@daniver.demon.co.uk). * * DOS port code contains the works of other authors. See headers in * individual files. * * Snes9x homepage: www.snes9x.com * * Permission to use, copy, modify and distribute Snes9x in both binary and * source form, for non-commercial purposes, is hereby granted without fee, * providing that this license information and copyright notice appear with * all copies and any derived work. * * This software is provided 'as-is', without any express or implied * warranty. In no event shall the authors be held liable for any damages * arising from the use of this software. * * Snes9x is freeware for PERSONAL USE only. Commercial users should * seek permission of the copyright holders first. Commercial use includes * charging money for Snes9x or software derived from Snes9x. * * The copyright holders request that bug fixes and improvements to the code * should be forwarded to them so everyone can benefit from the modifications * in future versions. * * Super NES and Super Nintendo Entertainment System are trademarks of * Nintendo Co., Limited and its subsidiary companies. */#ifndef _SOUND_H_#define _SOUND_H_enum { SOUND_SAMPLE = 0, SOUND_NOISE, SOUND_EXTRA_NOISE, SOUND_MUTE };enum { SOUND_SILENT, SOUND_ATTACK, SOUND_DECAY, SOUND_SUSTAIN,       SOUND_RELEASE, SOUND_GAIN, SOUND_INCREASE_LINEAR,       SOUND_INCREASE_BENT_LINE, SOUND_DECREASE_LINEAR,       SOUND_DECREASE_EXPONENTIAL};enum { MODE_NONE = SOUND_SILENT, MODE_ADSR, MODE_RELEASE = SOUND_RELEASE,       MODE_GAIN, MODE_INCREASE_LINEAR, MODE_INCREASE_BENT_LINE,       MODE_DECREASE_LINEAR, MODE_DECREASE_EXPONENTIAL};#define MAX_ENVELOPE_HEIGHT 127#define ENVELOPE_SHIFT 7#define MAX_VOLUME 127#define VOLUME_SHIFT 7#define VOL_DIV 128#define SOUND_DECODE_LENGTH 16#define NUM_CHANNELS    8#define SOUND_BUFFER_SIZE (1024 * 16)#define MAX_BUFFER_SIZE SOUND_BUFFER_SIZE#define SOUND_BUFFER_SIZE_MASK (SOUND_BUFFER_SIZE - 1)#define SOUND_BUFS      4#ifdef __sgi#  include <audio.h>#endif /* __sgi */typedef struct {    int sound_fd;    int sound_switch;    int playback_rate;    int buffer_size;    int noise_gen;    bool8 mute_sound;    int stereo;    bool8 sixteen_bit;    bool8 encoded;#ifdef __sun    int last_eof;#endif#ifdef __sgi    ALport al_port;#endif /* __sgi */    int32  samples_mixed_so_far;    int32  play_position;    uint32 err_counter;    uint32 err_rate;} SoundStatus;EXTERN_C volatile SoundStatus so;typedef struct {    int state;    int type;    short volume_left;    short volume_right;    uint32 hertz;    uint32 frequency;    uint32 count;    bool8 loop;    int envx;    short left_vol_level;    short right_vol_level;    short envx_target;    unsigned long int env_error;    unsigned long erate;    int direction;    unsigned long attack_rate;    unsigned long decay_rate;    unsigned long sustain_rate;    unsigned long release_rate;    unsigned long sustain_level;    signed short sample;    signed short decoded [16];    signed short previous16 [2];    signed short *block;    uint16 sample_number;    bool8 last_block;    bool8 needs_decode;    uint32 block_pointer;    uint32 sample_pointer;    int *echo_buf_ptr;    int mode;    int32 envxx;    signed short next_sample;    int32 interpolate;    int32 previous [2];    // Just incase they are needed in the future, for snapshot compatibility.    uint32 dummy [8];} Channel;typedef struct{    short master_volume_left;    short master_volume_right;    short echo_volume_left;    short echo_volume_right;    int echo_enable;    int echo_feedback;    int echo_ptr;    int echo_buffer_size;    int echo_write_enabled;    int echo_channel_enable;    int pitch_mod;    // Just incase they are needed in the future, for snapshot compatibility.    uint32 dummy [3];    Channel channels [NUM_CHANNELS];    bool8 no_filter;    int master_volume [2];    int echo_volume [2];    int noise_hertz;} SSoundData;EXTERN_C SSoundData SoundData;void S9xSetSoundVolume (int channel, short volume_left, short volume_right);void S9xSetSoundFrequency (int channel, int hertz);void S9xSetSoundHertz (int channel, int hertz);void S9xSetSoundType (int channel, int type_of_sound);void S9xSetMasterVolume (short master_volume_left, short master_volume_right);void S9xSetEchoVolume (short echo_volume_left, short echo_volume_right);void S9xSetSoundControl (int sound_switch);bool8 S9xSetSoundMute (bool8 mute);void S9xSetEnvelopeHeight (int channel, int height);void S9xSetSoundADSR (int channel, int attack, int decay, int sustain,		      int sustain_level, int release);void S9xSetSoundKeyOff (int channel);void S9xSetSoundDecayMode (int channel);void S9xSetSoundAttachMode (int channel);void S9xSoundStartEnvelope (Channel *);void S9xSetSoundSample (int channel, uint16 sample_number);void S9xSetEchoFeedback (int echo_feedback);void S9xSetEchoEnable (uint8 byte);void S9xSetEchoDelay (int byte);void S9xSetEchoWriteEnable (uint8 byte);void S9xSetFilterCoefficient (int tap, int value);void S9xSetFrequencyModulationEnable (uint8 byte);void S9xSetEnvelopeRate (int channel, unsigned long rate, int direction,			 int target);bool8 S9xSetSoundMode (int channel, int mode);int S9xGetEnvelopeHeight (int channel);void S9xResetSound (bool8 full);void S9xFixSoundAfterSnapshotLoad ();void S9xPlaybackSoundSetting (int channel);void S9xPlaySample (int channel);void S9xFixEnvelope (int channel, uint8 gain, uint8 adsr1, uint8 adsr2);void S9xStartSample (int channel);EXTERN_C void S9xMixSamples (uint8 *buffer, int sample_count);EXTERN_C void S9xMixSamplesO (uint8 *buffer, int sample_count, int byte_offset);bool8 S9xOpenSoundDevice (int, bool8, int);void S9xSetPlaybackRate (uint32 rate);#endif

⌨️ 快捷键说明

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