структура X3DAUDIO_EMITTER (x3daudio.h)

Определяет одноточечный или многоточечный трехмерный источник звука, используемый с произвольным количеством звуковых каналов.

Синтаксис

typedef struct X3DAUDIO_EMITTER {
  X3DAUDIO_CONE           *pCone;
  X3DAUDIO_VECTOR         OrientFront;
  X3DAUDIO_VECTOR         OrientTop;
  X3DAUDIO_VECTOR         Position;
  X3DAUDIO_VECTOR         Velocity;
  FLOAT32                 InnerRadius;
  FLOAT32                 InnerRadiusAngle;
  UINT32                  ChannelCount;
  FLOAT32                 ChannelRadius;
  FLOAT32                 *pChannelAzimuths;
  X3DAUDIO_DISTANCE_CURVE *pVolumeCurve;
  X3DAUDIO_DISTANCE_CURVE *pLFECurve;
  X3DAUDIO_DISTANCE_CURVE *pLPFDirectCurve;
  X3DAUDIO_DISTANCE_CURVE *pLPFReverbCurve;
  X3DAUDIO_DISTANCE_CURVE *pReverbCurve;
  FLOAT32                 CurveDistanceScaler;
  FLOAT32                 DopplerScaler;
} X3DAUDIO_EMITTER, *LPX3DAUDIO_EMITTER;

Члены

pCone

Указатель на звуковой конус. Используется только с одноканейными излучателями для матрицы, LPF (прямых путей и путей реверберации) и вычислений реверберации. Значение NULL указывает, что излучатель является всенаправленным.

OrientFront

Ориентация переднего направления. Это значение должно быть ортоннормальным с OrientTop. При использовании необходимо нормализовать orientFront. Для одноканалового излучателя без конусов OrientFront используется только для расчетов угла излучателя. Для многоканаловых излучателей или одноканалового с конусами Используется OrientFront для матричных, LPF (прямых путей и путей реверберации) и реверберации вычислений.

OrientTop

Ориентация верхнего направления. Это значение должно быть ортонормальным для OrientFront. OrientTop используется только с многоканаловыми излучателями для матричных вычислений.

Position

Позиция в единицах мира, определяемых пользователем. Это значение не влияет на скорость.

Velocity

Вектор скорости в единицах в секунду, определяемых пользователем. Это значение используется только для допплерных вычислений. Это не влияет на позицию.

InnerRadius

Значение, используемое для вычислений внутреннего радиуса. Если innerRadius равно 0, внутренний радиус не используется, но InnerRadiusAngle все еще может использоваться. Это значение должно находиться в диапазоне от 0,0f до MAX_FLT.

InnerRadiusAngle

Значение, используемое для вычислений угла внутреннего радиуса. Это значение должно находиться в диапазоне от 0,0f до X3DAUDIO_PI/4,0.

ChannelCount

Число излучателей, определенное структурой X3DAUDIO_EMITTER . Должно быть больше 0.

ChannelRadius

Расстояние от позиции , в которую будут помещены каналы, если значение ChannelCount больше 1. ChannelRadius используется только с многоканейными излучателями для матричных вычислений. Значение должно быть больше или равно 0,0f.

pChannelAzimuths

Таблица позиций каналов, выраженная в виде азимута в радианах вдоль радиуса канала относительно переднего вектора ориентации в ортогонали плоскости к верхнему вектору ориентации. Азимут X3DAUDIO_2PI указывает, что канал является каналом низкочастотных эффектов (LFE). Каналы LFE размещаются в базе излучателя и вычисляются только относительно pLFECurve , но никогда не pVolumeCurve. pChannelAzimuths должен содержать не менее элементов ChannelCount , но может иметь значение NULL , если ChannelCount = 1. Для X3DAUDIO_2PI табличные значения должны находиться в пределах 0,0f. pChannelAzimuths используется с многоканальными излучателями для матричных вычислений.

pVolumeCurve

Кривая расстояния на уровне объема, которая используется только для матричных вычислений. NULL задает специализированную кривую по умолчанию, соответствующую обратному квадрату, так что при расстоянии от 0,0f до CurveDistanceScaler × 1,0f затухание не применяется. Если distance больше , чем CurveDistanceScaler × 1,0f, коэффициент усиления равен (CurveDistanceScaler × 1,0f)/distance. На расстоянии CurveDistanceScaler × 2,0f звук будет иметь половину громкости или -6 дБ, на расстоянии CurveDistanceScaler × 4,0f, звук будет иметь четверть громкости или -12 дБ и т. д.

pVolumeCurve и pLFECurve не зависят друг от друга. pVolumeCurve не влияет на объем канала LFE .

pLFECurve

