Unity 3D 多媒体 音频

音频由多个Audio Source组件和一个Audio Listener组件组成,其中Audio Listener负责监听所有的Audio Source,最终通过设备的扬声器播放出来。同一个场景只能有一个Audio Listener组件启用,它会默认添加在主摄像机上。如果是3D音效,Unity会自动判断Audio Listener与音频的距离,从而增强或者减少音量。

//--音频文件

Unity支持的音频文件是非常丰富的,它们包括 .mp3 .ogg .wav .aiff .aif .mod .it .s3m 和 .xm ,最常用的是.mp3和.ogg文件。

我们将一个.wav文件拖入工程。

我们可以设置声音文件是否在后台加载,以及压缩格式等。右下角可以预览播放,设置是否循环播放。

这些设置并不是修改了声音文件本身,而是Unity在导入时自动生成一个新的音频文件,它与原始文件只有简单的引用关系,将来打包发布后其实使用的是新的音频,而使用者是毫无感知的。

//--Audio Source(各个属性的介绍)

可以给任意对象绑定Audio Source组件,即可播放声音。

可以将音频文件绑定在AudioClip处,设置Play On Awake (运行就播放)和 Loop(循环)等。

//--3D音频

3D音频就是根据生源与主角的距离自动增加或减弱的音频。

由于Audio Listener是绑定在主摄像机上的,所以控制摄像机的远近即可满足3D音频的条件。

默认情况下,Audio Source是2D音频。

调节Spatial Blend 其中0表示2D1表示3D。0~1之间表示2D和3D之间的插值音频。

球形区域表示3D声音最大区域。点击周围的蓝色小方块,拖动鼠标即可调节它的区域。球心到表面音量递减。超出最大区域时会保持递减后的最小音量。运行游戏移动主相机试听。

//--代码控制播放

在代码中获取Audio Source组件,就可以动态控制音频了。

由于音频组件没有提供播放音频结束的回调,可以先获取音频播放时间,通过协程处理结束后事件。

using System.Collections;
using UnityEngine;
using UnityEngine.Events;

public class AudioSourceMyTest : MonoBehaviour
{
    public AudioClip clip1;
    public AudioClip clip2;

    public AudioSource source;

    private Coroutine m_Coroutine = null;

    private void OnGUI()
    {
        if (GUILayout.Button("<size=50>播放音频1</size>"))
        {
            PlayAudioClip(clip1, delegate (AudioClip clip) { Debug.LogFormat("音频:{0}播放结束", clip.name); });
        }
        if (GUILayout.Button("<size=50>播放音频2</size>"))
        {
            PlayAudioClip(clip2, delegate (AudioClip clip) { Debug.LogFormat("音频:{0}播放结束", clip.name); });
        }
    }

    private void PlayAudioClip(AudioClip clip, UnityAction<AudioClip> callback)
    {
        StopAudioClip();
        source.clip = clip;
        source.Play();
        m_Coroutine = StartCoroutine(AudioClipCallback(clip, callback));
    }

    private void StopAudioClip()
    {
        if (m_Coroutine != null)
        {
            StopCoroutine(m_Coroutine);
            m_Coroutine = null;
        }
        source.Stop();
    }

    private IEnumerator AudioClipCallback(AudioClip clip, UnityAction<AudioClip> callback)
    {
        yield return new WaitForSeconds(clip.length);
        callback(clip);
    }
}

//--声音进度

可以拖动Slider来调节音乐的进度。

using UnityEngine;
using UnityEngine.UI;

public class AudioSourceSliderMyTest : MonoBehaviour
{
    public Slider slider;
    public AudioSource source;

    private void Start()
    {
        slider.minValue = 0;
        slider.maxValue = System.Convert.ToSingle(source.clip.length.ToString("f3"));

        slider.onValueChanged.AddListener(delegate (float value)
        {
            source.Stop();
            source.time = value;
            source.Play();
        });

        source.Play();
    }
}

运行即可体验。(做了一个截取三位小数的操作,要不拖到最大值会报错)。

//--录音

Unity3D 录音, 压缩, 保存, 读取, 实时检测音量

Unity3d录音

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值