音频与视频类拼图参考 - Soft8Soft
Description: 如何使用拼图来加载、播放和管理音视频。

# 音频与视频 | Audio and Video

此类拼图用来加载和播放音频与视频文件，以及合成MIDI声音。

## 内容

- 拼图参考
  - load sound
  - load video
  - play
  - pause
  - stop
  - rewind
  - set playback time
  - get playback time
  - get duration
  - set playback rate
  - is playing
  - set volume
  - mute
  - unmute
  - positional speaker
  - synth sound
  - note number
  - drum number

#

## 拼图参考

#

### load sound

使用指定的URL加载一个音频文件。音频通过WebAudio API或HTML `<audio>`标签播放，这取决于所选择的类型：sound/midi或music。此拼图还会将加载的音频添加到内存缓存中，这样之后使用此拼图调用相同的URL时，就无需再重新加载相同的音频文件。建议使用.mp3格式，大多数浏览器都支持。

有关使用示例，请查看 Farmers Journey 演示（也可在资源商店中找到）。

#### 预载音频

音频文件需要一定的时间来加载，所以它们并不能立即使用。因此简单地在play拼图里使用此拼图可能不起作用，音频可能无法开始播放。

为确保应用中的音频能够正常播放，我们建议预先加载音频文件，例如，在Verge3D应用初始化前执行的初始化标签中预载。您也可以使用connector拼图，以更方便的方式组织一堆"load sound"拼图：

在init选项卡中预载音频。

之后在main选项卡（初始名为"New Tab"）或用户创建的选项卡中，使用预载的音频文件不会引起任何问题，因为在第一次使用"load sound"拼图后，音频已经被缓存了，不需要再次下载：

在main选项卡中使用预加载的音频。

#### 自动播放限制

一般来说，以编程方式启动的音频播放（如使用拼图播放）很可能会被浏览器阻止。这是因为自动播放策略限制了音频在网页上的自动播放方式。这种限制的目的是为了阻止网页在未被触发的情况下自主播放音频或产生噪音，从而改善整体的用户体验。

虽然在不同的浏览器中这种策略的实施方式不同，也有各种允许或不允许自动播放的条件，但播放音频的一般规则是等待用户与您的网页互动。

如果这种互动已经隐含在应用逻辑中，例如，在点击时播放声音（无论是点击3D对象还是HTML按钮），您就无需担心这些限制。但如果您想让应用在加载时就开始播放背景音乐，由于这不可能总是以自动的方式完成，一个好的解决方案是制作一个"启动"按钮，在应用加载完成时启动。点击它算作一次用户交互，即可开始音频播放。

#### "sound" vs "music" vs "midi" 音频类型

此拼图允许您选择使用哪个API来加载和播放音频文件。

sound（默认）
  更适合于短的音频文件，例如短促效果音；建议只在以下情形使用这种类型：
  - 短循环（见play拼图及其loop选项）音效 — "sound"使循环的音频无缝衔接，而使用"music"则有明显的延迟。
  - 需立即播放的音效，例如在Safari上用户交互时会有延迟 — "sound"可以解决这个问题。
music
  应该在所有其他情况下使用；更适合于长的音频文件，例如背景音乐。
midi
  特殊类型的sound，用于播放标准MIDI文件（以.mid为扩展名）。与存储在.mp3中的音乐相比，MIDI文件体积非常小，对应用的加载时间影响最小。使用MIDI的缺点是配音质量有所降低。

#

### load video

创建一个HTML `<video>`元素并使用指定的URL加载一个视频文件。此拼图还会将创建的视频元素添加到内存缓存中，这样之后使用此拼图调用相同的URL时，就无需再重新加载相同的视频文件。建议使用.mp4格式，大多数浏览器都支持。

load video拼图不会在您的场景中创建任何可见的元素。要使其可见，请使用replace texture拼图将视频纹理分配给材质。

有关使用示例，请查看 Video Texture 演示（也可在资源商店中找到）。

#

### play

开始播放音频或视频。如果启用loop复选框，音视频会循环播放。

由于浏览器的限制（防止恶意网站播放噪音或视频），您不应该执行此拼图来自动播放您的资产（在场景加载时）。相反，您应该在某个用户生成的事件中执行此操作。使用when clicked或on event of来处理此类事件。

这条规则有一个例外。浏览器允许自动播放静音的视频。参见mute拼图。

#

### pause

暂停音频或视频播放。

#

### stop

停止音频或视频的播放。使用此拼图相当于先使用pause拼图，再使用rewind拼图。

#

### rewind

使音频或视频资产从头开始播放。

#

### set playback time

以秒为单位设置音视频当前播放时间。

不支持为sound（WebAudio）类资产设置播放时间。

#

### get playback time

以秒为单位获取音视频当前播放时间。

不支持为sound（WebAudio）类资产获取播放时间。

#

### get duration

获取音频/视频资产的持续时间（以秒为单位）。

#

### set playback rate

设置音频/视频的播放速率。指定值`<1`为慢速播放，`1`为正常速度，`>1`为加速播放。

不支持为midi类资产设置播放速率。

#

### is playing

检查一个声音或视频是否正在被播放。

#

### set volume

设置声音的音量。输入音量被钳制在0.0-1.0范围内。此拼图也适用于有嵌入式音轨的视频。

#

### mute

将一个声音或视频静音。

除了控制音频音量之外，您还可以使用此拼图来自动开始播放视频。这是可行的，因为网络浏览器允许在没有用户互动的情况下播放静音的视频。

#

### unmute

取消一个声音或视频的静音。

#

### positional speaker

通过将音频附加到某个3D对象上使其成为空间音频。

sound和music类型的音频资产都可以转换为空间扬声器。要微调3D音频效果，您可以使用rolloff from（声音强度开始衰减的距离）和factor（衰减速率）。

#

### synth sound

使用内置的通用MIDI兼容的软件合成器（基于TinySynth库）播放声音。支持各种乐器和效果。

note on
  开始使用给定的合成器channel来演奏note，使用velocity（0-127）指定声音强度。使用at time值来指定播放开始时间，单位为秒。
note off
  停止演奏给定的note。
set instrument
  从给定的列表中设置通道使用的乐器。
set volume
  设置通道的音量。
set pan
  设置通道的平移水平。
stop sounds
  停止给定通道上的所有声音。

要演奏鼓乐，指定Drums为通道号，并使用drum number选择乐器。

示例：

有关使用示例，请查看 Sound Synth 演示（也可在资源商店中找到）。

#

### note number

返回音符号。用它来传递音符到synth sound拼图的1-9通道。

八度编号使用科学音高符号指定，例如C 4表示中音C。

#

### drum number

返回鼓号。用它来传递音符到synth sound拼图的Drums通道。

## 在使用拼图时遇到困难？

欢迎您随时在 论坛上提问！您还可以加入中文用户社区QQ群(171678760)，在线寻求帮助。