我可以在不使用麦克风的情况下录制

2023-12-29

我有一个<audio>元素,我正在更改速度、开始/结束边界和音调。我想看看是否可以录制我在浏览器中听到的音频。但是我不想只用麦克风录音,因为质量较低。

我可以在服务器端实现相同的效果,但我不想这样做,因为我基本上用两种不同的技术复制相同的功能。


为了回应旗帜投票,因为“不清楚我在问什么”,我将重新措辞。

我有一个<audio>元素在页面上播放。我有一些 javascript 操纵播放速率、音量等。然后我想要我的browser录制音频据我所知。这不是麦克风。我想创建一个尽可能接近正在播放的音频文件。如果是 75%,那么新文件的体积将是 75%。


在支持浏览器中,您可以使用MediaElement.captureStream() https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/captureStream方法以及媒体记录器 API https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder.

但请注意,这些技术仍在积极开发中,并且当前的实现仍然充满错误。
例如,对于您的情况,如果您在录制时更改音量,当前稳定的 FF 将停止原始媒体音频的渲染...我没有时间搜索有关它的错误报告,但无论如何,这只是一个您会发现许多错误。

// here we will save all the chunks of our record
const chunks = [];
// wait for the original media is ready
audio.oncanplay = function() {
  audio.volume = 0.5; // just for your example
  // FF still does prefix this unstable method
  var stream = audio.captureStream ? audio.captureStream() : audio.mozCaptureStream();
  // create a MediaRecorder from our stream
  var rec = new MediaRecorder(stream);
  // every time we've got a bit of data, store it
  rec.ondataavailable = e => chunks.push(e.data);
  // once everything is done
  rec.onstop = e => {
    audio.pause();
    // concatenate our chunks into one file
    let final = new Blob(chunks);
    let a = new Audio(URL.createObjectURL(final));
    a.controls = true;
    document.body.append(a);
  };
  rec.start();
  // record for 6 seconds
  setTimeout(() => rec.stop(), 6000);
  // for demo, change volume at half-time
  setTimeout(() => audio.volume = 1, 3000);
};

// FF will "taint" the stream, even if the media is served with correct CORS...
fetch("https://dl.dropboxusercontent.com/s/8c9m92u1euqnkaz/GershwinWhiteman-RhapsodyInBluePart1.mp3").then(resp => resp.blob()).then(b => audio.src = URL.createObjectURL(b));
<audio id="audio" autoplay controls></audio>

对于较旧的浏览器,您可以使用 Web Audio APIcreateMediaElementSource https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaElementSource方法,通过 API 传递音频元素媒体。
从那里,您可以将原始 PCM 数据提取到 arrayBuffers 并保存它。

在下面的演示中,我将使用recorder.js https://github.com/mattdiamond/Recorderjs/blob/master/dist/recorder.js图书馆,它做greatly帮助提取+保存到 wav 过程。

audio.oncanplay = function(){
  var audioCtx = new AudioContext();
  var source = audioCtx.createMediaElementSource(audio);
  var gainNode = audioCtx.createGain();

  gainNode.gain.value = 0.5;

  source.connect(gainNode);
  gainNode.connect(audioCtx.destination);  

  var rec = new Recorder(gainNode);

   rec.record();
  setTimeout(function(){
    gainNode.gain.value = 1;
    }, 3000);
  setTimeout(function(){
    rec.stop()
    audio.pause();
    rec.exportWAV(function(blob){
      var a = new Audio(URL.createObjectURL(blob));
      a.controls = true;
      document.body.appendChild(a);
      });
    }, 6000);
  };
<script src="https://rawgit.com/mattdiamond/Recorderjs/master/dist/recorder.js"></script>
<audio id="audio" crossOrigin="anonymous" controls src="https://dl.dropboxusercontent.com/s/8c9m92u1euqnkaz/GershwinWhiteman-RhapsodyInBluePart1.mp3" autoplay></audio>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在不使用麦克风的情况下录制

  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • C# 音频库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 为什么 setTimeout 在 Chrome 中触发两次,而在 IE 或 Firefox 中则不然?

    有人能告诉我为什么 javascript 函数 生成新号码 在 Chrome 中触发两次 但在 IE 或 Firefox 中则不会 使用 Chrome 20 0 1132 57 IE9 和 Firefox 13
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何停止TinyMCE删除span标签?

    在我的工作中 前一位程序员决定使用公司网站上精彩的TinyMCE 我遇到的数千个问题之一是 如果原文有的话span标签 当我按下退格键删除一行 p仅标签 全部span标签已从文本中删除 这个错误比另一个错误更具体 我可以删除anything
  • 具有 100% 高度行和 Internet Explorer 9 的表格

    我有以下示例 div style height 150px background color AAAAFF div
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个

