将JavaScript转换为jslib插件以实现统一

时间:2018-10-25 10:02:26

标签: javascript unity3d unityscript

由于unitg不支持webgl中的麦克风,因此我正在尝试创建一个可以代替C#脚本进行工作的jslib(我在unity论坛中进行了很多搜索,但我认为这样做可能有效,但不确定) 。
我找到了一个Javascript脚本来录制音频并进行播放,但是我尝试将其转换为jslib,如统一手册中所述(https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html),但它不起作用。我很确定问题出在异步/等待(我只知道javascript的基础知识)。
如果有人可以帮助我解决问题或给我提供可以帮助我的教程的链接,将不胜感激(我已搜索过但找不到任何有用的信息)。
这是我发现的javascript(与html结合使用时有效):

const recordAudio = () =>
  new Promise(async resolve => {
    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    const mediaRecorder = new MediaRecorder(stream);
    const audioChunks = [];

    mediaRecorder.addEventListener("dataavailable", event => {
      audioChunks.push(event.data);
    });

    const start = () => mediaRecorder.start();

    const stop = () =>
      new Promise(resolve => {
        mediaRecorder.addEventListener("stop", () => {
          const audioBlob = new Blob(audioChunks);
          const audioUrl = URL.createObjectURL(audioBlob);
          const audio = new Audio(audioUrl);
          const play = () => audio.play();
          resolve({ audioBlob, audioUrl, play });
        });

        mediaRecorder.stop();
      });

    resolve({ start, stop });
  });

let recorder = null;
let audio = null;

const recordStop = async () => {
  if (recorder) {
    audio = await recorder.stop();
    recorder = null;
  } else {
    recorder = await recordAudio();
    recorder.start();
  }
};

const playAudio = () => {
  if (audio && typeof audio.play === "function") {
    audio.play();
  }
};

0 个答案:

没有答案