亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modeng.c

?? 這個是延伸mame的在wince平臺下的游戲模擬器的代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* * $Id: modeng.c 1.11 1996/09/13 15:10:01 chasan released $ * * Extended module player engine. * * Copyright (C) 1995-1999 Carlos Hasan * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */#ifdef __GNUC__#include <memory.h>#endif#include <string.h>#include <malloc.h>#include "audio.h"#include "tables.h"/* * Module player state control bit fields */#define AUDIO_PLAYER_JUMP       0x01#define AUDIO_PLAYER_BREAK      0x02#define AUDIO_PLAYER_DELAY      0x04#define AUDIO_PLAYER_BPM        0x08#define AUDIO_PLAYER_VOLUME     0x10#define AUDIO_PLAYER_PAUSE      0x20#define AUDIO_PLAYER_ACTIVE     0x80/* * Tracks control bit fields */#define AUDIO_CTRL_PITCH        0x01#define AUDIO_CTRL_VOLUME       0x02#define AUDIO_CTRL_PANNING      0x04#define AUDIO_CTRL_KEYON        0x08#define AUDIO_CTRL_KEYOFF       0x10#define AUDIO_CTRL_TOUCH        0x20/* * Some useful macro defines */#define LOPARAM(x)              ((BYTE)(x)&0x0F)#define HIPARAM(x)              ((BYTE)(x)>>4)#define CLIP(x,a,b)             ((x)<(a)?(a):((x)>(b)?(b):(x)))#define ABS(x)                  ((x)>0?(x):-(x))/* * Module player track structure */typedef struct {    BYTE    nNote;              /* note index (1-96) */    BYTE    nPatch;             /* patch number (1-128) */    BYTE    nVolume;            /* volume command */    BYTE    nCommand;           /* effect */    BYTE    bParams;            /* parameters */} NOTE, *LPNOTE;typedef struct {    BYTE    fKeyOn;             /* key on flag */    BYTE    bControl;           /* control bits */    BYTE    nVolumeCmd;         /* volume command */    BYTE    nCommand;           /* command */    BYTE    bParams;            /* parameters */    BYTE    nPatch;             /* patch number */    BYTE    nSample;            /* sample number */    BYTE    nNote;              /* current note */    int     nFinetune;          /* current finetune */    int     nRelativeNote;      /* relative note */    int     nVolume;            /* current volume */    int     nOutVolume;         /* output volume */    int     nFinalVolume;       /* final volume */    int     nPanning;           /* current panning */    int     nFinalPanning;      /* final panning */    int     nPeriod;            /* current period */    int     nOutPeriod;         /* output period */    int     nFinalPeriod;       /* final period */    LONG    dwFrequency;        /* frequency */    LPAUDIOPATCH lpPatch;       /* current patch */    LPAUDIOSAMPLE lpSample;     /* current sample */    /* waves & gliss control */    BYTE    bWaveCtrl;          /* vibrato & tremolo control bits */    BYTE    bGlissCtrl;         /* glissando control bits */    /* vibrato & tremolo waves */    int     nVibratoFrame;      /* vibrato frame */    int     nVibratoDepth;      /* vibrato depth */    int     nVibratoRate;       /* vibrato rate */    int     nTremoloFrame;      /* tremolo frame */    int     nTremoloDepth;      /* tremolo depth */    int     nTremoloRate;       /* tremolo rate */    /* command parameters */    int     nPortaUp;           /* portamento up rate */    int     nPortaDown;         /* portamento down rate */    int     nTonePorta;         /* tone portamento rate */    int     nWantedPeriod;      /* tone portamento target */    BYTE    bVolumeSlide;       /* volume slide rate */    BYTE    bPanningSlide;      /* panning slide rate */    BYTE    nFinePortaUp;       /* fine portamento up rate */    BYTE    nFinePortaDown;     /* fine portamento down rate */    BYTE    nExtraPortaUp;      /* extra fine porta up rate */    BYTE    nExtraPortaDown;    /* extra fine porta down rate */    BYTE    nRetrigType;        /* multi retrig type */    BYTE    nRetrigInterval;    /* multi retrig interval */    BYTE    nRetrigFrame;       /* multi retrig frame */    BYTE    bTremorParms;       /* tremor parameters */    BYTE    bTremorOnOff;       /* tremor on/off state */    BYTE    nTremorFrame;       /* tremor frame */    LONG    dwSampleOffset;     /* last sample offset */    /* volume fadeout */    int     nVolumeFade;        /* volume fadeout level */    int     nVolumeFadeout;     /* volume fadeout rate */    /* volume envelope */    int     nVolumeFrame;       /* volume envelope frame */    int     nVolumeValue;       /* volume envelope value */    int     nVolumePoint;       /* volume envelope point index */    int     nVolumeSlope;       /* volume envelope slope */    /* panning envelope */    int     nPanningFrame;      /* panning envelope frame */    int     nPanningValue;      /* panning envelope value */    int     nPanningPoint;      /* panning envelope point index */    int     nPanningSlope;      /* panning envelope slope */    /* automatic vibrato */    int     nAutoVibratoFrame;  /* auto vibrato frame */    int     nAutoVibratoValue;  /* auto vibrato envelope */    int     nAutoVibratoSlope;  /* auto vibrato slope */    /* pattern loop variables */    int     nPatternRow;        /* pattern loop row */    int     nPatternLoop;       /* pattern loop counter */} TRACK, *LPTRACK;/* * Module player run-time state structure */static struct {    LPAUDIOMODULE lpModule;     /* current module */    LPBYTE  lpData;             /* pattern data pointer */    TRACK   aTracks[32];        /* array of tracks */    HAC     aVoices[32];        /* array of voices */    WORD    wControl;           /* player control bits */    WORD    wFlags;             /* module control bits */    int     nTracks;            /* number of channels */    int     nFrame;             /* current frame */    int     nRow;               /* pattern row */    int     nRows;              /* number of rows */    int     nPattern;           /* pattern number */    int     nOrder;             /* order number */    int     nTempo;             /* current tempo */    int     nBPM;               /* current BPM */    int     nVolume;            /* global volume */    int     nVolumeRate;        /* global volume slide */    int     nJumpOrder;         /* position jump */    int     nJumpRow;           /* break pattern */    int     nPatternDelay;      /* pattern delay counter */    LPFNAUDIOCALLBACK lpfnCallback; /* sync callback routine */} Player;static VOID PlayNote(LPTRACK lpTrack);static VOID StopNote(LPTRACK lpTrack);static VOID RetrigNote(LPTRACK lpTrack);/* * Low-level extended module player routines */static LONG GetFrequencyValue(int nPeriod){    UINT nNote, nOctave;    if (nPeriod > 0) {        if (Player.wFlags & AUDIO_MODULE_LINEAR) {            nOctave = nPeriod / (12 * 16 * 4);            nNote = nPeriod % (12 * 16 * 4);            return aFrequencyTable[nNote] >> nOctave;        }        else {            return (4L * 8363L * 428L) / nPeriod;        }    }    return 0L;}static int GetPeriodValue(int nNote, int nRelativeNote, int nFinetune){    int nOctave;    nNote = ((nNote + nRelativeNote - 1) << 6) + (nFinetune >> 1);    if (nNote >= 0 && nNote < 10 * 12 * 16 * 4) {        if (Player.wFlags & AUDIO_MODULE_LINEAR) {            return (10 * 12 * 16 * 4 - nNote);        }        else {            nOctave = nNote / (12 * 16 * 4);            nNote = nNote % (12 * 16 * 4);            return aPeriodTable[nNote >> 2] >> nOctave;        }    }    return 0;}static VOID OnArpeggio(LPTRACK lpTrack){    int nNote;    if (lpTrack->bParams) {        nNote = lpTrack->nNote;        switch (Player.nFrame % 3) {        case 1:            nNote += HIPARAM(lpTrack->bParams);            break;        case 2:            nNote += LOPARAM(lpTrack->bParams);            break;        }        lpTrack->nOutPeriod = GetPeriodValue(nNote,					     lpTrack->nRelativeNote, lpTrack->nFinetune);        lpTrack->bControl |= AUDIO_CTRL_PITCH;    }}static VOID OnPortaUp(LPTRACK lpTrack){    if (!Player.nFrame) {        if (lpTrack->bParams != 0x00) {            lpTrack->nPortaUp = (int) lpTrack->bParams << 2;        }    }    else {        lpTrack->nPeriod -= lpTrack->nPortaUp;        if (lpTrack->nPeriod < AUDIO_MIN_PERIOD)            lpTrack->nPeriod = AUDIO_MIN_PERIOD;        lpTrack->nOutPeriod = lpTrack->nPeriod;        lpTrack->bControl |= AUDIO_CTRL_PITCH;    }}static VOID OnPortaDown(LPTRACK lpTrack){    if (!Player.nFrame) {        if (lpTrack->bParams != 0x00) {            lpTrack->nPortaDown = (int) lpTrack->bParams << 2;        }    }    else {        lpTrack->nPeriod += lpTrack->nPortaDown;        if (lpTrack->nPeriod > AUDIO_MAX_PERIOD)            lpTrack->nPeriod = AUDIO_MAX_PERIOD;        lpTrack->nOutPeriod = lpTrack->nPeriod;        lpTrack->bControl |= AUDIO_CTRL_PITCH;    }}static VOID OnTonePorta(LPTRACK lpTrack){    if (!Player.nFrame) {        if (lpTrack->bParams != 0x00) {            lpTrack->nTonePorta = (int) lpTrack->bParams << 2;        }        lpTrack->nWantedPeriod = GetPeriodValue(lpTrack->nNote,						lpTrack->nRelativeNote, lpTrack->nFinetune);        lpTrack->bControl &= ~(AUDIO_CTRL_PITCH | AUDIO_CTRL_KEYON);    }    else {        if (lpTrack->nPeriod < lpTrack->nWantedPeriod) {            lpTrack->nPeriod += lpTrack->nTonePorta;            if (lpTrack->nPeriod > lpTrack->nWantedPeriod) {                lpTrack->nPeriod = lpTrack->nWantedPeriod;            }        }        else if (lpTrack->nPeriod > lpTrack->nWantedPeriod) {            lpTrack->nPeriod -= lpTrack->nTonePorta;            if (lpTrack->nPeriod < lpTrack->nWantedPeriod) {                lpTrack->nPeriod = lpTrack->nWantedPeriod;            }        }        /* TODO: glissando not implemented */        lpTrack->nOutPeriod = lpTrack->nPeriod;        lpTrack->bControl |= AUDIO_CTRL_PITCH;    }}static VOID OnVibrato(LPTRACK lpTrack){    int nDelta, nFrame;    if (!Player.nFrame) {        if (LOPARAM(lpTrack->bParams)) {            lpTrack->nVibratoDepth = LOPARAM(lpTrack->bParams);        }        if (HIPARAM(lpTrack->bParams)) {            lpTrack->nVibratoRate = HIPARAM(lpTrack->bParams) << 2;        }    }    else {        nFrame = (lpTrack->nVibratoFrame >> 2) & 0x1F;        switch (lpTrack->bWaveCtrl & 0x03) {        case 0x00:            nDelta = aSineTable[nFrame];            break;        case 0x01:            nDelta = nFrame << 3;            if (lpTrack->nVibratoFrame & 0x80)                nDelta ^= 0xFF;            break;        case 0x02:            nDelta = 0xFF;            break;        default:            /* TODO: random waveform not implemented */            nDelta = 0x00;            break;        }        nDelta = ((nDelta * lpTrack->nVibratoDepth) >> 5);        lpTrack->nOutPeriod = lpTrack->nPeriod;        if (lpTrack->nVibratoFrame & 0x80) {            lpTrack->nOutPeriod -= nDelta;            if (lpTrack->nOutPeriod < AUDIO_MIN_PERIOD)                lpTrack->nOutPeriod = AUDIO_MIN_PERIOD;        }        else {            lpTrack->nOutPeriod += nDelta;            if (lpTrack->nOutPeriod > AUDIO_MAX_PERIOD)                lpTrack->nOutPeriod = AUDIO_MAX_PERIOD;        }        lpTrack->bControl |= AUDIO_CTRL_PITCH;        lpTrack->nVibratoFrame += lpTrack->nVibratoRate;    }}static VOID OnFineVibrato(LPTRACK lpTrack){    int nDelta, nFrame;    if (!Player.nFrame) {        if (LOPARAM(lpTrack->bParams)) {            lpTrack->nVibratoDepth = LOPARAM(lpTrack->bParams);        }        if (HIPARAM(lpTrack->bParams)) {            lpTrack->nVibratoRate = HIPARAM(lpTrack->bParams) << 2;        }    }    else {        nFrame = (lpTrack->nVibratoFrame >> 2) & 0x1F;        switch (lpTrack->bWaveCtrl & 0x03) {        case 0x00:            nDelta = aSineTable[nFrame];            break;        case 0x01:            nDelta = nFrame << 3;            if (lpTrack->nVibratoFrame & 0x80)                nDelta ^= 0xFF;            break;        case 0x02:            nDelta = 0xFF;            break;        default:            /* TODO: random waveform not implemented */            nDelta = 0x00;            break;        }        nDelta = ((nDelta * lpTrack->nVibratoDepth) >> 7);        lpTrack->nOutPeriod = lpTrack->nPeriod;        if (lpTrack->nVibratoFrame & 0x80) {            lpTrack->nOutPeriod -= nDelta;            if (lpTrack->nOutPeriod < AUDIO_MIN_PERIOD)                lpTrack->nOutPeriod = AUDIO_MIN_PERIOD;        }        else {            lpTrack->nOutPeriod += nDelta;            if (lpTrack->nOutPeriod > AUDIO_MAX_PERIOD)                lpTrack->nOutPeriod = AUDIO_MAX_PERIOD;        }        lpTrack->bControl |= AUDIO_CTRL_PITCH;        lpTrack->nVibratoFrame += lpTrack->nVibratoRate;    }}static VOID OnVolumeSlide(LPTRACK lpTrack){    if (!Player.nFrame) {        if (lpTrack->bParams != 0x00) {            lpTrack->bVolumeSlide = lpTrack->bParams;        }    }    else {        if (HIPARAM(lpTrack->bVolumeSlide)) {            lpTrack->nVolume += HIPARAM(lpTrack->bVolumeSlide);            if (lpTrack->nVolume > AUDIO_MAX_VOLUME)                lpTrack->nVolume = AUDIO_MAX_VOLUME;        }        else {            lpTrack->nVolume -= LOPARAM(lpTrack->bVolumeSlide);            if (lpTrack->nVolume < AUDIO_MIN_VOLUME)                lpTrack->nVolume = AUDIO_MIN_VOLUME;        }        lpTrack->nOutVolume = lpTrack->nVolume;        lpTrack->bControl |= AUDIO_CTRL_VOLUME;    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久影音资源网| 国产乱码精品1区2区3区| 午夜一区二区三区视频| 国产精品高清亚洲| 一区二区三区视频在线观看 | 国产精品久久久久四虎| 国产精品嫩草99a| 亚洲欧美一区二区久久 | 五月婷婷另类国产| 日本成人在线电影网| 久久99精品一区二区三区| 激情五月激情综合网| 国产成人在线观看| 成人动漫在线一区| 色老汉av一区二区三区| 91精品国产91久久综合桃花| 欧美大片免费久久精品三p| 久久麻豆一区二区| 亚洲色图19p| 免费观看在线综合色| 国产乱国产乱300精品| 94色蜜桃网一区二区三区| 欧美亚男人的天堂| 精品国产一区二区亚洲人成毛片| 中文字幕精品一区二区精品绿巨人| 亚洲天天做日日做天天谢日日欢| 亚洲国产综合色| 韩国成人在线视频| 一本到高清视频免费精品| 欧美一级欧美三级在线观看 | 国产精品第五页| 一区二区三区中文字幕精品精品| 蜜臀av一区二区在线观看| 岛国精品在线播放| 欧美三级韩国三级日本三斤| 久久久一区二区三区| 一区2区3区在线看| 国产一本一道久久香蕉| 91极品视觉盛宴| 久久久久久**毛片大全| 亚洲一区在线观看网站| 国产精品自拍网站| 91麻豆精品国产91久久久| 国产精品久久午夜夜伦鲁鲁| 欧美96一区二区免费视频| 成人三级在线视频| 日韩精品专区在线影院观看| 亚洲欧美成人一区二区三区| 美脚の诱脚舐め脚责91 | 久久综合久久综合亚洲| 亚洲精品欧美二区三区中文字幕| 亚洲成人激情自拍| 国产成人精品亚洲午夜麻豆| 91精品国产综合久久香蕉麻豆| 亚洲精品成a人| zzijzzij亚洲日本少妇熟睡| 国产亚洲自拍一区| 激情图片小说一区| 日韩免费高清av| 日本不卡中文字幕| 欧美精品一二三四| 亚洲国产一区二区三区青草影视| 91丨porny丨在线| 成人欧美一区二区三区小说| 成人午夜视频网站| 亚洲国产精品国自产拍av| 国产精品一区二区果冻传媒| 久久先锋资源网| 黄页网站大全一区二区| 精品国产乱码久久久久久浪潮| 蜜臀av一区二区三区| 亚洲日本va在线观看| 欧美精品丝袜久久久中文字幕| 洋洋av久久久久久久一区| 99re这里只有精品首页| 日韩伦理av电影| 99国产精品国产精品毛片| 国产精品萝li| 色综合久久久久综合体| 亚洲欧美日本在线| 欧美怡红院视频| 亚洲成人免费视频| 91精品国产综合久久精品 | 欧美日韩三级在线| 五月天激情综合网| 日韩一区二区在线看片| 久久国产精品99久久人人澡| 2021中文字幕一区亚洲| 国产精品一二三区| 国产精品国产三级国产普通话蜜臀 | 精品一区二区三区视频| 精品成人一区二区三区四区| 国产乱人伦偷精品视频免下载| 国产日韩欧美一区二区三区综合| 成人精品国产一区二区4080| 亚洲欧美激情视频在线观看一区二区三区 | 99久久婷婷国产综合精品| 亚洲欧美日本在线| 欧美日韩一级片在线观看| 免费高清不卡av| 国产日韩欧美麻豆| 一本高清dvd不卡在线观看| 午夜精品久久久久| 精品久久久久久久一区二区蜜臀| 国产91精品露脸国语对白| 亚洲男人的天堂在线观看| 欧美日本国产一区| 国产一区二区福利视频| 中文字幕在线免费不卡| 欧美日韩国产区一| 韩国一区二区三区| 亚洲视频网在线直播| 7777精品伊人久久久大香线蕉最新版 | 91在线无精精品入口| 偷拍日韩校园综合在线| 国产色一区二区| 在线观看国产精品网站| 久久精品国产999大香线蕉| 国产精品美女久久久久久2018 | 亚洲精品一二三四区| 欧美精品在欧美一区二区少妇| 国产精品一区二区在线播放 | 欧美猛男男办公室激情| 国产一区二区三区| 亚洲影院在线观看| 久久精品男人的天堂| 欧美性大战久久久久久久蜜臀| 久久99精品视频| 亚洲最大色网站| 久久九九国产精品| 欧美福利视频导航| 成av人片一区二区| 美腿丝袜亚洲综合| 亚洲免费观看高清完整版在线| 精品国产一区二区三区av性色| 91麻豆精品视频| 国产酒店精品激情| 亚洲成a人v欧美综合天堂| 欧美韩国一区二区| 日韩欧美一级二级| 欧美中文字幕久久| 精品无码三级在线观看视频| 亚洲激情综合网| 欧美极品xxx| 欧美一区二区在线播放| 91原创在线视频| 国产麻豆视频精品| 免费在线观看日韩欧美| 亚洲人成电影网站色mp4| 精品福利在线导航| 在线成人av网站| 91激情在线视频| 成人黄色一级视频| 国内精品久久久久影院色| 香蕉久久夜色精品国产使用方法 | 福利视频网站一区二区三区| 日本不卡一区二区| 亚洲一二三区在线观看| 中文字幕日韩一区二区| 精品国产乱码久久久久久久| 91麻豆精品国产综合久久久久久 | 专区另类欧美日韩| 国产午夜精品理论片a级大结局| 日韩欧美色电影| 91精品国产免费久久综合| 欧美日韩一区二区三区不卡| 色中色一区二区| 91在线一区二区三区| 成人av高清在线| 风流少妇一区二区| 国产成人小视频| 国产麻豆成人精品| 国产露脸91国语对白| 韩国毛片一区二区三区| 久草在线在线精品观看| 另类小说一区二区三区| 欧美96一区二区免费视频| 日本欧美加勒比视频| 轻轻草成人在线| 免费在线观看一区| 麻豆91在线看| 国内成人精品2018免费看| 久久91精品国产91久久小草| 美腿丝袜亚洲三区| 美洲天堂一区二卡三卡四卡视频| 亚洲风情在线资源站| 日日欢夜夜爽一区| 亚洲成av人在线观看| 亚洲愉拍自拍另类高清精品| 亚洲成人福利片| 午夜激情一区二区| 亚洲自拍欧美精品| 亚洲高清免费观看高清完整版在线观看 | 五月激情综合网| 亚洲福利一二三区| 亚洲chinese男男1069| 亚洲色图.com| 一区二区三区欧美视频| 一区二区三区久久久| 亚洲国产va精品久久久不卡综合 |