当前位置:   article > 正文

Unity音频相关_unity audioclip.create

unity audioclip.create

AudioClip创建

流媒体形式:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
public int position = 0;
public int samplerate = 44100;
public float frequency = 440;
void Start()
{
//参数依次是:clip名称、clip总时长(单位s)、声道数、采样率、是否流媒体、流媒体取数据回调、流媒体播放进度回调<无seek情况下只调用一至两次>
AudioClip myClip = AudioClip.Create(“MySinusoid”, samplerate * 200, 1, samplerate, true, OnAudioRead, OnAudioSetPosition);
AudioSource aud = GetComponent();
aud.clip = myClip;
aud.Play();
}

//喂音频数据到data中,最终保存到clip里面。注意:该回调里的数据不会立即播<延迟1s左右播放,缓冲区所致>放,即回调数据是提前缓冲的。
void OnAudioRead(float[] data)
{
    int count = 0;
    while (count < data.Length)
    {
        data[count] = Mathf.Sign(Mathf.Sin(2 * Mathf.PI * frequency * position / samplerate));
        position++;
        count++;
    }
}


void OnAudioSetPosition(int newPosition)
{
    position = newPosition;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

}

非流媒体:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
void Start() {
//创建audioclip空壳,无数据
//参数依次是:clip名称、clip市场(单位s)、声道个数、采样率、是否D音频、是否流媒体<这里必须设为false>
AudioClip myClip = AudioClip.Create(“MySinusoid”, samplerate * 600, 1, samplerate, false, false);

    //喂音频数据
    //参数1:音频数据(float, -1~1)
    //参数2:采样偏移量<跟时间无关,表示从第offset个采样数据开始插入新数据>
    myClip.SetData (audioList[i], (int)offset);
}
  • 1
  • 2
  • 3
  • 4
  • 5

}

注意:对于AudioClip来说,没有时间的概念,只有采样个数跟采样值,时间是通过采样率、声道数换算得到的。相应的喂数据也是按照第几个采样数据来喂,跟时间无关。

AudioSource、AudioClip和AudioMixer关系
AudioSource,声音源,输入AudioClip,解码数据,播放,可输出到AudioMixer。
AudioClip,音频片段。保存音频数据。
AudioMixer,混音器,用于固定频段的音效处理,以及多个音源同时播放时,调小某些音源。<待探索>
AudioListener,声音接收器,一个Scene只能有一个AudioListener,场景内所有音源的声音全部汇聚到Listener中,再输出到音频设备。
其中,AudioSource中可获取该声音源的输出频谱,AudioListener可获取整个场景内声音的频谱。

音频基础概念
DTS: 第n个音频采样数据DTS为n。
time_base:FFmpeg的概念,表示一个音频采样数据的时间跨度一般为1/samplerate。ffmpeg中time_base = {1, samplerate}。
<tiem = pts * av_q2d(st->time_base) av_q2d()表示将分数转为double类型数据>
采样率:一秒钟采样的个数。
声道:n声道每秒数据量为采样率*n个。
时间戳:音频所处的时刻。时间戳 = time_base * DTS。
nb_samples:ffmpeg中音频采样总个数

注意:要获取完整连续的音频output数据,采样周期要算好,若每次有1024个数据,则采样周期:1024/samplerate * 1000 (ms)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/127051
推荐阅读
相关标签
  

闽ICP备14008679号