unity实现语音切换背景音乐

# 用C#语言实现语音识别切换背景音乐的功能

  介绍
在这篇博客中,我将向大家展示如何用C#语言和Unity引擎来实现一个简单的语音识别的功能,可以通过口令“切歌”来切换音乐。这个功能可以用于制作一些有趣的游戏或应用,让用户可以用自己的声音来控制场景中的元素。

步骤
1. 创建一个新的Unity项目
首先,我们需要创建一个新的Unity项目,选择3D模板,并命名为VoiceRecognitionDemo。

### 2. 导入音乐资源
然后

,我们需要导入一些音乐资源,作为我们要切换的音乐,你可以根据自己的喜好选择其他的音乐。将这些音乐文件拖拽到Unity项目中的Assets文件夹下,创建一个名为MusicPack的子文件夹,并将它们放入其中。

### 3. 创建一个背景音乐播放器
接下来,我们需要创建一个背景音乐播放器,用于播放和切换音乐。在Hierarchy窗口中,右键点击Create Empty,创建一个空的游戏对象,并命名为BGMPlayer。然后,在Inspector窗口中,点击Add Component,选择Audio > Audio Source,为该游戏对象添加一个Audio Source组件。在该组件的属性中,将Audio Clip设置为MusicPack文件夹中的任意一首音乐(比如Blues),并勾选Loop和Play On Awak

4. 创建一个语音识别器
接着,我们需要创建一个语音识别器,用于监听用户的语音指令,并执行相应的操作。在Hierarchy窗口中,右键点击Create Empty,创建一个空的游戏对象,并命名为VoiceRecognizer。然后,在Inspector窗口中,点击Add Component,选择New Script,为该游戏对象添加一个新的脚本组件,并将下面的代码粘贴进去。


using System;
using System.Text;
using UnityEngine;
using UnityEngine.Windows.Speech;

public class keywordrecognizer : MonoBehaviour
{
    [SerializeField]
    private AudioClip[] musicpack;
    [SerializeField]
    private string[] m_Keywords;

    private KeywordRecognizer m_Recognizer;

    void Start()
    {
        m_Recognizer = new KeywordRecognizer(m_Keywords);
        m_Recognizer.OnPhraseRecognized += OnPhraseRecognized;
        m_Recognizer.Start();
       
    }

    private void OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        StringBuilder builder = new StringBuilder();
        builder.AppendFormat("{0} ({1}){2}", args.text, args.confidence, Environment.NewLine);
        builder.AppendFormat("\tTimestamp: {0}{1}", args.phraseStartTime, Environment.NewLine);
        builder.AppendFormat("\tDuration: {0} seconds{1}", args.phraseDuration.TotalSeconds, Environment.NewLine);
        
        if (args.text == "切歌")
        {
            Debug.Log('o');
            ChangeMusic();
        }

        Debug.Log(builder.ToString());
        
    }
    public void ChangeMusic()
    {
        // 获取bgmprefab游戏对象上附加的AudioSource组件
        AudioSource audioSource = GameObject.Find("bgmplayer").GetComponent<AudioSource>();
        // 获取AudioSource组件上设置的音频文件
        
        // 设置AudioSource组件上的音频文件为其他音频文件
        int i = UnityEngine.Random.Range(0, 5);
        audioSource.clip = musicpack[i];
        audioSource.Play();
    }

}

最后,我们需要设置关键词和音乐资源,让语音识别器知道要识别哪些关键词,以及要切换哪些音乐。在Unity中,回到VoiceRecognizer游戏对象,点击KeywordRecognizer脚本组件,在Inspector窗口中,将Size属性设置为1,将Element 0属性设置为“切歌”,表示我们只要识别“切歌”这个关键词。然后,点击Music Pack属性,将Size属性设置为5,将Element 0到Element 4属性分别设置为MusicPack文件夹中的5首音乐,表示我们要切换这5首音乐。

现在,我们已经完成了所有的设置,可以测试和运行我们的项目了。点击Unity中的Play按钮,开始运行项目。此时,你应该可以听到背景音乐播放。然后,对着你的麦克风说“切歌”,你应该可以看到控制台输出识别到的信息,并且背景音乐会切换为另一首。你可以多次尝试说“切歌”,看看效果如何。

通过这篇博客,我希望你能了解如何用C#语言和Unity引擎来实现一个简单的语音识别的功能,可以通过说“切歌”来切换音乐。当然,这只是一个基础的示例,你可以根据自己的想法和需求来扩展和改进它。比如,你可以增加更多的关键词和操作,让用户可以用语音来控制更多的元素。或者,你可以优化识别的效果和准确度,让用户有更好的体验。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值