CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
[CriAtom] 实时参数控制

范例描述

概述

cri4u_samples_criatom_scene04_game_mini.png

该范例演示了如何在音乐回放时实时控制回放参数,如音量和音高。

操作

点击屏幕上的盒子。接着,叙述将会开始。

你可以滑动滑块以控制回放参数。
以下表格显示了滑块以及所对应的回放参数。

滑块以及回放参数
滑块 回放参数
Volume Control 音量
Pitch Control 音高
Bus Send 00 母线传输0: 主母线
Bus Send 01 母线传输1: 混响
Bus Send 02 母线传输2: 音高调整器
Bus Send 03 母线传输3: 回音/环绕器
Bus Send 04 母线传输4: 压缩器
Bus Send 05 母线传输5: 无
Bus Send 06 母线传输6: 无
Bus Send 07 母线传输7: 无

如需初始化参数,请点击Reset Parameters按钮。

场景信息


中间件 CRI ADX (CRI Atom)
范例 Basic sample(基础范例)
存储路径 /CRIWARE/SDK/unity/samples/UnityProject/Assets/Scenes/criatom/basic/
场景文件 Scene_04_ControlParameter.unity


程序描述

当你在CRI Atom Craft创建声音数据时,你可以为cue,音轨以及波形数据设置回放参数。
当脚本播放cue时,为cue设置的回放参数将用于回放。
然而,你可以在回放开始后,实时更改回放参数。
  • 回放参数
    • Volume(音量)
    • Pitch(音高(更改回放速度))
    • Bandpass(带通)
    • Equalizing filter(均衡滤波器)
    • Panning(平移)
    • Pitch shift(音高位移(保留回放速度))
    • Compressor(压缩器)
    • Distortion(失真)
    • Reverb(混响)
    • Bus send level(母线传送电平)

音量控制以及音高控制

/* 音量 */
private float volumeValue = 1.0f;
/* 音高 */
private float pitchValue = 0.0f;
/* 音高控制GUI */
GUI.Label (new Rect(20, 18 * (gui_i++), 200, 24), "Pitch Control Value " + this.pitchValue.ToString("0.00"));
this.pitchValue = GUI.HorizontalSlider(new Rect(20, 18 * (gui_i++), 200, 12), pitchValue, -1200.0f, 1200.0f);
if (GUI.changed || on_reset == true) {
CriAtomSource atom_source = gameObject.GetComponent<CriAtomSource>();
/* 如果参数在Inspector中,请在此处控制它们 */
atom_source.volume = volumeValue;
atom_source.pitch = pitchValue;
}

附上DSP母线设置

有关DSP母线的设置于CRI Atom Craft进行配置。
它们主要涉及到各个母线的DSP效果(如混响,延迟,失真以及音高位移)。

在你可以使用这些设置之前,你必须调用AttachDspBusSetting()函数。
该范例在[CRIWARE]对象的CRI组件初始化(ACF文件被加载)后,会自动地附上DSP母线设置。

母线传送电平

母线传送主要用于开启DSP效果。
母线传送电平与数据的电平设置相互结合。因此,数据电平必须事先设置为1.0(开启)。
数据传送至的DSP母线必须与DSP效果以及最终输出连接。

/* 母线传送的最大数量 */
private const int maxBus = 8;
/* Bus send 0-7 */
private float[] busSendlevelValue = new float[maxBus];
/* Bus Send Level(母线传送电平)控制GUI */
GUILayout.BeginHorizontal();
{
for (int i = 0; i < maxBus / 2; i++) {
this.busSendlevelValue[i] = Scene_00_GUI.HorizontalSlider(busSendlevelValue[i], 0.0f, 1.0f);
}
for (int i = maxBus / 2; i < maxBus; i++) {
this.busSendlevelValue[i] = Scene_00_GUI.HorizontalSlider(busSendlevelValue[i], 0.0f, 1.0f);
}
}
if (GUI.changed || on_reset == true) {
CriAtomSource atom_source = gameObject.GetComponent<CriAtomSource>();
/* 更新母线传送电平。 */
/* 如果有参数并不存在于Inspector方面,请使用函数来控制它。 */
/* Bus 0默认为1.0f,并且应用了乘法。 */
atom_source.SetBusSendLevel(0, this.busSendlevelValue[0]);
for (int i = 1; i < maxBus; i++) {
/* Bus 1-7默认为0.0f,并且应用了加法。(指定偏移量) */
atom_source.SetBusSendLevelOffset(i, this.busSendlevelValue[i]);
}
}