准备做一个声控类的小游戏,发到抖音小游戏的平台上,用typescript+creator2.4.0
请问如何监听到话筒的声音,从而控制角色的跳动?
有做过的朋友吗?具体如何解决获取话筒声音这个问题?(抖音小游戏平台,不是原生平台)
下面是我的代码:
const {ccclass, property} = cc._decorator;
@ccclass
export default class Helloworld extends cc.Component {
@property(cc.Label)
label: cc.Label = null;
@property
text: string = 'hello';
public voiceLevel: number = 0;
private _inited: boolean = false;
// private _audioContext: AudioContext = null;
private _audioInput: any = null;
private _analyserNode: any = null;
private _freqByteData: any = null;
onLoad() {
// this._audioContext = new AudioContext();
let _navigator: any = navigator;
if (!_navigator.getUserMedia)
_navigator.getUserMedia = _navigator.webkitGetUserMedia || _navigator.mozGetUserMedia;
if (!_navigator.cancelAnimationFrame)
_navigator.cancelAnimationFrame = _navigator.webkitCancelAnimationFrame || _navigator.mozCancelAnimationFrame;
if (!_navigator.requestAnimationFrame)
_navigator.requestAnimationFrame = _navigator.webkitRequestAnimationFrame || _navigator.mozRequestAnimationFrame;
// let self = this;
_navigator.getUserMedia(
{
"audio": {
"mandatory": {
"googEchoCancellation": "false",
"googAutoGainControl": "false",
"googNoiseSuppression": "false",
"googHighpassFilter": "false"
},
"optional": []
},
}, function (stream) {
// Create analyser node
let audioContext = new AudioContext();
// let audioContext: any = this._audioContext;
let inputPoint = audioContext.createGain();
let audioInput = audioContext.createMediaStreamSource(stream);
audioInput.connect(inputPoint);
let analyserNode = audioContext.createAnalyser();
analyserNode.fftSize = 2048;
inputPoint.connect(analyserNode);
let freqByteData = new Uint8Array(analyserNode.frequencyBinCount);
analyserNode.getByteFrequencyData(freqByteData);
this._freqByteData = freqByteData;
this._analyserNode = analyserNode;
this._audioInput = audioInput;
this._inited = true;
}, function (e) {
alert('Error getting audio');
console.log(e);
this._inited = false;
});
}
start () {
// init logic
this.label.string = this.text;
}
update(dt) {
if (this._inited) {
let analyser = this._analyserNode,
freqByteData = this._freqByteData;
analyser.getByteFrequencyData(freqByteData);
let sum = 0;
for (let i = 0; i < freqByteData.length; i++) {
sum += freqByteData[i];
}
this.voiceLevel = sum / freqByteData.length;
}
}
}
手机扫二维码运行,报错如下:
TypeError: undefined is not a function (near ‘…_navigator.getUserMedia…’)
/app/engine/bin/cocos2d-js-for-preview.js:17295:20
anonymous
http://192.168.0.50:7456/app/engine/bin/cocos2d-js-for-preview.js:27537:19
invoke@http://192.168.0.50:7456/app/engine/bin/cocos2d-js-for-preview.js:27487:21


