# Web 中的音频

> Information about audio capabilities in Web.

本页面仅提供有关 Web 平台中的音频功能的信息。要了解如何在 Unity 项目中使用音频，请参阅[音频概述](/engine/6000.0/manual/audio/overview.md)。

因为 Unity 通常使用 [FMOD](https://www.fmod.com) 管理平台的音频，所以 Web 平台的音频功能有限，仅支持基本功能。FMOD 依赖于线程，而 WebGL API 不支持这些线程。由于这个原因，Unity 使用了一个基于内部 Web 音频 API，允许浏览器为我们处理音频回放和混音。

\*\*注意：\*\*Google Chrome 的新自动播放策略会阻止在某些情况下自动播放音频和视频。例如，虽然游戏可能设置为在游戏加载后不久自动播放一些背景音乐，但除非单击或点击网站，否则不会自动播放。有关如何启用或禁用此策略的更多信息，请参阅 Google Chrome 关于 [Chrome 自动播放策略](https://developer.chrome.com/blog/autoplay/)的文档。

## 支持的类##supported-classes

Unity Web 支持以下 API 类：

| **类**                                                                                                      | **WebGL 支持状态**                                                                                             |
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **[AudioSource](/engine/6000.0/script-reference/unity-engine/audio-source.md)**                            | WebGL 支持部分 API。有关特定支持详细信息，请参阅 [AudioSource](/engine/6000.0/script-reference/unity-engine/audio-source.md)。 |
| **[AudioListener](/engine/6000.0/script-reference/unity-engine/audio-listener.md)**                        | 支持所有 API。                                                                                                  |
| **[AudioClip](/engine/6000.0/script-reference/unity-engine/audio-clip.md)**                                | WebGL 支持部分 API。有关特定支持详细信息，请参阅 [AudioClip](#audioclip)。                                                     |
| **[AudioMixer](/engine/6000.0/script-reference/unity-engine-audio/audio-mixer.md)**                        | WebGL 支持部分 API。有关特定支持详细信息，请参阅[混音器](#audio-mixer)。                                                          |
| **[SystemInfo.supportsAudio](/engine/6000.0/script-reference/unity-engine/system-info/supports-audio.md)** | 浏览器为 WebGL 提供音频支持。因此，`SystemInfo.supportsAudio` 始终为 true。                                                  |
| **[Microphone](/engine/6000.0/script-reference/unity-engine/microphone.md)**                               | 不支持。                                                                                                       |

## AudioSource##audiosource

[AudioSource](/engine/6000.0/script-reference/unity-engine/audio-source.md) API 支持基本位置音频回放，包括：

* 暂停和恢复
* 衰减
* 音高设置
* 多普勒效应支持

Unity WebGL 支持以下 AudioSource API：

| **设置**                                                                                                             | **描述**                                                                                                                |
| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| **[Clip](/engine/6000.0/script-reference/unity-engine/audio-source/clip.md)**                                      | 确定下一个播放的音频剪辑。                                                                                                         |
| **[dopplerLevel](/engine/6000.0/script-reference/unity-engine/audio-source/doppler-level.md)**                     | 设置该 AudioSource 的多普勒缩放。                                                                                               |
| **[ignoreListenerPause](/engine/6000.0/script-reference/unity-engine/audio-source/ignore-listener-pause.md)**      | 运行 AudioSource 忽略 `AudioListener.pause` 并继续播放音频。                                                                      |
| **[ignoreListenerVolume](/engine/6000.0/script-reference/unity-engine/audio-source/ignore-listener-volume.md)**    | 忽略终端用户的 AudioSource 音量。                                                                                               |
| **[isPlaying](/engine/6000.0/script-reference/unity-engine/audio-source/is-playing.md)**                           | 如果 `AudioSource.clip` 正在播放，则返回 true。                                                                                  |
| **[loop](/engine/6000.0/script-reference/unity-engine/audio-source/loop.md)**                                      | 允许应用程序循环播放 `AudioSource.clip`。                                                                                        |
| **[maxDistance](/engine/6000.0/script-reference/unity-engine/audio-source/max-distance.md)**                       | 设置 `AudioSource.clip` 停止衰减或听不到的最大距离。                                                                                  |
| **[minDistance](/engine/6000.0/script-reference/unity-engine/audio-source/min-distance.md)**                       | 设置 AudioSource.clip 音量不再增大的最小距离。超过最小距离，音量开始衰减。                                                                        |
| **[mute](/engine/6000.0/manual/audio-source-mute.md)**                                                             | AudioSource 静音。                                                                                                       |
| **[pitch](/engine/6000.0/script-reference/unity-engine/audio-source/pitch.md)**                                    | 设置 `AudioSource.clip` 的音高。WebGL 仅支持正音高值。                                                                              |
| **[playOnAwake](/engine/6000.0/script-reference/unity-engine/audio-source/play-on-awake.md)**                      | 唤醒时播放 AudioSource。                                                                                                    |
| **[rolloffMode](/engine/6000.0/script-reference/unity-engine/audio-source/rolloff-mode.md)**                       | 设置 AudioSource 随距离衰减。                                                                                                 |
| **[time](/engine/6000.0/script-reference/unity-engine/audio-source/time.md)**                                      | 设置播放位置（以秒为单位）。                                                                                                        |
| **[timeSamples](/engine/6000.0/script-reference/unity-engine/audio-source/time-samples.md)**                       | 设置脉冲编码调制 (PCM) 样本中的播放位置。                                                                                              |
| **[velocityUpdateMode](/engine/6000.0/script-reference/unity-engine/audio-source/velocity-update-mode.md)**        | 设置以固定还是动态循环方式更新 AudioSource。                                                                                          |
| **[volume](/engine/6000.0/script-reference/unity-engine/audio-source/volume.md)**                                  | 设置 AudioSource 的音量（0.0 到 1.0）。                                                                                        |
| **[Pause](/engine/6000.0/script-reference/unity-engine/audio-source/pause.md)**                                    | 暂停 `AudioSource.clip`。                                                                                                |
| **[Play](/engine/6000.0/script-reference/unity-engine/audio-source/play.md)**                                      | 播放 `AudioSource.clip`。                                                                                                |
| **[PlayDelayed](/engine/6000.0/script-reference/unity-engine/audio-source/play-delayed.md)**                       | 以指定的延迟播放 `AudioSource.clip`（以秒为单位）。                                                                                   |
| **[PlayOneShot](/engine/6000.0/script-reference/unity-engine/audio-source/play-one-shot.md)**                      | 播放 [AudioClip](/engine/6000.0/script-reference/unity-engine/audio-source/clip.md)，并根据 volumeScale 调整 AudioSource 的音量。 |
| **[PlayScheduled](/engine/6000.0/script-reference/unity-engine/audio-source/play-scheduled.md)**                   | 在指定的时间播放 AudioSource。                                                                                                 |
| **[SetScheduledEndTime](/engine/6000.0/script-reference/unity-engine/audio-source/set-scheduled-end-time.md)**     | 设置计划的 `AudioSource.clip` 结束的时间。                                                                                       |
| **[SetScheduledStartTime](/engine/6000.0/script-reference/unity-engine/audio-source/set-scheduled-start-time.md)** | 设置计划的 `AudioSource.clip` 开始的时间。                                                                                       |
| **[Stop](/engine/6000.0/script-reference/unity-engine/audio-source/stop.md)**                                      | 停止播放 `AudioSource.clip`。                                                                                              |
| **[UnPause](/engine/6000.0/script-reference/unity-engine/audio-source/un-pause.md)**                               | 取消暂停的 `AudioSource.clip`。                                                                                             |
| **[PlayClipAtPoint](/engine/6000.0/script-reference/unity-engine/audio-source/play-clip-at-point.md)**             | 在世界空间中的给定位置播放 `AudioSource.clip`。                                                                                     |

## AudioClip##audioclipscrollpoint-id=audioclip-/

Unity WebGL 以大多数浏览器支持的 AAC 格式导入 [AudioClip](/engine/6000.0/script-reference/unity-engine/audio-clip.md) 文件。Unity WebGL 支持以下 AudioClip API：

| **属性**                                                                                 | **描述**                               |
| -------------------------------------------------------------------------------------- | ------------------------------------ |
| **[length](/engine/6000.0/script-reference/unity-engine/audio-clip/length.md)**        | AudioClip 的长度（以秒为单位）。                |
| **[loadState](/engine/6000.0/script-reference/unity-engine/audio-clip/load-state.md)** | 返回与 AudioClip 关联的音频数据的当前加载状态。        |
| **[samples](/engine/6000.0/script-reference/unity-engine/audio-clip/samples.md)**      | 样本中 AudioClip 的长度。                   |
| **[loadType](/engine/6000.0/script-reference/unity-engine/audio-clip/load-type.md)**   | 剪辑的加载类型。您可以在检视面板中设置 AudioClip 的加载类型。 |

| **方法**                                                                                       | **描述**                          | **其他信息**                                                                                                                                   |
| -------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **[AudioClip.Create](/engine/6000.0/script-reference/unity-engine/audio-clip/create.md)**    | 使用您指定的名称和长度创建一个 AudioClip。      | Unity WebGL 部分支持 `AudioClip.Create`。浏览器不支持动态串流，因此要使用 `AudioClip.Create` 将 Stream 设置为 false。                                                |
| **[AudioClip.SetData](/engine/6000.0/script-reference/unity-engine/audio-clip/set-data.md)** | 在 AudioSource.clip. 中设置样本数据。    | Unity WebGL 部分支持 `AudioClip.SetData`。只能对**加载类型 (Load Type)** 设置为**加载时解压缩 (Decompress on Load)** 的压缩音频文件使用此方法。请参阅[压缩音频](#compressed-audio)。 |
| **[AudioClip.GetData](/engine/6000.0/script-reference/unity-engine/audio-clip/get-data.md)** | 从 AudioSource.clip 检索具有样本数据的数组。 | Unity WebGL 部分支持 `AudioClip.GetData`。只能对**加载类型 (Load Type)** 设置为**加载时解压缩 (Decompress on Load)** 的压缩音频文件使用此方法。请参阅[压缩音频](#compressed-audio)。 |

\*\*注意：\*\*要在 Linux 上支持音频剪辑，请确保已安装 [ffmpeg](https://ffmpeg.org/) 包。

## 混音器##audio-mixerscrollpoint-id=audio-mixer-/

Unity Web 支持[混音器](/engine/6000.0/manual/audio/mixer.md)资产的某些功能。

您可以使用 Web 上的混音器执行以下操作：

* 创建混音器资产。
* 将 AudioMixerGroup 添加到层级视图中。
* 调整每个组的音量。要使用脚本显示或更改音量，请使用 [AudioMixer.SetFloat](/engine/6000.0/script-reference/unity-engine-audio/audio-mixer/set-float.md)。

**注意**：音量 (Volume) 是唯一可以在 Web 上更改的属性。不支持其他属性和音效。

## 压缩音频##compressed-audioscrollpoint-id=compressed-audio-/

要在 Unity 中将压缩音频与 WebGL 结合使用，请将 AudioClip [loadType](/engine/6000.0/script-reference/unity-engine/audio-clip/load-type.md) 设置为以下选项之一：

* [CompressedInMemory](/engine/6000.0/script-reference/unity-engine/audio-clip-load-type/compressed-in-memory.md)
* [DecompressOnLoad](/engine/6000.0/script-reference/unity-engine/audio-clip-load-type/decompress-on-load.md)

| **压缩方法**               | **描述**                                                   | **注意事项**                                                                                           |
| ---------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| **CompressedInMemory** | 使用此属性可以压缩磁盘上的音频，并在加载到应用程序内存中后保持压缩状态。                     | 压缩音频可能会导致延迟，并且在音频播放时精度较低。但是，压缩音频在应用程序中使用的内存少于解压缩音频。最佳做法是将 `CompressedInMemory` 用于不受精度影响的音频，例如背景音乐。 |
| **DecompressOnLoad**   | 使用此属性可以压缩磁盘上的音频，类似于 CompressedInMemory，并在加载到应用程序内存中时解压缩。 | 与压缩音频相比，解压缩音频使用大量内存，但具有更低的延迟和更大的音频灵活性。对受精度影响的音频（例如，角色对话框或音效）使用 `DecompressedOnLoad`。               |

## 音频播放和浏览器安全##audio-playback-and-browser-security

出于安全考虑，浏览器禁止自动播放音频，直到最终用户通过鼠标点击、触摸事件或按键与应用程序网页进行交互。使用加载屏幕，让最终用户在主内容加载前与应用程序进行交互并启动音频播放。
