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

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

?? dsdrv2.c

?? 這個是延伸mame的在wince平臺下的游戲模擬器的代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * $Id: dsdrv2.c 0.4 1998/12/26 chasan Exp $ * * DirectSound accelerated audio driver (Experimental) * * Copyright (C) 1998-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. */#include <windows.h>#include <objbase.h>#include <dsound.h>#include <math.h>#include "audio.h"#include "drivers.h"#if 0#define MSGBOX(text) MessageBox(NULL, text, "DirectSound", MB_OK)#else#define MSGBOX(text)#endifstatic struct {    LPDIRECTSOUND  lpDirectSound;    LPDIRECTSOUNDBUFFER lpPrimaryBuffer;    LPDIRECTSOUNDBUFFER aSoundBuffer[AUDIO_MAX_VOICES];    LPFNAUDIOTIMER lpfnTimerHandler;    LONG    aLogVolumeTable[AUDIO_MAX_VOLUME+1];    LONG    aLogPanningTable[AUDIO_MAX_PANNING+1];    DWORD   aFormatTable[AUDIO_MAX_VOICES];    LONG    aFrequencyTable[AUDIO_MAX_VOICES];        UINT    aVolumeTable[AUDIO_MAX_VOICES];    UINT    aPanningTable[AUDIO_MAX_VOICES];    LONG    dwTimer;    LONG    dwTimerAccum;    LONG    dwTimerRate;} DS;static HRESULT _DirectSoundCreate(GUID FAR *lpGuid,				  LPDIRECTSOUND *lplpDirectSound, IUnknown FAR *lpUnkOuter){    HRESULT hresult;    CoInitialize(NULL);    hresult = CoCreateInstance(&CLSID_DirectSound, lpUnkOuter,			       CLSCTX_ALL, &IID_IDirectSound, lplpDirectSound);    if (!FAILED(hresult))        hresult = IDirectSound_Initialize(*lplpDirectSound, NULL);    return hresult;}static HRESULT _DirectSoundDestroy(LPDIRECTSOUND lpDirectSound){    HRESULT hresult;    hresult = IDirectSound_Release(lpDirectSound);    CoUninitialize();    return hresult;}static UINT AIAPI SetAudioMixerValue(UINT, UINT);/* * DirectSound audio driver API interface */static UINT AIAPI GetAudioCaps(LPAUDIOCAPS lpCaps){    static AUDIOCAPS Caps =    {        AUDIO_PRODUCT_NONE, "DirectSound (experimental)",        AUDIO_FORMAT_1M08 | AUDIO_FORMAT_1S08 |        AUDIO_FORMAT_1M16 | AUDIO_FORMAT_1S16 |        AUDIO_FORMAT_2M08 | AUDIO_FORMAT_2S08 |        AUDIO_FORMAT_2M16 | AUDIO_FORMAT_2S16 |        AUDIO_FORMAT_4M08 | AUDIO_FORMAT_4S08 |        AUDIO_FORMAT_4M16 | AUDIO_FORMAT_4S16    };    memcpy(lpCaps, &Caps, sizeof(AUDIOCAPS));    return AUDIO_ERROR_NONE;}static UINT AIAPI PingAudio(VOID){    LPDIRECTSOUND lpDirectSound;    if (_DirectSoundCreate(NULL, &lpDirectSound, NULL) != DS_OK)        return AUDIO_ERROR_NODEVICE;    _DirectSoundDestroy(lpDirectSound);    return AUDIO_ERROR_NONE;}static UINT AIAPI OpenAudio(LPAUDIOINFO lpInfo){    LPDIRECTSOUNDBUFFER lpPrimaryBuffer;    DSBUFFERDESC dsbd;    WAVEFORMATEX wfx;    DSCAPS dsc;    LONG nPanning;    memset(&DS, 0, sizeof(DS));    if (lpInfo == NULL)	return AUDIO_ERROR_INVALPARAM;    /* create direct sound object */    if (_DirectSoundCreate(NULL, &DS.lpDirectSound, NULL) != DS_OK)        return AUDIO_ERROR_NODEVICE;    /* set direct sound cooperative level */    if (DS.lpDirectSound->lpVtbl->SetCooperativeLevel(DS.lpDirectSound,						      GetForegroundWindow(), DSSCL_PRIORITY) != DS_OK) {        _DirectSoundDestroy(DS.lpDirectSound);        return AUDIO_ERROR_NODEVICE;    }    /* get direct sound capabilities */    dsc.dwSize = sizeof(dsc);    if (DS.lpDirectSound->lpVtbl->GetCaps(DS.lpDirectSound, &dsc) != DS_OK) {        _DirectSoundDestroy(DS.lpDirectSound);        return AUDIO_ERROR_NODEVICE;    }    /* adjust the format settings */    lpInfo->nSampleRate = 44100;    if (!(dsc.dwFlags & DSCAPS_PRIMARYSTEREO))        lpInfo->wFormat &= ~AUDIO_FORMAT_STEREO;    if (!(dsc.dwFlags & DSCAPS_PRIMARY16BIT))        lpInfo->wFormat &= ~AUDIO_FORMAT_16BITS;    /* setup wave format structure */    wfx.wFormatTag = WAVE_FORMAT_PCM;    wfx.nChannels = lpInfo->wFormat & AUDIO_FORMAT_STEREO ? 2 : 1;    wfx.wBitsPerSample = lpInfo->wFormat & AUDIO_FORMAT_16BITS ? 16 : 8;    wfx.nSamplesPerSec = lpInfo->nSampleRate;    wfx.nAvgBytesPerSec = lpInfo->nSampleRate;    wfx.nBlockAlign = 1;    wfx.cbSize = 0;    if (lpInfo->wFormat & AUDIO_FORMAT_STEREO) {        wfx.nAvgBytesPerSec <<= 1;        wfx.nBlockAlign <<= 1;    }    if (lpInfo->wFormat & AUDIO_FORMAT_16BITS) {        wfx.nAvgBytesPerSec <<= 1;        wfx.nBlockAlign <<= 1;    }    /* create primary sound buffer */    memset(&dsbd, 0, sizeof(dsbd));    dsbd.dwSize = sizeof(dsbd);    dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER;    dsbd.dwBufferBytes = 0;    dsbd.lpwfxFormat = NULL;    if (DS.lpDirectSound->lpVtbl->CreateSoundBuffer(DS.lpDirectSound,						    &dsbd, &DS.lpPrimaryBuffer, NULL) != DS_OK) {        MSGBOX("Can't create primary buffer");        _DirectSoundDestroy(DS.lpDirectSound);        return AUDIO_ERROR_NODEVICE;    }            /* setup primary buffer format */    while (DS.lpPrimaryBuffer->lpVtbl->SetFormat(DS.lpPrimaryBuffer, &wfx) != DS_OK) {        if (lpInfo->nSampleRate <= 11025) {            MSGBOX("Can't change primary buffer format");            _DirectSoundDestroy(DS.lpDirectSound);            return AUDIO_ERROR_NODEVICE;        }        wfx.nSamplesPerSec >>= 1;        wfx.nAvgBytesPerSec >>= 1;        wfx.nBlockAlign >>= 1;        lpInfo->nSampleRate >>= 1;    }    /* start playing primary buffer */    DS.lpPrimaryBuffer->lpVtbl->Play(DS.lpPrimaryBuffer, 0, 0, DSBPLAY_LOOPING);    /* set the timer settings */    DS.dwTimer = GetTickCount();    DS.dwTimerAccum = 0;    /* set default master volume */    SetAudioMixerValue(AUDIO_MIXER_MASTER_VOLUME, 96);        /* create log panning table */    for (nPanning = 0; nPanning <= AUDIO_MAX_PANNING; nPanning++) {        DS.aLogPanningTable[nPanning] = (2000 * (nPanning - 128)) >> 7;    }    return AUDIO_ERROR_NONE;}static UINT AIAPI CloseAudio(VOID){    UINT i;    if (DS.lpDirectSound != NULL) {        /* stop and release primary buffer */        if (DS.lpPrimaryBuffer != NULL) {            DS.lpPrimaryBuffer->lpVtbl->Stop(DS.lpPrimaryBuffer);            DS.lpPrimaryBuffer->lpVtbl->Release(DS.lpPrimaryBuffer);        }        /* release duplicated sound buffers */        for (i = 0; i < AUDIO_MAX_VOICES; i++) {            if (DS.aSoundBuffer[i] != NULL) {                DS.aSoundBuffer[i]->lpVtbl->Stop(DS.aSoundBuffer[i]);                DS.aSoundBuffer[i]->lpVtbl->Release(DS.aSoundBuffer[i]);            }        }                /* release direct sound buffer */        _DirectSoundDestroy(DS.lpDirectSound);    }    /* clean up DirectSound driver variables */    memset(&DS, 0, sizeof(DS));    return AUDIO_ERROR_NONE;}static UINT AIAPI UpdateAudio(UINT nFrames){    LONG dwTimer = GetTickCount();    /* call the virtual audio timer callback */    if ((DS.dwTimerAccum += dwTimer - DS.dwTimer) >= DS.dwTimerRate) {        DS.dwTimerAccum -= DS.dwTimerRate;        if (DS.lpfnTimerHandler != NULL)	    DS.lpfnTimerHandler();    }    DS.dwTimer = dwTimer;    return AUDIO_ERROR_NONE;}static UINT AIAPI UpdateAudioSynth(VOID){    return AUDIO_ERROR_NONE;}static UINT AIAPI SetAudioMixerValue(UINT nChannel, UINT nValue){    LONG nVolume;    if (nChannel != AUDIO_MIXER_MASTER_VOLUME &&        nChannel != AUDIO_MIXER_TREBLE &&        nChannel != AUDIO_MIXER_BASS &&        nChannel != AUDIO_MIXER_CHORUS &&        nChannel != AUDIO_MIXER_REVERB)        return AUDIO_ERROR_INVALPARAM;    if (nChannel == AUDIO_MIXER_MASTER_VOLUME && nValue <= 256) {        DS.aLogVolumeTable[0] = -10000;        for (nVolume = 1; nVolume <= AUDIO_MAX_VOLUME; nVolume++) {	    LONG value = (nValue * nVolume) >> 6;	    DS.aLogVolumeTable[nVolume] = (LONG) (value == 0 ? -10000.0 : -2000.0 * log(value / 256.0) / log(1.0/256.0));        }    }    return AUDIO_ERROR_NONE;}static UINT AIAPI OpenVoices(UINT nVoices){    if (nVoices <= AUDIO_MAX_VOICES) {        return AUDIO_ERROR_NONE;    }    return AUDIO_ERROR_INVALPARAM;}static UINT AIAPI CloseVoices(VOID){    UINT i;    for (i = 0; i < AUDIO_MAX_VOICES; i++) {        /* stop and release duplicated sound buffers */        if (DS.aSoundBuffer[i] != NULL) {            DS.aSoundBuffer[i]->lpVtbl->Stop(DS.aSoundBuffer[i]);            DS.aSoundBuffer[i]->lpVtbl->Release(DS.aSoundBuffer[i]);        }    }    /* clean up duplicated sound buffer array */    memset(DS.aSoundBuffer, 0, sizeof(DS.aSoundBuffer));        return AUDIO_ERROR_NONE;}static UINT AIAPI SetAudioCallback(LPFNAUDIOWAVE lpfnAudioWave){    if (lpfnAudioWave != NULL) {    }    return AUDIO_ERROR_NONE;}static UINT AIAPI SetAudioTimerProc(LPFNAUDIOTIMER lpfnAudioTimer){    if (lpfnAudioTimer != NULL) {        /* start up the timer settings */        if (DS.lpfnTimerHandler == NULL) {	    DS.dwTimer = GetTickCount();	    DS.dwTimerAccum = 0;        }        DS.lpfnTimerHandler = lpfnAudioTimer;    }    return AUDIO_ERROR_NONE;}static UINT AIAPI SetAudioTimerRate(UINT nBPM){    if (nBPM >= 0x20 && nBPM <= 0xFF) {        /* set timer rate in milliseconds */        DS.dwTimerRate = (5 * 1000L) / (2 * nBPM);        return AUDIO_ERROR_NONE;    }    return AUDIO_ERROR_INVALPARAM;}static LONG AIAPI GetAudioDataAvail(VOID){    return 0L;}static UINT AIAPI CreateAudioData(LPAUDIOWAVE lpWave){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色电影在线| 蜜桃av一区二区| 51久久夜色精品国产麻豆| 成人精品高清在线| 久久精品国产澳门| 日韩成人一区二区三区在线观看| 欧美国产欧美综合| 在线不卡免费av| 欧美片在线播放| 日韩欧美一区二区久久婷婷| 日本高清无吗v一区| aaa亚洲精品| 不卡电影一区二区三区| 国产一区二区三区不卡在线观看| 三级影片在线观看欧美日韩一区二区 | 久久精品欧美日韩精品| 日韩一区二区三区视频在线观看| 欧美亚洲愉拍一区二区| 精品视频一区 二区 三区| 91麻豆国产香蕉久久精品| 成人理论电影网| 成人激情校园春色| 成人小视频免费观看| 国产精品 日产精品 欧美精品| 久久精品久久精品| 久久99国产精品麻豆| 久久99国内精品| 国产精品自在在线| 裸体歌舞表演一区二区| 久久精品国产亚洲a| 九一九一国产精品| 国产乱码精品一区二区三区忘忧草 | 欧美精品99久久久**| 国产亚洲一二三区| 国产精品进线69影院| 国产精品网曝门| 亚洲欧美另类小说视频| 亚洲一区二区成人在线观看| 洋洋av久久久久久久一区| 午夜精品久久久久久久久久 | 在线观看精品一区| 欧美中文字幕亚洲一区二区va在线| 91国在线观看| 欧美福利视频一区| 精品国产91久久久久久久妲己 | 在线观看一区二区精品视频| 欧美日韩精品福利| 日韩亚洲欧美在线| 亚洲国产精品精华液2区45| ㊣最新国产の精品bt伙计久久| 亚洲制服丝袜av| www.av精品| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲国产婷婷综合在线精品| 天堂va蜜桃一区二区三区漫画版| 婷婷六月综合网| 国产成人高清视频| 欧美三区在线观看| 中文字幕不卡一区| 亚洲444eee在线观看| 国产一区二区三区免费在线观看| www.亚洲免费av| 91精品国产欧美日韩| 综合婷婷亚洲小说| 亚洲成人av中文| 国产成都精品91一区二区三| 欧美三片在线视频观看 | 亚洲色欲色欲www| 天天爽夜夜爽夜夜爽精品视频| 国产激情一区二区三区| 91在线国内视频| 精品免费国产二区三区| 亚洲日本在线观看| 国产精品综合一区二区三区| 欧美色偷偷大香| 亚洲免费成人av| 国产剧情一区二区| 日韩一区二区三区精品视频| 亚洲欧美日韩小说| 美女免费视频一区| 欧美亚洲动漫另类| 亚洲欧美另类在线| 99精品桃花视频在线观看| 久久在线免费观看| 亚洲国产成人porn| 色94色欧美sute亚洲线路一ni| 国产亚洲精品aa| 久久99精品久久久久久久久久久久 | 久久成人免费网| 欧美一区二区观看视频| 亚洲高清久久久| 91极品美女在线| 亚洲精品国产精华液| 99久久精品免费精品国产| 午夜电影久久久| 91精品蜜臀在线一区尤物| 亚洲国产日韩a在线播放| 在线观看视频一区二区| 亚洲日本va在线观看| 国产成人免费视| 中文字幕的久久| caoporm超碰国产精品| 一区视频在线播放| 色呦呦网站一区| 亚洲永久精品大片| 欧美日本免费一区二区三区| 国产精品美女视频| 色视频成人在线观看免| 一区二区久久久久| 欧美军同video69gay| 日本91福利区| 精品电影一区二区| www.久久精品| 亚洲国产综合人成综合网站| 色香蕉久久蜜桃| 亚洲国产美女搞黄色| 日韩三级伦理片妻子的秘密按摩| 麻豆成人免费电影| 欧美国产一区在线| 91亚洲男人天堂| 免费成人av在线播放| 久久中文娱乐网| 99九九99九九九视频精品| 国产精品福利一区二区| 欧美日韩精品欧美日韩精品| 久久99精品久久久| 中文字幕亚洲在| 91精品国产欧美一区二区18| 国产91丝袜在线观看| 国产精品三级久久久久三级| 欧美日韩精品二区第二页| 国模无码大尺度一区二区三区| 亚洲国产精品激情在线观看| 欧美色精品天天在线观看视频| 激情欧美日韩一区二区| 99综合电影在线视频| 久久不见久久见免费视频7| 亚洲精品成人a在线观看| 国产精品免费观看视频| 欧美mv和日韩mv国产网站| 欧美日韩精品欧美日韩精品一| 成人av资源在线| 国产成人亚洲综合a∨猫咪| 欧美aⅴ一区二区三区视频| 亚洲成人av一区| 亚洲高清中文字幕| 亚洲综合色区另类av| 亚洲精选一二三| 亚洲精品日产精品乱码不卡| 国产精品嫩草影院com| 欧美国产在线观看| 国产色婷婷亚洲99精品小说| 久久久99精品久久| 久久久九九九九| 国产视频不卡一区| 欧美激情一区二区三区在线| 久久蜜桃香蕉精品一区二区三区| 欧美成人三级在线| 欧美精品一区二区三区久久久 | 久久精品国产一区二区| 日韩 欧美一区二区三区| 奇米精品一区二区三区在线观看 | 亚洲色图欧洲色图婷婷| 自拍偷拍亚洲欧美日韩| 亚洲欧美日韩国产另类专区| 一区二区在线电影| 亚洲一区在线视频观看| 亚洲h动漫在线| 青青草97国产精品免费观看| 免费看欧美女人艹b| 国产美女在线观看一区| 国产91对白在线观看九色| 91丨九色porny丨蝌蚪| 欧美中文一区二区三区| 欧美一区二区三区小说| 精品久久久久久最新网址| 国产欧美精品日韩区二区麻豆天美| 欧美高清在线视频| 亚洲午夜电影网| 免费高清在线一区| 成人黄色小视频| 欧美系列日韩一区| 精品国内二区三区| 国产精品美女久久久久久久久 | 国产一区二区三区电影在线观看| 成人性色生活片免费看爆迷你毛片| 99久久99久久精品国产片果冻| 久久精品国产第一区二区三区| eeuss鲁片一区二区三区在线观看| eeuss鲁片一区二区三区| 欧美三级乱人伦电影| 精品久久久久久久久久久院品网| 亚洲一区成人在线| 午夜视频一区在线观看| 久久av老司机精品网站导航| 91亚洲精华国产精华精华液| 制服.丝袜.亚洲.另类.中文 | 久久伊人蜜桃av一区二区| 亚洲欧美日韩国产成人精品影院| 美腿丝袜亚洲一区|