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

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

?? dsdrv2.c

?? 這個是延伸mame的在wince平臺下的游戲模擬器的代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
    LPDIRECTSOUNDBUFFER lpSoundBuffer;    DSBUFFERDESC dsbd;    DSBCAPS dsbc;    WAVEFORMATEX wfx;    if (lpWave != NULL) {        lpWave->dwHandle = 0;        /* setup waveform format */        wfx.wFormatTag = WAVE_FORMAT_PCM;        wfx.nChannels = 1;        wfx.wBitsPerSample = lpWave->wFormat & AUDIO_FORMAT_16BITS ? 16 : 8;        wfx.nSamplesPerSec = lpWave->nSampleRate;        wfx.nAvgBytesPerSec = lpWave->nSampleRate;        wfx.nBlockAlign = 1;        wfx.cbSize = 0;        if (lpWave->wFormat & AUDIO_FORMAT_16BITS) {	    wfx.nAvgBytesPerSec <<= 1;	    wfx.nBlockAlign <<= 1;        }                /* setup sound buffer description */        dsbd.dwSize = sizeof(dsbd);        dsbd.dwFlags = DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME |	    DSBCAPS_CTRLFREQUENCY | DSBCAPS_STICKYFOCUS |	    DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_LOCSOFTWARE;        dsbd.dwBufferBytes = lpWave->dwLength;        dsbd.dwReserved = 0;        dsbd.lpwfxFormat = &wfx;        /* create sound buffer object */        if (DS.lpDirectSound->lpVtbl->CreateSoundBuffer(DS.lpDirectSound,							&dsbd, &lpSoundBuffer, NULL) != DS_OK) {            MSGBOX("Can't create DirectSoundBuffer object");            return AUDIO_ERROR_NOMEMORY;        }        lpWave->dwHandle = (DWORD) lpSoundBuffer;            return AUDIO_ERROR_NONE;    }    return AUDIO_ERROR_INVALPARAM;}static UINT AIAPI DestroyAudioData(LPAUDIOWAVE lpWave){    LPDIRECTSOUNDBUFFER lpSoundBuffer;    if (lpWave != NULL && lpWave->dwHandle != 0) {        lpSoundBuffer = (LPDIRECTSOUNDBUFFER) lpWave->dwHandle;        lpSoundBuffer->lpVtbl->Stop(lpSoundBuffer);        lpSoundBuffer->lpVtbl->Release(lpSoundBuffer);        lpWave->dwHandle = 0;        return AUDIO_ERROR_NONE;    }    return AUDIO_ERROR_INVALPARAM;}static UINT AIAPI WriteAudioData(LPAUDIOWAVE lpWave, DWORD dwOffset, UINT nCount){    LPDIRECTSOUNDBUFFER lpSoundBuffer;    LPVOID lpPtr1, lpPtr2;    DWORD dwBytes1, dwBytes2;    UINT i;    if (lpWave != NULL && lpWave->dwHandle != 0 && lpWave->lpData != NULL) {        if (dwOffset + nCount <= lpWave->dwLength) {            lpSoundBuffer = (LPDIRECTSOUNDBUFFER) lpWave->dwHandle;            /* lock sound buffer in memory */            if (lpSoundBuffer->lpVtbl->Lock(lpSoundBuffer, dwOffset, nCount,					    &lpPtr1, &dwBytes1, &lpPtr2, &dwBytes2, 0) == DS_OK) {                /* copy samples to the sound buffer (convert to unsigned) */                if (lpWave->wFormat & AUDIO_FORMAT_16BITS) {                    memcpy(lpPtr1, lpWave->lpData + dwOffset, dwBytes1);                }                else {                    for (i = 0; i < dwBytes1; i++)                        ((LPBYTE)lpPtr1)[i] = lpWave->lpData[dwOffset++] ^ 0x80;                }                /* unlock the sound buffer from memory */                lpSoundBuffer->lpVtbl->Unlock(lpSoundBuffer, lpPtr1,					      dwBytes1, lpPtr2, dwBytes2);                return AUDIO_ERROR_NONE;            }            else {                MSGBOX("Can't lock DirectSoundBuffer memory");                lpSoundBuffer->lpVtbl->Restore(lpSoundBuffer);            }        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI PrimeVoice(UINT nVoice, LPAUDIOWAVE lpWave){    LPDIRECTSOUNDBUFFER lpSoundBuffer;        if (nVoice < AUDIO_MAX_VOICES && lpWave != NULL) {        lpSoundBuffer = (LPDIRECTSOUNDBUFFER) lpWave->dwHandle;        /* release the sound buffer for this voice */        if (DS.aSoundBuffer[nVoice] != NULL) {            DS.aSoundBuffer[nVoice]->lpVtbl->Stop(DS.aSoundBuffer[nVoice]);            DS.aSoundBuffer[nVoice]->lpVtbl->Release(DS.aSoundBuffer[nVoice]);            DS.aSoundBuffer[nVoice] = NULL;        }        /* create a duplicate sound buffer */        if (DS.lpDirectSound->lpVtbl->DuplicateSoundBuffer(DS.lpDirectSound,							   lpSoundBuffer, &DS.aSoundBuffer[nVoice]) != DS_OK) {            MSGBOX("Can't duplicate DirectSoundBuffer object");            return AUDIO_ERROR_NOMEMORY;        }                /* setup frequency, volume and panning */        DS.aSoundBuffer[nVoice]->lpVtbl->SetCurrentPosition(DS.aSoundBuffer[nVoice], 0);        DS.aSoundBuffer[nVoice]->lpVtbl->SetFrequency(DS.aSoundBuffer[nVoice],						      DS.aFrequencyTable[nVoice]);        DS.aSoundBuffer[nVoice]->lpVtbl->SetVolume(DS.aSoundBuffer[nVoice],						   DS.aLogVolumeTable[DS.aVolumeTable[nVoice]]);        DS.aSoundBuffer[nVoice]->lpVtbl->SetPan(DS.aSoundBuffer[nVoice],						DS.aLogPanningTable[DS.aPanningTable[nVoice]]);        /* save format of the sound buffer */        DS.aFormatTable[nVoice] = lpWave->wFormat;        return AUDIO_ERROR_NONE;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI StartVoice(UINT nVoice){    DWORD dwFlags;    if (nVoice < AUDIO_MAX_VOICES) {        // FIXME: handle looping samples!        if (DS.aSoundBuffer[nVoice] != NULL) {            dwFlags = (DS.aFormatTable[nVoice] & AUDIO_FORMAT_LOOP ? DSBPLAY_LOOPING : 0);            if (DS.aSoundBuffer[nVoice]->lpVtbl->Play(DS.aSoundBuffer[nVoice],						      0, 0, dwFlags) != DS_OK) {                MSGBOX("Can't play DirectSoundBuffer object");                return AUDIO_ERROR_INVALHANDLE;            }        }        return AUDIO_ERROR_NONE;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI StopVoice(UINT nVoice){    if (nVoice < AUDIO_MAX_VOICES) {        if (DS.aSoundBuffer[nVoice] != NULL) {            if (DS.aSoundBuffer[nVoice]->lpVtbl->Stop(DS.aSoundBuffer[nVoice]) != DS_OK) {                MSGBOX("Can't stop DirectSoundBuffer object");                return AUDIO_ERROR_INVALHANDLE;            }        }        return AUDIO_ERROR_NONE;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI SetVoicePosition(UINT nVoice, LONG dwPosition){    if (nVoice < AUDIO_MAX_VOICES) {        if (dwPosition >= AUDIO_MIN_POSITION &&            dwPosition <= AUDIO_MAX_POSITION) {            // FIXME: adjust position for 16-bit samples            if (DS.aSoundBuffer[nVoice] != NULL) {                DS.aSoundBuffer[nVoice]->lpVtbl->SetCurrentPosition(DS.aSoundBuffer[nVoice], dwPosition);            }            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI SetVoiceFrequency(UINT nVoice, LONG dwFrequency){    if (nVoice < AUDIO_MAX_VOICES) {        if (dwFrequency >= AUDIO_MIN_FREQUENCY &&            dwFrequency <= AUDIO_MAX_FREQUENCY) {            DS.aFrequencyTable[nVoice] = dwFrequency;            if (DS.aSoundBuffer[nVoice] != NULL) {                if (DS.aSoundBuffer[nVoice]->lpVtbl->SetFrequency(DS.aSoundBuffer[nVoice], dwFrequency) != DS_OK)                    MSGBOX("Can't change DirectSoundBuffer frequency");            }            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI SetVoiceVolume(UINT nVoice, UINT nVolume){    if (nVoice < AUDIO_MAX_VOICES) {        if (nVolume < AUDIO_MAX_VOLUME) {            DS.aVolumeTable[nVoice] = nVolume;            if (DS.aSoundBuffer[nVoice] != NULL) {                if (DS.aSoundBuffer[nVoice]->lpVtbl->SetVolume(DS.aSoundBuffer[nVoice], DS.aLogVolumeTable[nVolume]) != DS_OK)                    MSGBOX("Can't change DirectSoundBuffer volume");            }            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI SetVoicePanning(UINT nVoice, UINT nPanning){    if (nVoice < AUDIO_MAX_VOICES) {        if (nPanning < AUDIO_MAX_PANNING) {            DS.aPanningTable[nVoice] = nPanning;            if (DS.aSoundBuffer[nVoice] != NULL) {                if (DS.aSoundBuffer[nVoice]->lpVtbl->SetPan(DS.aSoundBuffer[nVoice], DS.aLogPanningTable[nPanning]) != DS_OK)                    MSGBOX("Can't change DirectSoundBuffer panning");            }            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI GetVoicePosition(UINT nVoice, LPLONG lpdwPosition){    DWORD dwWritePosition;    if (nVoice < AUDIO_MAX_VOICES) {        if (lpdwPosition != NULL) {            *lpdwPosition = 0L;            if (DS.aSoundBuffer[nVoice] != NULL) {                if (DS.aSoundBuffer[nVoice]->lpVtbl->GetCurrentPosition(                    DS.aSoundBuffer[nVoice], lpdwPosition, &dwWritePosition) != DS_OK)                    *lpdwPosition = 0L;            }            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI GetVoiceFrequency(UINT nVoice, LPLONG lpdwFrequency){    if (nVoice < AUDIO_MAX_VOICES) {        if (lpdwFrequency != NULL) {            *lpdwFrequency = DS.aFrequencyTable[nVoice];            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI GetVoiceVolume(UINT nVoice, LPUINT lpnVolume){    if (nVoice < AUDIO_MAX_VOICES) {        if (lpnVolume != NULL) {            *lpnVolume = DS.aVolumeTable[nVoice];            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI GetVoicePanning(UINT nVoice, LPUINT lpnPanning){    if (nVoice < AUDIO_MAX_VOICES) {        if (lpnPanning != NULL) {            *lpnPanning = DS.aPanningTable[nVoice];            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}static UINT AIAPI GetVoiceStatus(UINT nVoice, LPBOOL lpnStatus){    if (nVoice < AUDIO_MAX_VOICES) {        if (lpnStatus != NULL) {            *lpnStatus = 1;            if (DS.aSoundBuffer[nVoice] != NULL) {                if (DS.aSoundBuffer[nVoice]->lpVtbl->GetStatus(DS.aSoundBuffer[nVoice], lpnStatus) != DS_OK)                     MSGBOX("Can't getDirectSoundBuffer status");;                *lpnStatus = (*lpnStatus & DSBSTATUS_PLAYING ? 0 : 1);            }            return AUDIO_ERROR_NONE;        }        return AUDIO_ERROR_INVALPARAM;    }    return AUDIO_ERROR_INVALHANDLE;}/* * DirectSound audio driver public interface */static AUDIOWAVEDRIVER DirectSoundWaveDriver ={    GetAudioCaps, PingAudio, OpenAudio, CloseAudio,    UpdateAudio, SetAudioCallback};static AUDIOSYNTHDRIVER DirectSoundSynthDriver ={    GetAudioCaps, PingAudio, OpenAudio, CloseAudio,    UpdateAudioSynth, OpenVoices, CloseVoices,    SetAudioTimerProc, SetAudioTimerRate, SetAudioMixerValue,    GetAudioDataAvail, CreateAudioData, DestroyAudioData,    WriteAudioData, PrimeVoice, StartVoice, StopVoice,    SetVoicePosition, SetVoiceFrequency, SetVoiceVolume,    SetVoicePanning, GetVoicePosition, GetVoiceFrequency,    GetVoiceVolume, GetVoicePanning, GetVoiceStatus};AUDIODRIVER DirectSoundAccelDriver ={    &DirectSoundWaveDriver, &DirectSoundSynthDriver};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级一区二区| 日韩影院精彩在线| 日韩av电影免费观看高清完整版| 美女久久久精品| 在线一区二区观看| 欧美国产欧美综合| 秋霞国产午夜精品免费视频| 91首页免费视频| ww久久中文字幕| 免费观看一级特黄欧美大片| 欧美在线观看一区| 综合自拍亚洲综合图不卡区| 国产久卡久卡久卡久卡视频精品| 欧美欧美欧美欧美首页| 亚洲精品免费在线| 成年人午夜久久久| 国产日韩欧美精品综合| 久久国产日韩欧美精品| 91精品国产综合久久久久久| 亚洲精品久久久蜜桃| av一区二区三区四区| 国产亚洲一区字幕| 韩国一区二区三区| 亚洲精品在线网站| 美女任你摸久久| 日韩精品影音先锋| 久久精品av麻豆的观看方式| 欧美一卡2卡3卡4卡| 亚洲成人免费电影| 欧美日韩国产一二三| 五月婷婷另类国产| 欧美人妇做爰xxxⅹ性高电影| 亚洲丰满少妇videoshd| 欧美日韩一区二区在线观看 | 亚洲一区二区三区四区在线免费观看| 国产成人在线观看| 亚洲国产精品精华液2区45| 国产高清亚洲一区| 国产精品剧情在线亚洲| 91视频一区二区三区| 一区二区三区高清| 欧美日韩你懂得| 另类小说欧美激情| 久久综合丝袜日本网| 国产1区2区3区精品美女| 国产精品你懂的在线| 91网站在线播放| 午夜欧美视频在线观看| 宅男在线国产精品| 国产在线播放一区三区四| 久久精品视频网| 91小视频在线观看| 亚洲国产欧美日韩另类综合| 欧美一级午夜免费电影| 国产精品资源在线| 亚洲麻豆国产自偷在线| 3d动漫精品啪啪一区二区竹菊| 久久99精品久久久久久动态图| 国产精品九色蝌蚪自拍| 色综合咪咪久久| 日韩精品国产欧美| 国产亚洲欧美一区在线观看| 91免费国产视频网站| 日韩影院在线观看| 日本一区二区免费在线| 欧美性极品少妇| 韩国视频一区二区| 亚洲人被黑人高潮完整版| 欧美一三区三区四区免费在线看 | 91精品国产91久久久久久最新毛片| 久久99在线观看| 亚洲精品综合在线| 欧美精品一区二区三区一线天视频 | 中文字幕中文在线不卡住| 欧美日本乱大交xxxxx| 高清不卡一区二区| 亚洲18女电影在线观看| 国产精品毛片大码女人| 欧美一区日韩一区| 91农村精品一区二区在线| 国产一区二区三区av电影| 亚洲成人在线网站| 国产精品福利影院| 久久新电视剧免费观看| 欧美性大战久久久久久久| 国产成人av自拍| 美女免费视频一区二区| 亚洲成在人线在线播放| 亚洲欧美综合色| 久久久噜噜噜久噜久久综合| 欧美放荡的少妇| 在线观看视频91| yourporn久久国产精品| 国产一区二区三区在线观看免费视频 | 日韩三级视频在线看| 在线日韩av片| 97se亚洲国产综合自在线不卡| 国产精品综合二区| 久久99国产乱子伦精品免费| 亚洲成人av电影在线| 亚洲同性同志一二三专区| www国产成人免费观看视频 深夜成人网| 欧美日韩国产一级二级| 国产精品99久久久久久久vr| 国产精品视频麻豆| 精品精品国产高清一毛片一天堂| 欧美日韩一区久久| 欧美日韩在线免费视频| 91视频你懂的| 一本一道波多野结衣一区二区| 成人一区二区三区在线观看| 国产精品系列在线播放| 久久99在线观看| 精品一区二区免费| 捆绑变态av一区二区三区| 麻豆精品视频在线观看| 日本va欧美va精品发布| 青青草国产成人99久久| 日本在线播放一区二区三区| 日本不卡视频一二三区| 国产福利一区二区三区视频在线| 成人激情免费视频| 日韩精品电影一区亚洲| 调教+趴+乳夹+国产+精品| 亚洲国产另类精品专区| 亚洲bdsm女犯bdsm网站| 日韩激情中文字幕| 老司机免费视频一区二区三区| 国产综合一区二区| 国产99一区视频免费| 99久久久国产精品免费蜜臀| 91高清视频免费看| 在线播放一区二区三区| 欧美大片免费久久精品三p| 欧美www视频| 中文字幕国产精品一区二区| 亚洲男人电影天堂| 五月天亚洲婷婷| 国产精品资源在线观看| 91免费在线播放| 欧美一区二区三区思思人| 久久综合久久鬼色| 亚洲欧美国产高清| 免费不卡在线视频| 成人黄色片在线观看| 欧美日韩一级大片网址| 久久夜色精品一区| 亚洲欧美色图小说| 精品一区中文字幕| 色综合天天天天做夜夜夜夜做| 日韩和欧美的一区| 国产综合久久久久影院| 97精品视频在线观看自产线路二| 欧美久久久久久久久中文字幕| 久久综合中文字幕| 亚洲一区二三区| 国内成+人亚洲+欧美+综合在线 | 欧美私模裸体表演在线观看| 日韩精品一区国产麻豆| 一区在线观看免费| 久久av老司机精品网站导航| 91麻豆国产在线观看| 精品国产免费人成在线观看| 亚洲欧美激情小说另类| 国产一区二区三区观看| 欧美色图片你懂的| 国产日产欧美一区| 美女免费视频一区| 欧美三级蜜桃2在线观看| 中文文精品字幕一区二区| 免费成人在线观看视频| 在线观看视频欧美| 国产精品美女一区二区三区| 免费观看91视频大全| 欧美午夜免费电影| 亚洲欧洲无码一区二区三区| 狠狠色狠狠色综合| 欧美一级生活片| 亚洲高清视频中文字幕| av高清久久久| 亚洲国产成人午夜在线一区| 美洲天堂一区二卡三卡四卡视频| 欧美综合久久久| 亚洲柠檬福利资源导航| 国产成人午夜精品5599| 精品国产a毛片| 青青草视频一区| 9191精品国产综合久久久久久| 夜夜嗨av一区二区三区四季av| 99精品视频在线播放观看| 国产三级三级三级精品8ⅰ区| 精彩视频一区二区三区| 日韩午夜在线播放| 日本怡春院一区二区| 欧美日韩高清不卡| 天堂一区二区在线免费观看| 欧美视频精品在线| 天天爽夜夜爽夜夜爽精品视频| 欧美亚洲自拍偷拍| 爽好久久久欧美精品|