国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity 使用 Microphone 采集麥克風(fēng)聲音

這篇具有很好參考價值的文章主要介紹了Unity 使用 Microphone 采集麥克風(fēng)聲音。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、獲取麥克風(fēng),Microphone.devices

2、開始錄音,Microphone.Start

3、結(jié)束錄音,Microphone.End

1、MicrophoneWrapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150

using System;
using UnityEngine;

public class MicrophoneWrapper : MonoSingleton<MicrophoneWrapper>
{

? ? private string TAG = "MicrophoneWrapper: ";

? ? //標(biāo)記是否有麥克風(fēng)
? ? private bool isHaveMic = false;

? ? //當(dāng)前錄音設(shè)備名稱
? ? string currentDeviceName = string.Empty;

? ? //錄音頻率,控制錄音質(zhì)量(8000,16000)
? ? int recordFrequency = 8000;

? ? //上次按下時間戳
? ? double lastPressTimestamp = 0;

? ? //表示錄音的最大時長
? ? int recordMaxLength = 10;

? ? //實際錄音長度(由于unity的錄音需先指定長度,導(dǎo)致識別上傳時候會上傳多余的無效字節(jié))
? ? //通過該字段,獲取有效錄音長度,上傳時候剪切到無效的字節(jié)數(shù)據(jù)即可
? ? int trueLength = 0;

? ? //存儲錄音的片段
? ? [HideInInspector]
? ? public AudioClip saveAudioClip;


? ? // Start is called before the first frame update
? ? void Start()
? ? {

? ? }


? ? public void Init()
? ? {
? ? ? ? //獲取麥克風(fēng)設(shè)備,判斷是否有麥克風(fēng)設(shè)備
? ? ? ? if (Microphone.devices.Length > 0)
? ? ? ? {
? ? ? ? ? ? isHaveMic = true;
? ? ? ? ? ? currentDeviceName = Microphone.devices[0];
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? Debug.Log(TAG + " Microphone.devices is null(0) ");
? ? ? ? }
? ? }



? ? /// <summary>
? ? /// 按下錄音按鈕
? ? /// </summary>
? ? /// <param name="eventData"></param>
? ? public void OnStartRecord()
? ? {

? ? ? ? StartRecording();
? ? }

? ? /// <summary>
? ? /// 放開錄音按鈕
? ? /// </summary>
? ? /// <param name="eventData"></param>
? ? public AudioClip OnStopRecord()
? ? {

? ? ? ? trueLength = EndRecording();
? ? ? ? if (trueLength > 1)
? ? ? ? {

? ? ? ? ? ? Debug.Log(TAG+ " return AudioClip data ");
? ? ? ? ? ? return saveAudioClip;
? ? ? ? ? ?
? ? ? ? }

? ? ? ? Debug.Log(TAG + " return AudioClip is null ");
? ? ? ? return null;

? ? }


? ? /// <summary>
? ? /// 開始錄音
? ? /// </summary>
? ? /// <param name="isLoop"></param>
? ? /// <param name="lengthSec"></param>
? ? /// <param name="frequency"></param>
? ? /// <returns></returns>
? ? private bool StartRecording(bool isLoop = false) //8000,16000
? ? {
? ? ? ? Debug.Log(TAG+"StartRecording ? ");

? ? ? ? if (isHaveMic == false || Microphone.IsRecording(currentDeviceName))
? ? ? ? {
? ? ? ? ? ? return false;
? ? ? ? }

? ? ? ? //開始錄音
? ? ? ? /*
? ? ? ? ?* public static AudioClip Start(string deviceName, bool loop, int lengthSec, int frequency);
? ? ? ? ?* deviceName ? 錄音設(shè)備名稱.
? ? ? ? ?* loop ? ? ? ? 如果達(dá)到長度,是否繼續(xù)記錄
? ? ? ? ?* lengthSec ? ?指定錄音的長度.
? ? ? ? ?* frequency ? ?音頻采樣率 ?
? ? ? ? ?*/

? ? ? ? lastPressTimestamp = GetTimestampOfNowWithMillisecond();

? ? ? ? saveAudioClip = Microphone.Start(currentDeviceName, isLoop, recordMaxLength, recordFrequency);

? ? ? ? return true;
? ? }

? ? /// <summary>
? ? /// 錄音結(jié)束,返回實際的錄音時長
? ? /// </summary>
? ? /// <returns></returns>
? ? private int EndRecording()
? ? {
? ? ? ? Debug.Log(TAG+"EndRecording ? ");

? ? ? ? if (isHaveMic == false || !Microphone.IsRecording(currentDeviceName))
? ? ? ? {

? ? ? ? ? ? Debug.Log(TAG + "EndRecording ?Failed ");

? ? ? ? ? ? return 0;
? ? ? ? }

? ? ? ? //結(jié)束錄音
? ? ? ? Microphone.End(currentDeviceName);

? ? ? ? //向上取整,避免遺漏錄音末尾
? ? ? ? return Mathf.CeilToInt((float)(GetTimestampOfNowWithMillisecond() - lastPressTimestamp) / 1000f);
? ? }

? ? /// <summary>
? ? /// 獲取毫秒級別的時間戳,用于計算按下錄音時長
? ? /// </summary>
? ? /// <returns></returns>
? ? private double GetTimestampOfNowWithMillisecond()
? ? {
? ? ? ? return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000;
? ? }
}

