今天写项目时,有一个需求:通过前端实现用户语音、系统扬声器语音的输入与输出,第一个还是比较好实现的,问问GPT就会给你生成代码,问题的难点就在于第2条:如何获取电脑扬声器的输出,问gpt,gpt说不可以实现,在经过查阅大量资料和不断的尝试后,我终于找到了问题的解决办法:通过访问屏幕媒体流来获取数据,间接的拿到音频数据!
js已经内置好了方法,直接调用即可,不需要下载什么插件啥的,下面分别解释一下获取麦克风的权限,声音录制与播放,还有系统扬声器声音的录制与播放:
1-麦克风权限:
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
让我们逐步解析这行代码的各个部分:
navigator.mediaDevices
:
navigator
是Web API中的一个全局对象,它提供了关于浏览器的信息,并允许脚本执行一些浏览器级别的操作,比如页面跳转或查询浏览器设置。mediaDevices
是navigator
对象的一个属性,它提供了一个接口,允许用户访问连接到设备的媒体输入和输出设备,如摄像头和麦克风。getUserMedia()
方法:
getUserMedia()
是mediaDevices
接口中的一个方法,用于请求用户媒体的访问权限。这个方法返回一个Promise
,这是因为请求用户媒体是一个异步操作,需要等待用户授权或拒绝。- 这个方法接受一个配置对象作为参数,用于指定需要访问的媒体类型。在你的例子中,配置对象是
{ audio: true }
,表示请求访问用户的音频设备(通常是麦克风)。- 配置对象
{ audio: true }
:
- 这个对象指定了
getUserMedia()
方法的参数,即请求访问用户的音频输入设备。如果还需要访问视频输入设备ÿ