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

📄 x3daudio.h

📁 VC+DirectX写的飞机小游戏
💻 H
📖 第 1 页 / 共 2 页
字号:
/*-========================================================================-_
 |                               - X3DAUDIO -                               |
 |        Copyright (c) Microsoft Corporation.  All rights reserved.        |
 |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
 |VERSION:  1.1                         MODEL:   Unmanaged User-mode        |
 |CONTRACT: N / A                       EXCEPT:  No Exceptions              |
 |PARENT:   N / A                       MINREQ:  Win2000, Xenon             |
 |PROJECT:  X3DAudio                    DIALECT: MS Visual C++ 7.0          |
 |>------------------------------------------------------------------------<|
 | DUTY: Cross-platform stand-alone 3D audio math library                   |
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  NOTES:
    1.  Definition of terms:
            LFE: Low Frequency Effect -- always omnidirectional.
            LPF: Low Pass Filter, divided into two classifications:
                 Direct -- Applied to the direct signal path,
                           used for obstruction/occlusion effect.
                 Reverb -- Applied to the reverb signal path,
                           used for occlusion effect only.

    2.  Volume level is expressed as a linear amplitude scaler:
        1.0f represents no attenuation applied to the original signal,
        0.5f denotes an attenuation of 6dB, and 0.0f results in silence.
        Amplification (volume > 1.0f) is also allowed, and is not clamped.

    3.  X3DAudio uses a left-handed Cartesian coordinate system with values
        on the x-axis increasing from left to right, on the y-axis from
        bottom to top, and on the z-axis from near to far.
        Azimuths are measured clockwise from a given reference direction.

        Distance measurement is with respect to user-defined world units.
        Applications may provide coordinates using any system of measure
        as all non-normalized calculations are scale invariant, with such
        operations natively occurring in the user-defined world unit space.
        Metric constants are supplied only as a convenience.
        Distance is calculated using the Euclidean norm formula.

    4.  Only real values are permissible with functions using 32-bit
        float parameters -- NAN and infinite values are not accepted.
        All computation occurs in 32-bit precision mode.                    */