Кривая расстояния отката LFE или NULL для использования кривой по умолчанию: [0.0f, CurveDistanceScaler ×1.0f], [CurveDistanceScaler ×1.0f, 0.0f]. Значение NULL для pLFECurve указывает кривую по умолчанию, которая соответствует обратному закону квадрата с расстояниями <= CurveDistanceScaler , зажатой без затухания. pVolumeCurve и pLFECurve не зависят друг от друга. PLFECurve не влияет на объем канала, отличный от LFE.

pLPFDirectCurve

Кривая расстояния коэффициента прямого пути фильтра (LPF) или значение NULL для использования кривой по умолчанию: [0,0f, 1,0f], [1,0f, 0,75f]. pLPFDirectCurve используется только для вычислений прямого пути LPF.

pLPFReverbCurve

Кривая расстояния коэффициента реверберации пути LPF или NULL для использования кривой по умолчанию: [0,0f, 0,75f], [1,0f, 0,75f]. pLPFReverbCurve используется только для вычислений пути реверберации LPF.

pReverbCurve

Реверберив кривую расстояния уровня отправки или значение NULL, чтобы использовать кривую по умолчанию: [0,0f, 1,0f], [1,0f, 0,0f].

CurveDistanceScaler

Масштабировщик расстояния кривых, используемый для масштабирования кривых нормализованного расстояния до определяемых пользователем единиц мира и /или для преувеличения их влияния. Это не влияет на другие вычисления. Значение должно находиться в диапазоне FLT_MIN для FLT_MAX. CurveDistanceScaler используется только для матричных вычислений, LPF (прямых путей и путей реверберации) и реверберации.

DopplerScaler

Масштабировщик допплеровской смены, используемый для преувеличения эффекта сдвига Доплера. DopplerScaler используется только для вычислений Doppler и не влияет на другие вычисления. Значение должно находиться в диапазоне от 0,0f до FLT_MAX.

Комментарии

X3DAUDIO_EMITTER поддерживает только конус в одноточечных излучателях. Многоточечные излучатели — это удобный и эффективный способ управления связанной группой источников звука. Многие свойства являются общими для всех точек каналов, таких как Doppler. Один и тот же сдвиг Doppler применяется ко всем каналам в излучателя. Таким образом, значение Doppler необходимо вычислить только один раз, а не по точке, как это необходимо с несколькими отдельными одноточечными излучателями. Поскольку X3DAUDIO_EMITTER имеет только один вектор ориентации, конус излучателя с несколькими точками будет иметь ограниченную полезность, заставляя все каналы вести себя так, как будто они обращены в одном направлении. Если требуется несколько независимых конусов, следует использовать несколько одноточечных излучателей, каждый из которых имеет собственную ориентацию.

Тип параметра X3DAUDIO_VECTOR типируется в DirectX::XMFLOAT3, чтобы предоставить значения x, y и z с плавающей запятой.

X3DAudio использует левую декартовую систему координат, при этом значения на оси X увеличиваются слева направо, на оси Y снизу вверх и на оси Z с близкого к дальнему. Азимуты измеряются по часовой стрелке от заданного направления.

Чтобы использовать X3DAudio с правыми координатами, необходимо свести на нет элемент .z orientFront, OrientTop, Position и Velocity.

Для определяемых пользователем кривых расстояния поле расстояния первой точки должно быть 0,0f, а поле расстояния последней точки — 1,0f.

Если излучатель перемещается за пределы расстояния (CurveDistanceScaler × 1,0f), последняя точка кривой используется для вычисления уровня вывода тома. Последняя точка определяется следующими параметрами:

X3DAUDIO_DISTANCE_CURVE.pPoints[PointCount-1].DSPSetting)

Внутренний радиус и угол внутреннего радиуса

InnerRadius используется для указания области плавного перехода вокруг исходной точки, когда звук проходит непосредственно через, над или под прослушивателем. Высота учитывается путем указания InnerRadiusAngle, при котором звук, высота которого увеличивается или уменьшается, в конечном итоге начнет кровоточить звук в более чем два динамика.

Если внутренний радиус и угол внутреннего радиуса не используются, излучатели слышны в двух ближайших динамиках к их текущему положению или ориентации (или, если они находятся непосредственно на линии с заданным углом одного динамика, исключительно от этого динамика).

Внутренний радиус и угол внутреннего радиуса не влияют на излучатели, расположенные вне конусов, которые они описывают. Внутри конуса они будут постепенно вызывать звук кровоточить в противоположные динамики, пока звук не будет одинаково слышен во всех динамиках, когда излучатель находится в том же положении, что и (или непосредственно выше или ниже) прослушивателя.

Внутренний радиус и угол внутреннего радиуса

Требования к платформе

Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); Пакет SDK для DirectX (XAudio 2.7)

Требования

Требование Значение
Заголовок x3daudio.h

См. также раздел

Структуры