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

📄 dsound8.c

📁 一个类似windows
💻 C
📖 第 1 页 / 共 3 页
字号:
                        &IID_IDirectSound8, (void**)&dso);    ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound) failed: %s\n",       DXGetErrorString8(rc));    if (dso)        IDirectSound8_test(dso, FALSE, lpGuid);    /* Create a DirectSound8 object */    rc=pDirectSoundCreate8(lpGuid,&dso,NULL);    ok(rc==DS_OK,"DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc==DS_OK) {        LPDIRECTSOUND8 dso1=NULL;        /* Create a second DirectSound8 object */        rc=pDirectSoundCreate8(lpGuid,&dso1,NULL);        ok(rc==DS_OK,"DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));        if (rc==DS_OK) {            /* Release the second DirectSound8 object */            ref=IDirectSound8_Release(dso1);            ok(ref==0,"IDirectSound8_Release() has %d references, "               "should have 0\n",ref);            ok(dso!=dso1,"DirectSound8 objects should be unique: "               "dso=%p,dso1=%p\n",dso,dso1);        }        /* Release the first DirectSound8 object */        ref=IDirectSound8_Release(dso);        ok(ref==0,"IDirectSound8_Release() has %d references, should have 0\n",           ref);        if (ref!=0)            return DSERR_GENERIC;    } else        return rc;    /* Create a DirectSound8 object */    rc=pDirectSoundCreate8(lpGuid,&dso,NULL);    ok(rc==DS_OK,"DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc==DS_OK) {        LPDIRECTSOUNDBUFFER secondary;        DSBUFFERDESC bufdesc;        WAVEFORMATEX wfx;        init_format(&wfx,WAVE_FORMAT_PCM,11025,8,1);        ZeroMemory(&bufdesc, sizeof(bufdesc));        bufdesc.dwSize=sizeof(bufdesc);        bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRL3D;        bufdesc.dwBufferBytes=align(wfx.nAvgBytesPerSec*BUFFER_LEN/1000,                                    wfx.nBlockAlign);        bufdesc.lpwfxFormat=&wfx;        rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);        ok(rc==DS_OK && secondary!=NULL,           "IDirectSound8_CreateSoundBuffer() failed to create a secondary "           "buffer: %s\n",DXGetErrorString8(rc));        if (rc==DS_OK && secondary!=NULL) {            LPDIRECTSOUND3DBUFFER buffer3d;            LPDIRECTSOUNDBUFFER8 buffer8;            rc=IDirectSound8_QueryInterface(secondary,                                            &IID_IDirectSound3DBuffer,                                            (void **)&buffer3d);            ok(rc==DS_OK && buffer3d!=NULL,               "IDirectSound8_QueryInterface() failed: %s\n",               DXGetErrorString8(rc));            if (rc==DS_OK && buffer3d!=NULL) {                ref=IDirectSound3DBuffer_AddRef(buffer3d);                ok(ref==2,"IDirectSound3DBuffer_AddRef() has %d references, "                   "should have 2\n",ref);            }            rc=IDirectSound8_QueryInterface(secondary,                                            &IID_IDirectSoundBuffer8,                                            (void **)&buffer8);            if (rc==DS_OK && buffer8!=NULL) {                ref=IDirectSoundBuffer8_AddRef(buffer8);                ok(ref==3,"IDirectSoundBuffer8_AddRef() has %d references, "                   "should have 3\n",ref);            }            ref=IDirectSoundBuffer_AddRef(secondary);            ok(ref==4,"IDirectSoundBuffer_AddRef() has %d references, "               "should have 4\n",ref);        }        /* release with buffer */        ref=IDirectSound8_Release(dso);        ok(ref==0,"IDirectSound8_Release() has %d references, should have 0\n",           ref);        if (ref!=0)            return DSERR_GENERIC;    } else        return rc;    return DS_OK;}static HRESULT test_primary8(LPGUID lpGuid){    HRESULT rc;    LPDIRECTSOUND8 dso=NULL;    LPDIRECTSOUNDBUFFER primary=NULL,second=NULL,third=NULL;    DSBUFFERDESC bufdesc;    DSCAPS dscaps;    WAVEFORMATEX wfx;    int ref;    /* Create the DirectSound object */    rc=pDirectSoundCreate8(lpGuid,&dso,NULL);    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED,       "DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc!=DS_OK)        return rc;    /* Get the device capabilities */    ZeroMemory(&dscaps, sizeof(dscaps));    dscaps.dwSize=sizeof(dscaps);    rc=IDirectSound8_GetCaps(dso,&dscaps);    ok(rc==DS_OK,"IDirectSound8_GetCaps() failed: %s\n",DXGetErrorString8(rc));    if (rc!=DS_OK)        goto EXIT;    /* DSOUND: Error: Invalid buffer description pointer */    rc=IDirectSound8_CreateSoundBuffer(dso,0,0,NULL);    ok(rc==DSERR_INVALIDPARAM,       "IDirectSound8_CreateSoundBuffer should have returned "       "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));    /* DSOUND: Error: Invalid buffer description pointer */    rc=IDirectSound8_CreateSoundBuffer(dso,0,&primary,NULL);    ok(rc==DSERR_INVALIDPARAM && primary==0,       "IDirectSound8_CreateSoundBuffer() should have returned "       "DSERR_INVALIDPARAM, returned: rc=%s,dsbo=%p\n",       DXGetErrorString8(rc),primary);    /* DSOUND: Error: Invalid buffer description pointer */    rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,0,NULL);    ok(rc==DSERR_INVALIDPARAM && primary==0,       "IDirectSound8_CreateSoundBuffer() should have failed: rc=%s,"       "dsbo=%p\n",DXGetErrorString8(rc),primary);    ZeroMemory(&bufdesc, sizeof(bufdesc));    /* DSOUND: Error: Invalid size */    /* DSOUND: Error: Invalid buffer description */    rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);    ok(rc==DSERR_INVALIDPARAM && primary==0,       "IDirectSound8_CreateSoundBuffer() should have failed: rc=%s,"       "primary=%p\n",DXGetErrorString8(rc),primary);    /* We must call SetCooperativeLevel before calling CreateSoundBuffer */    /* DSOUND: Setting DirectSound cooperative level to DSSCL_PRIORITY */    rc=IDirectSound8_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);    ok(rc==DS_OK,"IDirectSound8_SetCooperativeLevel() failed: %s\n",       DXGetErrorString8(rc));    if (rc!=DS_OK)        goto EXIT;    /* Testing the primary buffer */    primary=NULL;    ZeroMemory(&bufdesc, sizeof(bufdesc));    bufdesc.dwSize=sizeof(bufdesc);    bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME;    bufdesc.lpwfxFormat = &wfx;    init_format(&wfx,WAVE_FORMAT_PCM,11025,8,2);    rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);    ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_CreateSoundBuffer() should have "       "returned DSERR_INVALIDPARAM, returned: %s\n", DXGetErrorString8(rc));    if (rc==DS_OK && primary!=NULL)        IDirectSoundBuffer_Release(primary);    primary=NULL;    ZeroMemory(&bufdesc, sizeof(bufdesc));    bufdesc.dwSize=sizeof(bufdesc);    bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME;    rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);    ok((rc==DS_OK && primary!=NULL) || (rc==DSERR_CONTROLUNAVAIL),       "IDirectSound8_CreateSoundBuffer() failed to create a primary buffer: "       "%s\n",DXGetErrorString8(rc));    if (rc==DSERR_CONTROLUNAVAIL)        trace("  No Primary\n");    else if (rc==DS_OK && primary!=NULL) {        LONG vol;        /* Try to create a second primary buffer */        /* DSOUND: Error: The primary buffer already exists.         * Any changes made to the buffer description will be ignored. */        rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&second,NULL);        ok(rc==DS_OK && second==primary,           "IDirectSound8_CreateSoundBuffer() should have returned original "           "primary buffer: %s\n",DXGetErrorString8(rc));        ref=IDirectSoundBuffer_Release(second);        ok(ref==1,"IDirectSoundBuffer_Release() primary has %d references, "           "should have 1\n",ref);        /* Try to duplicate a primary buffer */        /* DSOUND: Error: Can't duplicate primary buffers */        rc=IDirectSound8_DuplicateSoundBuffer(dso,primary,&third);        /* rc=0x88780032 */        ok(rc!=DS_OK,"IDirectSound8_DuplicateSoundBuffer() primary buffer "           "should have failed %s\n",DXGetErrorString8(rc));        rc=IDirectSoundBuffer_GetVolume(primary,&vol);        ok(rc==DS_OK,"IDirectSoundBuffer_GetVolume() failed: %s\n",           DXGetErrorString8(rc));        if (winetest_interactive) {            trace("Playing a 5 seconds reference tone at the current volume.\n");            if (rc==DS_OK)                trace("(the current volume is %ld according to DirectSound)\n",                      vol);            trace("All subsequent tones should be identical to this one.\n");            trace("Listen for stutter, changes in pitch, volume, etc.\n");        }        test_buffer8(dso,primary,1,FALSE,0,FALSE,0,winetest_interactive &&                     !(dscaps.dwFlags & DSCAPS_EMULDRIVER),5.0,0,0,0,0);        ref=IDirectSoundBuffer_Release(primary);        ok(ref==0,"IDirectSoundBuffer_Release() primary has %d references, "           "should have 0\n",ref);    }    /* Set the CooperativeLevel back to normal */    /* DSOUND: Setting DirectSound cooperative level to DSSCL_NORMAL */    rc=IDirectSound8_SetCooperativeLevel(dso,get_hwnd(),DSSCL_NORMAL);    ok(rc==DS_OK,"IDirectSound8_SetCooperativeLevel() failed: %s\n",       DXGetErrorString8(rc));EXIT:    ref=IDirectSound8_Release(dso);    ok(ref==0,"IDirectSound8_Release() has %d references, should have 0\n",ref);    if (ref!=0)        return DSERR_GENERIC;    return rc;}/* * Test the primary buffer at different formats while keeping the * secondary buffer at a constant format. */static HRESULT test_primary_secondary8(LPGUID lpGuid){    HRESULT rc;    LPDIRECTSOUND8 dso=NULL;    LPDIRECTSOUNDBUFFER primary=NULL,secondary=NULL;    DSBUFFERDESC bufdesc;    DSCAPS dscaps;    WAVEFORMATEX wfx, wfx2;    int ref;    unsigned int f;    /* Create the DirectSound object */    rc=pDirectSoundCreate8(lpGuid,&dso,NULL);    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED,       "DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc!=DS_OK)        return rc;    /* Get the device capabilities */    ZeroMemory(&dscaps, sizeof(dscaps));    dscaps.dwSize=sizeof(dscaps);    rc=IDirectSound8_GetCaps(dso,&dscaps);    ok(rc==DS_OK,"IDirectSound8_GetCaps() failed: %s\n",DXGetErrorString8(rc));    if (rc!=DS_OK)        goto EXIT;    /* We must call SetCooperativeLevel before creating primary buffer */    /* DSOUND: Setting DirectSound cooperative level to DSSCL_PRIORITY */    rc=IDirectSound8_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);    ok(rc==DS_OK,"IDirectSound8_SetCooperativeLevel() failed: %s\n",       DXGetErrorString8(rc));    if (rc!=DS_OK)        goto EXIT;    ZeroMemory(&bufdesc, sizeof(bufdesc));    bufdesc.dwSize=sizeof(bufdesc);    bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER;    rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);    ok(rc==DS_OK && primary!=NULL,       "IDirectSound8_CreateSoundBuffer() failed to create a primary buffer "       "%s\n",DXGetErrorString8(rc));    if (rc==DS_OK && primary!=NULL) {        for (f=0;f<NB_FORMATS;f++) {            /* We must call SetCooperativeLevel to be allowed to call             * SetFormat */            /* DSOUND: Setting DirectSound cooperative level to             * DSSCL_PRIORITY */            rc=IDirectSound8_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);            ok(rc==DS_OK,"IDirectSound8_SetCooperativeLevel() failed: %s\n",               DXGetErrorString8(rc));            if (rc!=DS_OK)                goto EXIT;

⌨️ 快捷键说明

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