Вы не можете использовать API микрофона с PCMReaderCallback
.Это связано с тем, что PCMReaderCallback
регистрируется путем передачи функции PCMReaderCallback в функцию AudioClip.Create
, которая возвращает новый AudioClip
.Функция 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)
{
}
Если вы просто хотите прочитать аудиоданные с микрофона,вы все еще можете использовать 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)
{
}