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

📄 dsound8.c

📁 一个类似windows
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * Tests basic sound playback in DirectSound. * In particular we test each standard Windows sound format to make sure * we handle the sound card/driver quirks correctly. * * Part of this test involves playing test tones. But this only makes * sense if someone is going to carefully listen to it, and would only * bother everyone else. * So this is only done if the test is being run in interactive mode. * * Copyright (c) 2002-2004 Francois Gouget * * This library 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.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#define NONAMELESSSTRUCT#define NONAMELESSUNION#include <windows.h>#include <stdio.h>#include "wine/test.h"#include "dsound.h"#include "dxerr8.h"#include "dsconf.h"#include "dsound_test.h"static HRESULT (WINAPI *pDirectSoundCreate8)(LPCGUID,LPDIRECTSOUND8*,LPUNKNOWN)=NULL;int align(int length, int align){    return (length / align) * align;}static void IDirectSound8_test(LPDIRECTSOUND8 dso, BOOL initialized,                               LPCGUID lpGuid){    HRESULT rc;    DSCAPS dscaps;    int ref;    IUnknown * unknown;    IDirectSound * ds;    IDirectSound8 * ds8;    DWORD speaker_config, new_speaker_config;    DWORD certified;    /* Try to Query for objects */    rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);    ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %s\n",       DXGetErrorString8(rc));    if (rc==DS_OK)        IDirectSound8_Release(unknown);    rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);    ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %s\n",       DXGetErrorString8(rc));    if (rc==DS_OK)        IDirectSound_Release(ds);    rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound8,(LPVOID*)&ds8);    ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound8) "       "should have returned DSERR_INVALIDPARAM, returned: %s\n",       DXGetErrorString8(rc));    if (rc==DS_OK)        IDirectSound8_Release(ds8);    if (initialized == FALSE) {        /* try unitialized object */        rc=IDirectSound8_GetCaps(dso,0);        ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_GetCaps(NULL) "           "should have returned DSERR_UNINITIALIZED, returned: %s\n",           DXGetErrorString8(rc));        rc=IDirectSound8_GetCaps(dso,&dscaps);        ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_GetCaps() "           "should have returned DSERR_UNINITIALIZED, returned: %s\n",           DXGetErrorString8(rc));        rc=IDirectSound8_Compact(dso);        ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_Compact() "           "should have returned DSERR_UNINITIALIZED, returned: %s\n",           DXGetErrorString8(rc));        rc=IDirectSound8_GetSpeakerConfig(dso,&speaker_config);        ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_GetSpeakerConfig() "           "should have returned DSERR_UNINITIALIZED, returned: %s\n",           DXGetErrorString8(rc));        rc=IDirectSound8_VerifyCertification(dso, &certified);        ok(rc==DSERR_UNINITIALIZED,"IDirectSound8_VerifyCertification() "           "should have returned DSERR_UNINITIALIZED, returned: %s\n",           DXGetErrorString8(rc));        rc=IDirectSound8_Initialize(dso,lpGuid);        ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,           "IDirectSound8_Initialize() failed: %s\n",DXGetErrorString8(rc));        if (rc==DSERR_NODRIVER) {            trace("  No Driver\n");            goto EXIT;        } else if (rc==E_FAIL) {            trace("  No Device\n");            goto EXIT;        } else if (rc==DSERR_ALLOCATED) {            trace("  Already In Use\n");            goto EXIT;        }    }    rc=IDirectSound8_Initialize(dso,lpGuid);    ok(rc==DSERR_ALREADYINITIALIZED, "IDirectSound8_Initialize() "       "should have returned DSERR_ALREADYINITIALIZED: %s\n",       DXGetErrorString8(rc));    /* DSOUND: Error: Invalid caps buffer */    rc=IDirectSound8_GetCaps(dso,0);    ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_GetCaps() "       "should have returned DSERR_INVALIDPARAM, returned: %s\n",       DXGetErrorString8(rc));    ZeroMemory(&dscaps, sizeof(dscaps));    /* DSOUND: Error: Invalid caps buffer */    rc=IDirectSound8_GetCaps(dso,&dscaps);    ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_GetCaps() "       "should have returned DSERR_INVALIDPARAM, returned: %s\n",       DXGetErrorString8(rc));    dscaps.dwSize=sizeof(dscaps);    /* DSOUND: Running on a certified driver */    rc=IDirectSound8_GetCaps(dso,&dscaps);    ok(rc==DS_OK,"IDirectSound8_GetCaps() failed: %s\n",DXGetErrorString8(rc));    rc=IDirectSound8_Compact(dso);    ok(rc==DSERR_PRIOLEVELNEEDED,"IDirectSound8_Compact() failed: %s\n",       DXGetErrorString8(rc));    rc=IDirectSound8_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);    ok(rc==DS_OK,"IDirectSound8_SetCooperativeLevel() failed: %s\n",       DXGetErrorString8(rc));    rc=IDirectSound8_Compact(dso);    ok(rc==DS_OK,"IDirectSound8_Compact() failed: %s\n",DXGetErrorString8(rc));    rc=IDirectSound8_GetSpeakerConfig(dso,0);    ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_GetSpeakerConfig(NULL) "       "should have returned DSERR_INVALIDPARAM, returned: %s\n",       DXGetErrorString8(rc));    rc=IDirectSound8_GetSpeakerConfig(dso,&speaker_config);    ok(rc==DS_OK,"IDirectSound8_GetSpeakerConfig() failed: %s\n",       DXGetErrorString8(rc));    speaker_config = DSSPEAKER_COMBINED(DSSPEAKER_STEREO,                                        DSSPEAKER_GEOMETRY_WIDE);    rc=IDirectSound8_SetSpeakerConfig(dso,speaker_config);    ok(rc==DS_OK,"IDirectSound8_SetSpeakerConfig() failed: %s\n",       DXGetErrorString8(rc));    if (rc==DS_OK) {        rc=IDirectSound8_GetSpeakerConfig(dso,&new_speaker_config);        ok(rc==DS_OK,"IDirectSound8_GetSpeakerConfig() failed: %s\n",           DXGetErrorString8(rc));        if (rc==DS_OK && speaker_config!=new_speaker_config)               trace("IDirectSound8_GetSpeakerConfig() failed to set speaker "               "config: expected 0x%08lx, got 0x%08lx\n",               speaker_config,new_speaker_config);    }    rc=IDirectSound8_VerifyCertification(dso, &certified);    ok(rc==DS_OK||rc==E_NOTIMPL,"IDirectSound8_VerifyCertification() failed: %s\n",       DXGetErrorString8(rc));EXIT:    ref=IDirectSound8_Release(dso);    ok(ref==0,"IDirectSound8_Release() has %d references, should have 0\n",ref);}static void IDirectSound8_tests(void){    HRESULT rc;    LPDIRECTSOUND8 dso=NULL;    trace("Testing IDirectSound8\n");    /* try the COM class factory method of creation with no device specified */    rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,                        &IID_IDirectSound8, (void**)&dso);    ok(rc==S_OK,"CoCreateInstance() failed: %s\n",DXGetErrorString8(rc));    if (dso)        IDirectSound8_test(dso, FALSE, NULL);    /* try the COM class factory method of creation with default playback     *  device specified */    rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,                        &IID_IDirectSound8, (void**)&dso);    ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound8) failed: %s\n",       DXGetErrorString8(rc));    if (dso)        IDirectSound8_test(dso, FALSE, &DSDEVID_DefaultPlayback);    /* try the COM class factory method of creation with default voice     * playback device specified */    rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,                        &IID_IDirectSound8, (void**)&dso);    ok(rc==S_OK,"CoCreateInstance(CLSID_DirectSound8) failed: %s\n",       DXGetErrorString8(rc));    if (dso)        IDirectSound8_test(dso, FALSE, &DSDEVID_DefaultVoicePlayback);    /* try the COM class factory method of creation with a bad     * IID specified */    rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,                        &CLSID_DirectSoundPrivate, (void**)&dso);    ok(rc==E_NOINTERFACE,       "CoCreateInstance(CLSID_DirectSound8,CLSID_DirectSoundPrivate) "       "should have failed: %s\n",DXGetErrorString8(rc));    /* try the COM class factory method of creation with a bad     * GUID and IID specified */    rc=CoCreateInstance(&CLSID_DirectSoundPrivate, NULL, CLSCTX_INPROC_SERVER,                        &IID_IDirectSound8, (void**)&dso);    ok(rc==REGDB_E_CLASSNOTREG,       "CoCreateInstance(CLSID_DirectSoundPrivate,IID_IDirectSound8) "       "should have failed: %s\n",DXGetErrorString8(rc));    /* try with no device specified */    rc=pDirectSoundCreate8(NULL,&dso,NULL);    ok(rc==S_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,       "DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc==DS_OK && dso)        IDirectSound8_test(dso, TRUE, NULL);    /* try with default playback device specified */    rc=pDirectSoundCreate8(&DSDEVID_DefaultPlayback,&dso,NULL);    ok(rc==S_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,       "DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc==DS_OK && dso)        IDirectSound8_test(dso, TRUE, NULL);    /* try with default voice playback device specified */    rc=pDirectSoundCreate8(&DSDEVID_DefaultVoicePlayback,&dso,NULL);    ok(rc==S_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,       "DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc==DS_OK && dso)        IDirectSound8_test(dso, TRUE, NULL);    /* try with a bad device specified */    rc=pDirectSoundCreate8(&DSDEVID_DefaultVoiceCapture,&dso,NULL);    ok(rc==DSERR_NODRIVER,"DirectSoundCreate8(DSDEVID_DefaultVoiceCapture) "       "should have failed: %s\n",DXGetErrorString8(rc));}static HRESULT test_dsound8(LPGUID lpGuid){    HRESULT rc;    LPDIRECTSOUND8 dso=NULL;    int ref;    /* DSOUND: Error: Invalid interface buffer */    rc=pDirectSoundCreate8(lpGuid,0,NULL);    ok(rc==DSERR_INVALIDPARAM,"DirectSoundCreate8() should have returned "       "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));    /* Create the DirectSound8 object */    rc=pDirectSoundCreate8(lpGuid,&dso,NULL);    ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL,       "DirectSoundCreate8() failed: %s\n",DXGetErrorString8(rc));    if (rc!=DS_OK)        return rc;    /* Try the enumerated device */    IDirectSound8_test(dso, TRUE, lpGuid);    /* Try the COM class factory method of creation with enumerated device */    rc=CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER,

⌨️ 快捷键说明

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