如何更改下面的代码以使用PCMReaderCallback从Microphone.Start创建的音频剪辑中读取数据
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
private string m_deviceName = null;
private AudioClip m_audioClip;
void Start()
{
bool loop = true;
int lengthSec = 10;
int frequency = 44100;
m_audioClip = Microphone.Start(m_deviceName, loop, lengthSec, frequency);
}
void Stop()
{
Microphone.End(m_deviceName);
m_audioClip = null;
}
}发布于 2018-11-19 17:19:12
不能将麦克风API与PCMReaderCallback一起使用。这是因为PCMReaderCallback是通过将PCMReaderCallback函数传递给返回新AudioClip的AudioClip.Create函数来注册的。Unity的Microphone.Start函数返回AudioClip,但它不以PCMReaderCallback作为参数。
如果这不是一个麦克风,而是一个简单的音频剪辑,那么您可以使用下面的示例:
public int lengthSamples = 400;
public int channels = 2;
public int frequency = 16000;
AudioSource adSource;
void Start()
{
adSource = GetComponent<AudioSource>();
AudioClip clip = AudioClip.Create("clip", lengthSamples, channels, frequency, true, OnAudioRead);
adSource.clip = clip;
adSource.Play();
}
//PCMReaderCallback callback
void OnAudioRead(float[] data)
{
}如果您只想从Mic读取音频数据,仍然可以使用OnAudioFilterRead或AudioSource.clip.GetData函数。下面是OnAudioFilterRead的一个示例。
string m_deviceName = null;
AudioSource adSource;
void Start()
{
adSource = GetComponent<AudioSource>();
bool loop = true;
int lengthSec = 10;
int frequency = 44100;
AudioClip clip = Microphone.Start(m_deviceName, loop, lengthSec, frequency);
adSource.clip = clip;
while (!(Microphone.GetPosition(null) > 0)) { }
adSource.Play();
}
void OnAudioFilterRead(float[] data, int channels)
{
}https://stackoverflow.com/questions/53376891
复制相似问题