CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
电平计

范例的描述

概述

该范例脚本实时获取回放音量。
接着它更改盒子的大小以视觉化音量。

cri4u_samples_criatom_script05_main.png

操作

无可用操作。

场景信息


中间件 CRI ADX (CRI Atom)
范例 脚本范例: Level meter(电平计)
存储路径 /CRIWARE/SDK/unity/samples/UnityProject/Assets/Scenes/criatom/script/ScriptSample05_LevelMeter
场景文件 ScriptSample05_scene_LevelMeter.unity
原始ADX数据 数据:简易的音乐交叉淡入淡出


程序的描述

该范例脚本实时获取音频回放的音量。
两个盒子的大小将根据两个立体声道的音量被更改。
播放的音乐将以 CriAtomSource 的形式添加至"LevelMeterCube L"盒子。当选中"Play On Start"选项时,回放将在场景执行的时候立即开始。

音量采集脚本

你可以获取ADX的各个DSP母线输出的音量,而不是各个Cue(音频)的音量。
该范例将获取DSP bus 0的音量。
DSP bus 0 为主母线,它是所有音频最终输出的地方。
同样使用了Debug.Log功能,以随时将音量值输出至控制台。

脚本文件 Scripts/LevelMeter.cs
using System.Collections;
public class LevelMeter : MonoBehaviour {
public int monitoredChannelId = 0;
private int analyzedDspBusId = 0;
private float objScaleBaseVal = 2.0f;
/* 该"Start()"方法将在"Update()"前调用。*/
void Start () {
CriAtom.AttachDspBusSetting("DspBusSetting_0");
/* 将Bus Analyzer设为使用"BusAnalyzeInfo" */
CriAtom.SetBusAnalyzer(true);
}
/* 更新GameObject的本地比例值 */
void Update(){
/* 从由mDspBusId确认的DSP母线中获取BusAnalyzerInfo */
CriAtomExAsr.BusAnalyzerInfo lBusInfo = CriAtom.GetBusAnalyzerInfo(analyzedDspBusId);
/* 计算GameObject比例的新数值 */
float lObjScaleNewVal = 0.1f + objScaleBaseVal * lBusInfo.peakLevels[monitoredChannelId];
Debug.Log("Channel_" + monitoredChannelId + " : " + lBusInfo.peakLevels[monitoredChannelId]);
/* 更新'this'游戏物体的本地比例 */
this.transform.localScale = new Vector3(lObjScaleNewVal, lObjScaleNewVal, lObjScaleNewVal);
}
}

如需让项目可使用综合管理脚本(如SoundManager),你仅需在脚本的Start功能中配置一次 CriAtom.AttachDspBusSetting 以及 CriAtom.SetBusAnalyzer 。
如需获取音量, CriAtom.GetBusAnalyzerInfo 功能将首先获取母线信息。
它的参数为DSP母线的数量。在这里指定了主母线,0。
音量存储于母线信息, CriAtomExAsr.BusAnalyzerInfo 的 peakLevels[] 一列。.
peakLevels[0]为立体声左声道,而peakLevels[1]为立体声右声道。

母线音量数值

用户可以从母线信息中获取不同的电平值,如RMS电平,峰值电平以及峰值保持电平。
存储于peakLevels[]的数值为大于等于0的浮点数值。
音频音量有可能为0.1或更小。
如需在游戏中提供电平计,或者将音量数值用于可变因素,请根据音频的音量 将数值提高或降低,以便使用。
[注意]
各个电平数值都为波形数据的振幅(单位并不是分贝)的比例因子。
你可以使用以下公式将数值转换为分贝。
dB = 10.0f * log10f(level);


DSP母线序号

在 CriAtom.GetBusAnalyzerInfo 所设定的DSP总线输出的序号,与CRI Atom Craft sound tool(音频工具)中的DSP bus setting information(母线设置信息)中的母线序号相对应。

cri4u_samples_criatom_script05_dsp_setting.png

DSP bus 0 为主母线,即为最终的输出阶段。通常情况下,所有的音频将从这里输出。

获取指定Cue的音量

DSP bus 0音量为音乐,音效和声音线路一同混合的音频的音量。
如需获取音乐或声音线路的音量,配置DSP设定,使数据从母线0以外的DSP母线输出。
举例,配置CRI Atom Craft,使你想知道音量的Cue同时输出至母线0和母线5。然后,在游戏中确认DSP bus 5的音量。

cri4u_samples_criatom_script05_dsp_5.png

DSP母线的音量更改可以在DSP bus setting窗口中确认,哪怕在CRI Atom Craft里进行回放时。

cri4u_samples_criatom_script05_dsp_level.png

如果你无法从DSP bus 0以外的母线获取音量

如果你无法在应用程序中,从DSP bus 0以外的母线获取音量请确认DSP bus setting以及bus analysis setting已在脚本中配置。
确认以下代码。在该范例中,它将在LevelMeter.cs的Start功能中运行。
DSP bus setting的名称,"DspBusSetting_0",可同样在工具中进行设置。请确认名称在两边(工具和脚本)是相同的。

CriAtom.AttachDspBusSetting("DspBusSetting_0");
CriAtom.SetBusAnalyzer(true);