2、Test_MicrophoneWrapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

[RequireComponent(typeof(AudioSource))]
public class Test_MicrophoneWrapper : MonoBehaviour,IPointerDownHandler,IPointerUpHandler
{

? ? private AudioSource mAudioSource;
? ? private AudioClip mAudioClip;

? ? // Start is called before the first frame update
? ? void Start()
? ? {
? ? ? ? MicrophoneWrapper.Instance.Init();
? ? ? ? mAudioSource = GetComponent<AudioSource>();
? ? }


? ? public void OnPointerDown(PointerEventData eventData)
? ? {
? ? ? ? this.transform.GetChild(0).GetComponent<Text>().text = "松開播放";
? ? ? ? MicrophoneWrapper.Instance.OnStartRecord();
? ? }

? ? public void OnPointerUp(PointerEventData eventData)
? ? {
? ? ? ? this.transform.GetChild(0).GetComponent<Text>().text = "按下說話錄音";
? ? ? ? mAudioClip = MicrophoneWrapper.Instance.OnStopRecord();
? ? ? ? if (mAudioSource != null && mAudioClip != null)
? ? ? ? {
? ? ? ? ? ? mAudioSource.PlayOneShot(mAudioClip);
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? Debug.Log(" mAudioSource or mAudioClip is null ");
? ? ? ? }
? ? }
}

3、MonoSingleton

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

using UnityEngine;

public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
? ? private static T instance = null;

? ? private static readonly object locker = new object();

? ? private static bool bAppQuitting;

? ? public static T Instance
? ? {
? ? ? ? get
? ? ? ? {
? ? ? ? ? ? if (bAppQuitting)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? instance = null;
? ? ? ? ? ? ? ? return instance;
? ? ? ? ? ? }

? ? ? ? ? ? lock (locker)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (instance == null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? // 保證場景中只有一個 單例
? ? ? ? ? ? ? ? ? ? T[] managers = Object.FindObjectsOfType(typeof(T)) as T[];
? ? ? ? ? ? ? ? ? ? if (managers.Length != 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (managers.Length == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? instance = managers[0];
? ? ? ? ? ? ? ? ? ? ? ? ? ? instance.gameObject.name = typeof(T).Name;
? ? ? ? ? ? ? ? ? ? ? ? ? ? return instance;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Debug.LogError("Class " + typeof(T).Name + " exists multiple times in violation of singleton pattern. Destroying all copies");
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach (T manager in managers)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Destroy(manager.gameObject);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? var singleton = new GameObject();
? ? ? ? ? ? ? ? ? ? instance = singleton.AddComponent<T>();
? ? ? ? ? ? ? ? ? ? singleton.name = "(singleton)" + typeof(T);
? ? ? ? ? ? ? ? ? ? singleton.hideFlags = HideFlags.None;
? ? ? ? ? ? ? ? ? ? DontDestroyOnLoad(singleton);

? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? instance.hideFlags = HideFlags.None;
? ? ? ? ? ? ? ? return instance;
? ? ? ? ? ? }
? ? ? ? }
? ? }

? ? protected virtual void Awake()
? ? {
? ? ? ? bAppQuitting = false;
? ? }

? ? protected virtual void OnDestroy()
? ? {
? ? ? ? bAppQuitting = true;
? ? }
}