#ifndef __X3DAUDIO_H__
#define __X3DAUDIO_H__
//--------------<D-E-F-I-N-I-T-I-O-N-S>-------------------------------------//
    #if defined(_XBOX)
        #include <vectorintrinsics.h>
    #endif
    #include <d3d9types.h>

    // speaker geometry configuration flags, specifies assignment of channels to speaker positions, defined as per WAVEFORMATEXTENSIBLE.dwChannelMask
    #if !defined(SPEAKER_FRONT_LEFT)
        #define SPEAKER_FRONT_LEFT            0x00000001
        #define SPEAKER_FRONT_RIGHT           0x00000002
        #define SPEAKER_FRONT_CENTER          0x00000004
        #define SPEAKER_LOW_FREQUENCY         0x00000008
        #define SPEAKER_BACK_LEFT             0x00000010
        #define SPEAKER_BACK_RIGHT            0x00000020
        #define SPEAKER_FRONT_LEFT_OF_CENTER  0x00000040
        #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x00000080
        #define SPEAKER_BACK_CENTER           0x00000100
        #define SPEAKER_SIDE_LEFT             0x00000200
        #define SPEAKER_SIDE_RIGHT            0x00000400
        #define SPEAKER_TOP_CENTER            0x00000800
        #define SPEAKER_TOP_FRONT_LEFT        0x00001000
        #define SPEAKER_TOP_FRONT_CENTER      0x00002000
        #define SPEAKER_TOP_FRONT_RIGHT       0x00004000
        #define SPEAKER_TOP_BACK_LEFT         0x00008000
        #define SPEAKER_TOP_BACK_CENTER       0x00010000
        #define SPEAKER_TOP_BACK_RIGHT        0x00020000
    #endif

    // standard speaker geometry configurations, used with X3DAudioInitialize
    #if !defined(SPEAKER_STEREO)
        #define SPEAKER_STEREO           (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
        #define SPEAKER_2POINT1          (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_LOW_FREQUENCY)
        #define SPEAKER_SURROUND         (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
        #define SPEAKER_QUAD             (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
        #define SPEAKER_4POINT1          (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
        #define SPEAKER_5POINT1          (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
        #define SPEAKER_7POINT1          (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
        #define SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_SIDE_LEFT  | SPEAKER_SIDE_RIGHT)
        #define SPEAKER_7POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | SPEAKER_SIDE_LEFT  | SPEAKER_SIDE_RIGHT)
    #endif

    // xenon speaker geometry configuration, used with X3DAudioInitialize
    #if defined(_XBOX)
        #define SPEAKER_XBOX SPEAKER_5POINT1
    #endif


    #define X3DAUDIO_HANDLE_BYTESIZE 20 // size of instance handle in bytes

    // float math constants
    #define X3DAUDIO_PI  3.141592654f
    #define X3DAUDIO_2PI 6.283185307f

    // speed of sound in meters per second for dry air at approximately 20C, used with X3DAudioInitialize
    #define X3DAUDIO_SPEED_OF_SOUND 343.5f

    // calculation control flags, used with X3DAudioCalculate
    #define X3DAUDIO_CALCULATE_MATRIX        0x00000001 // enable matrix coefficient table calculation
    #define X3DAUDIO_CALCULATE_DELAY         0x00000002 // enable delay time array calculation (stereo final mix only)
    #define X3DAUDIO_CALCULATE_LPF_DIRECT    0x00000004 // enable LPF direct-path coefficient calculation
    #define X3DAUDIO_CALCULATE_LPF_REVERB    0x00000008 // enable LPF reverb-path coefficient calculation
    #define X3DAUDIO_CALCULATE_REVERB        0x00000010 // enable reverb send level calculation
    #define X3DAUDIO_CALCULATE_DOPPLER       0x00000020 // enable doppler shift factor calculation
    #define X3DAUDIO_CALCULATE_EMITTER_ANGLE 0x00000040 // enable emitter-to-listener interior angle calculation

    #define X3DAUDIO_CALCULATE_ZEROCENTER    0x00010000 // do not position to front center speaker, center destination channel will be zero in returned matrix coefficient table, used only for matrix calculations and only for final mix formats that have a front center channel


//--------------<M-A-C-R-O-S>-----------------------------------------------//
    // function storage-class attribute and calltype
    #if defined(_XBOX) || defined(X3DAUDIOSTATIC)
        #define X3DAUDIO_API_(type) EXTERN_C type STDAPICALLTYPE
    #else
        #if defined(X3DEXPORT)
            #define X3DAUDIO_API_(type) EXTERN_C __declspec(dllexport) type STDAPICALLTYPE
        #else
            #define X3DAUDIO_API_(type) EXTERN_C __declspec(dllimport) type STDAPICALLTYPE
        #endif
    #endif
    #define X3DAUDIO_IMP_(type) type STDMETHODCALLTYPE


//--------------<D-A-T-A---T-Y-P-E-S>---------------------------------------//
    // primitive types
    typedef INT_PTR  NWORD;   // natural machine word, bytesize platform specific
    typedef UINT_PTR UNWORD;  // unsigned natural machine word, bytesize platform specific
    typedef float    FLOAT32; // 32-bit IEEE float
    typedef D3DVECTOR X3DAUDIO_VECTOR; // float 3D vector

    // instance handle to precalculated constants
    typedef BYTE X3DAUDIO_HANDLE[X3DAUDIO_HANDLE_BYTESIZE];


    // Distance curve point:
    // Defines a DSP setting at a given normalized distance.
    typedef struct X3DAUDIO_DISTANCE_CURVE_POINT
    {
        FLOAT32 Distance;   // normalized distance, must be within [0.0f, 1.0f]
        FLOAT32 DSPSetting; // DSP control setting
    } X3DAUDIO_DISTANCE_CURVE_POINT, *LPX3DAUDIO_DISTANCE_CURVE_POINT;

    // Distance curve:

⌨️ 快捷键说明

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