随机推荐

  • 具有多个 OR 参数的 imap 搜索语法

    我正在使用 Ruby 2 5 3 和邮件 gem 2 7 1 我正在构造 IMAP 搜索命令来检索给定电子邮件地址列表和各种自日期的电子邮件 它是搜索电子邮件地址的逻辑或 我正在使用这个 email filter OR FROM email
  • 如何在requirements.txt中声明直接的github源

    我已经使用命令安装了一个库 pip install git git github com mozilla elasticutils git 它直接从 Github 存储库安装它 这工作正常 我希望在我的requirements txt 我看
  • 上传图片时获取图片名称

    当我上传图片时 h3 Img h3
  • 错误“\..此时是意外的”

    我用它创建了一个 reg 以添加Delete empty folders我的上下文菜单中的命令 当我右键单击一个文件夹时 这应该删除其空的子文件夹 我的上下文菜单中有 删除空文件夹 但是当我选择此选项时 会打开一个 cmd 窗口 并收到此错
  • NativeBase + 指数标头

    我正在使用 NativeBase 和 Exponent 标题位于手机状态栏下方 您可以在本地库 https getexponent com community native baseExponent 发布的演示 有人能解决这个问题吗 由于此
  • 无法从初始 URI 检索初始集群分区 [RedisURI [host='127.0.0.1', port=7001]]

    我正在开发 Lettuce 集群 Java 客户端 它设置在一个bolt拓扑 Apache Strom spout正在读取数据kafka并将其传递给bolt 但是 当我开始拓扑时 我收到以下错误消息并且程序终止 我错过了什么吗 是什么原因造
  • 猴子补丁节点模块

    我正在尝试猴子补丁该节点模块 https github com johnvmt node desktop screenshot in electron https electronjs org 应用 我想改变capture方法输入参数 到目
  • Angular 6 angular.json 在配置中添加 ssl

    我想通过 SSL 为我的应用程序提供服务 之前我有这个脚本 ng serve ssl ssl key pathtokey key crt 我想在新的 angular json 中添加 SSL 但是当我尝试添加它时出现错误 Schema va
  • codemirror - 与代码重叠的行号

    我正在使用最新的 codemirror v5 49 0 对于我的电子文本编辑器应用程序 有时行号会与文本重叠呈现 无法重现该错误 因为它并不总是发生 通过多次刷新应用程序即可轻松重现 有人有主意吗 或者这对您来说可能是一个已知问题 我也遇到
  • Spring Boot、Thymeleaf 和 @Controller

    我正在使用 Spring Boot 但有些东西我不太明白 我有2个 Controller在我的应用程序中 第二个并没有真正接收 REST 调用 Thymeleaf 正在跳转请求 基本上我所拥有的是 Configuration Compone
  • MSDeploy安装Windows服务?

    我们有一个使用 NServiceBus 发布事件的网站 该站点是使用 msdeploy 部署的 我们还有 NServiceBus exe 它应该作为 Windows 服务运行来订阅这些事件 我们也想部署它 有什么方法可以将服务和网站打包在一
  • `getElementById` 返回 null [重复]

    这个问题在这里已经有答案了 一个案例document getElementById返回null 我已经阅读了 SO 中的其他四个问题 并阅读了 MDN 上的参考资料 但我不知道出了什么问题 请帮我 代码如下 HTML
  • WPF Canvas,如何使用MVVM代码动态添加子项

    要求 根据点的集合绘制一个位图图像和矩形 矩形应完全适合图像上的像素位置 还需要在矩形内添加一些文本 图像始终只有一张 并且矩形将动态添加 目前的解决方案 有一个带有图像控制的画布 在代码隐藏文件ViewImageResult xaml c
  • 如何在 Geodjango/GEOS 中将公里转换为度?

    我正在使用 GEOS API 中的 缓冲区 方法根据 GeoDjango 中的点和半径创建一个圆 根据这个答案 GeoDjango 如何根据点和半径创建圆 https stackoverflow com questions 4985222
  • @Async 不适用于 Spring API 中的接口

    我正在使用 Async 使用 hibernate 在数据库中并行存储一些数据 我需要这样做 因为在将信息保存到数据库之前 我需要运行一些需要几分钟的任务 所以我实现了 Async 问题是 Async 似乎不起作用 请找到下面的代码 网页配置
  • 如何迭代 std::set?

    我有这个代码 std set
  • 无论如何,有没有办法“探测”common lisp 中的方法

    我的应用程序允许用户间接创建自己的方法 稍后我需要引用这些方法 我想知道是否有一种方法 用于错误检查目的 来测试方法是否存在而不尝试执行它 如果我只是尝试调用该方法但它不存在 这将使我的应用程序崩溃 另请参阅函数 FIND METHOD h
  • 如何在 Windows 操作系统上查找计算机上安装的 JVM 是 HotSpot 还是 JRockit

    如何确定 Windows 机器上安装的 JVM 是 HotSpot 还是 JRockit 还是来自任何其他供应商 在终端中运行此命令 java XshowSettings properties version
  • 尽管我只定义了 X 一次,但在 C 中出现“首先在此处定义了‘X’的多重定义”错误

    尽管我仍然收到错误 但我的所有文件中只有一个名称 代码 的定义 我尝试使用 pragma Once 和 ifndef 但没有成功 这是我收到的错误 marcin marcin VirtualBox Pulpit INA Wst p Laby
  • 我可以在不使用麦克风的情况下录制

    我有一个