中级09/Unity中交互式音乐
ADX2中制作交互式音乐的常用方式主要有两种,Block和AISAC。AISAC用于过渡和纵向音乐变化,例如用音乐表现情绪的渐变使得音乐增加等。而Block则是用于过渡时能够处于节拍点上进行过渡,使得变化非常自然。
ADX2中创建
我们在ADX2中创建一个Cue,在Cue中创建多个Block,将我们需要的音乐放置在对应的Block中:
每个Block都更改其切块和过渡方式,使得每个Block的小块末尾卡在节拍上:
通过设置每次播放Block内的波形时,当触发转换Block会播放到Block中小块的末尾再进行转变。
除了Block的转变外,我们还可以通过AISAC来进行交互式音乐的制作,
如图,我们创建了3个AISAC,用于控制3个Track的音量,变化整个音乐的情绪变化。
Unity中创建
交互式音乐表现我们以按钮的形式进行模拟,因此我们在Unity中创建了4个按钮以及3个滑块:
当每次点击按钮后,音乐能够随着Block的转换而进行切换,同时拖动滑块时对应的Track音量将会改变以此来变化整个音乐的情绪。
首先需要将我们的声音放置在场景中,并且为其编写如下脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockChange : MonoBehaviour
{
public UnityEngine.UI.Slider lantem;
private float lantemVolume = 0.0f;
public UnityEngine.UI.Slider rock;
private float rockVolume = 0.0f;
public UnityEngine.UI.Slider frog;
private float frogVolume = 0.0f;
private CriAtomExPlayback playback;
private CriAtomSource atomcue;
// Start is called before the first frame update
void Start()
{
atomcue = (CriAtomSource)GetComponent("CriAtomSource");
this.playback = atomcue.Play();
}
public void Block1()
{
this.playback.SetNextBlockIndex(2);
}
public void Block2()
{
this.playback.SetNextBlockIndex(4);
}
public void Block3()
{
this.playback.SetNextBlockIndex(5);
}
public void Block4()
{
this.playback.SetNextBlockIndex(6);
}
public void onlantemchanged()
{
lantemVolume = lantem.value;
atomcue.SetAisacControl("AisacControl13",lantemVolume);
}
public void onrockchanged()
{
rockVolume = rock.value;
atomcue.SetAisacControl("AisacControl14", rockVolume);
}
public void onfrogchanged()
{
frogVolume = frog.value;
atomcue.SetAisacControl("AisacControl15", frogVolume);
}
}
脚本主要通过设置事件调用,使得每个按钮被点击时能够调用相关事件进行Block的切换,以及当更改滑块的值时,同时变更AISAC的值。
完成上述脚本并将按钮和滑块设置完成后:
我们进行按钮的按下后音乐会跟随Block的转变而进行切换,同时各个Track的音量跟随滑块进行变更。
Block和AISAC创建的交互式音乐非常适合游戏的音乐过渡和情绪变化产生的音乐变化,用这种方式能够使得音乐变化更加平滑同时更加具有沉浸效果。