播放、停止

播放

为播放声音,必须首先执行系统初始化,加载播放数据。 这些都在程序中执行。

craftv2_tips_program_doing_playstop00.png

播放已加载的数据时,从程序中为Player设置Cue,执行Start等操作。

在已启动的Cue中,驱动数据端创建的Sequencer, 播放Sequencer中的波形。

内存播放

由于要播放的数据已经在内存中,因此肯定会在Start函数后的第一次Server处理中开始播放,是延迟最少的播放。
由于播放数据常驻内存,因此会消耗大量内存,但播放数据全部包含在ACB文件中,容易进行内存管理。
简单的游戏且有足够的内存时,可以全部选择内存播放。
但是,由于乐曲、很少播放的台词和长数据的数据容量大,建议采用流播放。

craftv2_tips_program_doing_playstop07.png

流播放

流播放从播放数据的存储媒体依次执行读取播放。因此需要有读取缓冲区,但不需要与波形长度相对应的内存。 此外,不能像内存播放那样执行无延迟播放,即无法在Start函数后的第一次Server处理中开始播放。

流播放的情况下,在Start函数后的第一次Server处理中,开始访问播放数据文件。 因此,在读取足够量的播放数据完成前,会发生播放开始延迟。

craftv2_tips_program_doing_playstop08.png

Prepare播放流并Resume

预先知道要播放的时机时,可以采用在暂停状态进行播放开始准备的技术。 采用这一方法,由于在要播放的时机已经处于播放开始准备就绪的状态,因此只要执行Resume处理,就能够以与内存播放基本相同的延迟完成播放。 可以根据Player的状态,判断是否做好播放开始准备。如果在准备完成之前Resume,则将在准备完成的同时发声。

预设状态下,Prepare播放只能对配置在序列开头的波形起作用。如果要对开头以外的波形也应用Prepare处理,请单独设置后述的序列预读时间。

另外,由于在播放开始时间之前进行准备,可以在准备处理开始时确保发声所需的资源。因此,此技术不适合播放时的自动处理(Cue限制、Voice限数)。

craftv2_tips_program_doing_playstop05.png

如何减少序列中间的流播放延迟

通过为Player设置criAtomExPlayer_SetSequencePrepareTime函数,可以仅在指定的时间预读序列。 通过执行预读处理,即使是序列中间的流播放请求,也可以消除或减少延迟。 不过,此技术不适合播放时的自动处理(Voice限数处理)。

craftv2_tips_program_doing_playstop06.png

停止

One Shot声音全部播放后将自动停止,但如果是循环声音,则执行停止处理,或通过各种限制处理和Action等数据处理,在停止前继续播放。

要随时停止Player播放的声音,应对Player执行停止函数。

craftv2_tips_program_doing_playstop01.png

搜索播放

可以指定时间从播放开始位置播放。 即使指定位置在波形中间,也会从该位置开始播放。

craftv2_tips_program_doing_playstop02.png

指定块播放

可以指定块序列数据的开始块执行播放。 对于块序列数据,如果在播放中指定了转换目标块,则在数据中已设置的转换时机切换播放块。

craftv2_tips_program_doing_playstop03.png

Cue Sheet之外的播放

仅限于简单播放,可以指定ADX及HCA、Wav、AIFF等文件和数据地址执行播放。 另外,可以另外单独提供运行时的编码及麦克风输入等。

craftv2_tips_program_doing_playstop04.png