首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当AudioClip是由Microphone.Start在统一中创建时,如何使用PCMReaderCallback从Microphone.Start读取数据?

当AudioClip是由Microphone.Start在统一中创建时,如何使用PCMReaderCallback从Microphone.Start读取数据?
EN

Stack Overflow用户
提问于 2018-11-19 14:36:46
回答 1查看 3K关注 0票数 2

如何更改下面的代码以使用PCMReaderCallback从Microphone.Start创建的音频剪辑中读取数据

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 17:19:12

不能将麦克风API与PCMReaderCallback一起使用。这是因为PCMReaderCallback是通过将PCMReaderCallback函数传递给返回新AudioClipAudioClip.Create函数来注册的。Unity的Microphone.Start函数返回AudioClip,但它不以PCMReaderCallback作为参数。

如果这不是一个麦克风,而是一个简单的音频剪辑,那么您可以使用下面的示例:

代码语言:javascript
复制
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读取音频数据,仍然可以使用OnAudioFilterReadAudioSource.clip.GetData函数。下面是OnAudioFilterRead的一个示例。

代码语言:javascript
复制
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)
{

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53376891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档