首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MediaStreamTrack的程序音频

使用MediaStreamTrack的程序音频
EN

Stack Overflow用户
提问于 2022-10-20 23:06:45
回答 1查看 22关注 0票数 0

我想编码一个视频(从画布),并添加过程音频到它。

编码可以使用接受MediaRecorderMediaStream来完成。

对于流,我希望使用canvas.captureStream()调用从画布中获取视频部分。

我想在流中添加一个音频轨道。但是我不想给麦克风输入,我想为那些飞行中的人生成样本,为了简单起见,让我们假设它写出了一个正弦波。

如何创建生成过程音频的MediaStreamTrack

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-21 02:04:01

Web音频API有一个createMediaStreamDestination()方法,它将返回一个MediaStreamAudioDestinationNode对象,您可以在该对象上连接音频上下文,并允许您访问由音频上下文音频输出提供的MediaStream实例。

代码语言:javascript
复制
document.querySelector("button").onclick = (evt) => {
  const duration = 5;
  evt.target.remove();
  const audioContext = new AudioContext();
  const osc = audioContext.createOscillator();

  
  const destNode = audioContext.createMediaStreamDestination();
  const { stream } = destNode;
  
  osc.connect(destNode);
  osc.connect(audioContext.destination);
  osc.start(0);  
  osc.frequency.value = 80;
  osc.frequency.exponentialRampToValueAtTime(440, audioContext.currentTime+10);
  osc.stop(duration);
  
  // stream.addTrack(canvasStream.getVideoTracks()[0]);
  const recorder = new MediaRecorder(stream);
  const chunks = [];
  recorder.ondataavailable = ({data}) => chunks.push(data);
  recorder.onstop = (evt) => {
    const el = new Audio();
    const [{ type }] = chunks; // for Safari
    el.src = URL.createObjectURL(new Blob(chunks, { type }));
    el.controls = true;
    document.body.append(el);
  };
  recorder.start();
  setTimeout(() => recorder.stop(), duration * 1000);
  console.log(`Started recording, please wait ${duration}s`);
 };
代码语言:javascript
复制
<button>begin</button>

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

https://stackoverflow.com/questions/74147182

复制
相关文章

相似问题

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