?文章來源地址http://www.zghlxwxcb.cn/news/detail-763049.html

到了這里,關(guān)于Unity 使用 Microphone 采集麥克風(fēng)聲音的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 電腦麥克風(fēng)輸入沒聲音,如何解決

    電腦麥克風(fēng)輸入沒聲音,如何解決

    麥克風(fēng)沒聲音,麥克風(fēng)設(shè)置問題或硬件損壞問題。 若麥克風(fēng)正常工作,電腦左下角會顯示圖標(biāo)。

    2024年02月11日
    瀏覽(37)
  • 成功解決電腦麥克風(fēng)不管用、電腦無法錄制聲音之出現(xiàn)的麥克風(fēng)Realtek(R) Audio未插入

    成功解決電腦麥克風(fēng)不管用、電腦無法錄制聲音之出現(xiàn)的麥克風(fēng)Realtek(R) Audio未插入

    成功解決電腦麥克風(fēng)不管用、電腦無法錄制聲音之出現(xiàn)的麥克風(fēng)Realtek(R) Audio未插入 目錄 1.解決問題 2.解決方法 電腦無法錄制聲音,經(jīng)過查看發(fā)現(xiàn)問題,麥克風(fēng)Realtek(R) Audio未插入 搜索框輸入Realtek Audio Console→麥克風(fēng)陣列→點擊取消靜音,即可! 哈哈,大功告成! 完工了??!

    2024年02月11日
    瀏覽(29)
  • 陣列麥克風(fēng)聲音定位-代碼python實現(xiàn)-二維與三維聲音定位

    陣列麥克風(fēng)聲音定位-代碼python實現(xiàn)-二維與三維聲音定位

    FT - 傅立葉變換FT(Fourier Transform) 時域頻域轉(zhuǎn)換, 此鏈接講的很清晰。 FFT - 快速傅里葉變換 (fast Fourier transform): 計算機(jī)計算DFT DTFT - 離散時間傅立葉變換 :時域離散,頻域連續(xù) DFT-離散傅立葉變換 :時域離散,頻域也離散時域離散,頻域連續(xù) 相當(dāng)于對時域的連續(xù)信號進(jìn)行抽

    2023年04月12日
    瀏覽(17)
  • 筆記本電腦沒有麥克風(fēng),聲音無法找到輸入設(shè)備

    筆記本電腦沒有麥克風(fēng),聲音無法找到輸入設(shè)備

    新買的電腦沒有揚聲器,電腦聲音沒有輸入設(shè)備,在開騰訊會議的時候才發(fā)現(xiàn)竟然有這個問題。 網(wǎng)上找原因,哎,找了一大堆每一個靠譜的 這讓我想起來上次電腦沒有熱鍵的問題,所有問題的終極解決方案,都在源頭那里,網(wǎng)上的這些東西都是大家從源頭那里吸收消化過的

    2024年02月07日
    瀏覽(22)
  • macOS錄制系統(tǒng)聲音及麥克風(fēng)的三種方法

    macOS錄制系統(tǒng)聲音及麥克風(fēng)的三種方法

    首先下載系統(tǒng)聲音錄制驅(qū)動 blackhole ,2ch/16ch/64ch都可,一般用前兩個就行了,具體參考:blackhole下載地址,安裝之后前往在“audio midi setup”app中即可看到裝好的驅(qū)動 創(chuàng)建 聚集設(shè)備(Aggregate Devices) ,并勾選剛才下載的錄制系統(tǒng)聲音的驅(qū)動,以及想要錄制的麥克風(fēng)(也可以使用外置

    2024年02月06日
    瀏覽(31)
  • 電腦麥克風(fēng)沒聲音怎么辦?這3招就可以解決!

    電腦麥克風(fēng)沒聲音怎么辦?這3招就可以解決!

    最近有用戶在使用電腦麥克風(fēng)進(jìn)行視頻錄制時,發(fā)現(xiàn)麥克風(fēng)沒有聲音。這是什么原因? 電腦麥克風(fēng)沒有聲音怎么辦?關(guān)于解決方案,我專門整理了三種方法來幫你們,一起來看看吧! 操作環(huán)境: 演示機(jī)型:華為MateBook 系統(tǒng)版本:Windows 10 很多人反映,win10麥克風(fēng)沒有聲音怎么

    2024年02月09日
    瀏覽(22)
  • 傳感器使用——ESP-WROOM-32 and INMP441麥克風(fēng)音頻采集

    傳感器使用——ESP-WROOM-32 and INMP441麥克風(fēng)音頻采集

    ?????????使用不同傳感器前需要了解其連接及通信方式。對于 ESP-WROOM-32 and INMP441麥克風(fēng) 是通過 I2S 方式進(jìn)行通信。具體連接引腳參照下圖: ESP-WROOM-32引腳示意圖 ? ? ? ? ?使用的麥克風(fēng)為MEMS麥克風(fēng),具體規(guī)格可參照芯片規(guī)格數(shù)說明。 INMP441麥克風(fēng) ????????I2S音頻連接

    2024年02月09日
    瀏覽(20)
  • vue前端獲取/切換麥克風(fēng),播放采集音頻和采集音量大小

    vue前端獲取/切換麥克風(fēng),播放采集音頻和采集音量大小

    使用時確保你有如下依賴且版本為Vue2,終端里面運行 重要代碼:audio: { deviceId: this.form.chooseMicDeviceId },將上面選的麥克風(fēng)放到getUserMedia中,即可啟用用戶自己選擇的麥克風(fēng) 在sendData中可以把數(shù)據(jù)流傳給后端,可以播放/下載采集到的數(shù)據(jù)流,也可以將數(shù)據(jù)流轉(zhuǎn)換成file傳給后端

    2024年02月08日
    瀏覽(22)
  • Qt 實現(xiàn)的萬能采集庫( 屏幕/相機(jī)/揚聲器/麥克風(fēng)采集)

    【寫在前面】 ???????? 之前應(yīng)公司需要,給公司寫過一整套直播的庫( 推拉流,編解碼),類似于 libobs 。 ? ? ? ? 結(jié)果后來因為沒有相關(guān)項目,便停止開發(fā)維護(hù)了。 ? ? ? ? 不過里面很多有用的組件,然后也挺好用的,遂開源出來一部分。 ? ? ? ? 因此,本篇就簡單講

    2024年04月27日
    瀏覽(28)
  • Android麥克風(fēng)數(shù)據(jù)采集格式和常見的編碼格式

    在 Android 平臺上,PCM(脈沖編碼調(diào)制)數(shù)據(jù)是一種常用的音頻數(shù)據(jù)表示格式。PCM 是一種無損音頻編碼,可以捕捉和存儲原始音頻信號的波形。在 Android 系統(tǒng)中,開發(fā)人員可以使用 PCM 數(shù)據(jù)處理音頻信號,以實現(xiàn)音頻播放、錄音、實時語音通信等功能。 在處理 PCM 數(shù)據(jù)時,And

    2023年04月08日
    瀏覽(44)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包