Mac录屏/直播无声音的原因及解决方法
Table of Contents
之前写过一篇:Mac obs推流直播无声音解决方法,不过由于是用Soundflower的,现在在BigSur里已经不起作用了,因为Soundflower一直没有人更新。但是里面还是有一些这里没有提到的内容,所以我也建议去看看,只不过其中的Soundflower换成这里的Loopback即可。
Mac音频输入输出原理
音频输出
Mac音频输出示意图(点击图片可以放大)
由上图可知,当电脑里的某个软件播放音乐也好,视频也好,只要是能播放出声音,它的声音会通过系统的音频通道传输到输出设备,这个输出设备可以是:
- 内置喇叭(也叫内建扬声器,Build-in Speaker)
- 蓝牙(耳机、音箱等)
- 3.5mm耳机孔(可接各种设备,包括有线耳塞、有线头戴式耳机,通过功放器接音箱等等)
- 雷雳接口(无3.5mm耳机孔款,可用转接头/扩展坞,插到雷雳接口,其效果跟3.5mm耳机孔是一样的)
前面提到的内置喇叭、有线耳机、蓝牙耳机等等,只要连接上了电脑,就可以点击声音图标看到
其中耳机孔和内置喇叭只能二选一,耳机孔插了耳机(包括USB-C转换口那种),则自带的喇叭就会消失,自动变成耳机,因为我们插耳机就是为了让喇叭不响。
而且默认情况下,你只能把声音输出到其中的一个设备,比如说,你在上边列表中选择输出到有线耳机,就无法输出到蓝牙耳机,反之亦然。
那有没有办法让声音既输出到有线耳机也输出到蓝牙耳机呢?有!但需要使用音频相关的设置工具,比如系统自带的“音频MIDI设置”
我们可以使用它创建一个虚拟的“设备”,其实就是前面点击喇叭后显示的那个列表中的“Multi-Output Device”,我们把声音输出到这个虚拟的“Multi-Output Device”里面,然后因为我们在这个设备里配置了把声音同时输出到有线耳机和蓝牙耳机,这样声音就能同时输出到两个输出设备里了。
音频输入
Mac音频输入示意图(点击图片可以放大)
由上图可以看到,声音要输入到Mac中,其实就是靠话筒(也叫“麦克风”,我们简称“麦”),机身自带有麦,耳机都是自带麦的(蓝牙和有线耳机都有),当然也可以用外部的话筒来,当然最终还是靠耳机插孔输入的(包括USB-C转接口那种)。
而我们的录音或者录屏软件,一般都有选择声音输入设备的选项,比如自带的录屏工具,它的Microphone(麦克风)里就有很多可选(当然这也是因为我这里安装的比较多)
其中的“Build-in Microphone”(内建麦克风)就是电脑机身自带的麦,当然如果你插了有线耳机,那么这个“Build-in Microphone”(内建麦克风)就默认是你有线耳机上边的那个麦,但如果连接的是蓝牙耳机,则蓝牙耳机的麦不会替换掉机身内置的麦,也就是说,你连接了蓝牙耳机后,既可以选择使用蓝牙耳机的麦,也可以选择机身自带的麦。
这些可选的麦克风,我们称它们为“音频输入设备”,也可以说成“选择某个设备作为音频输入源”!
Screenflow录屏工具,也是有多种音频输入设备可选
OBS直播工具(当然也可以不直播,直接当录屏工具用),也是有多种音频输入设备可选
钉钉视频通话(视频会议)也一样,也是有多种音频输入设备可选
Skype(可以认为是微软版的FaceTime)也是有多种音频输入设备可选
但是腾讯会议,却少了很多,我个人认为是腾讯会议程序有问题,因为它连它自己的驱动(WeMeet Audio Device)都无法识别(macOSBigSur11.5.1,腾讯视频v2.18.3_404)
Mac版微信语音或视频通话也可以选择多种音频输入设备(这张图是后来添加的,所以显示的设备可能有点不同)
音频输入输出分析
前面分别讲了macOS的音频输出和音频输入,我想大家对macOS音频的输入输出也有一定的了解了。
这里再总结一下:
- 音频输出(播放声音),其实就是能播放出声音的软件把它播放出来的声音传递给音频输出设备,让音频输出设备发出声音的过程;
- 音频输入(录音),其实就是使用音频输入设备,把声音输入到电脑中,并录制下来的过程(有可能保存成文件、也有可能实时发送到网络中,实时发送到网络中其实就是在线通话)。
- 常见的能播放出声音的软件:网易云音乐、QQ音乐之类的音乐播放器、爱奇艺、优酷之类的视频播放器、以及直接在浏览器上播放音乐、视频的浏览器)
- 常见的音频输出设备有:内置喇叭、蓝牙耳机、蓝牙音箱、有线耳机等。
- 常见的音频输入设备:内置麦克风、蓝牙耳机麦克风、有线耳机麦克风等等。
直播/录屏无声的原因及解决办法
录屏无声的原因
只要是录过屏的童鞋,应该都明白,这里说的录屏无声,指的是无法录制电脑软件播放出来的声音,比如我浏览器里播放视频,录制只能录到视频,但是视频里的声音即无法录制下来。
如果你认真看完前面的内容,并且理解了音频输入输出分析里的内容,那么你应该明白,一个软件想要把声音录下来(录屏也算录音,因为它需要录制声音),那么它就必须选择一个声音录制来源,也就是说,你想要录制哪个音频输入设备中的声音!
现在问题来了,想要录音就要选一个音频输入设备,可是在“Microphone”(麦克风)里面,根本无法选择浏览器、音乐播放器作为声音输入设备呀,因为浏览器、音乐播放器它根本就不是音频输入设备,你当然就无法选择了!
直播无声的原因
跟录屏无声的原因一样,所谓的直播无声,指的是电脑里的浏览器或者音乐播放器播放出来的声音无法直播出去(但麦的声音是没问题的)。
其实直播就是录屏!只不过,直播是不断的把录制的数据发送到直播服务器(而不是保存成一个视频文件),直播服务器再把这个数据持续的分发到观看直播的人的客户端中(有可能是手机app也有可能是手机或者电脑上的网页),这也是为什么macOS上的直播软件都需要“屏幕录制权限”的原因。
所以,直播无声的原因跟录屏无声的原因,其实是一样的!
直播/录屏无声解决办法
既然直播/录屏只能从“音频输入设备”里获取声音,那么我们就从“音频输入设备”入手!
我们知道,在电脑里面,其实很多东西都可以虚拟的,比如虚拟机其实就是虚拟出一台电脑,然后让你可以在这台“虚拟电脑”里安装其它的系统,而“音频输入设备”和“音频输出设备”也是可以虚拟的!并且很多时候它们是一起的,就像一个耳机,它既是输出设备(有喇叭)也是输入设备(有麦克风)。
所以,我们可以用程序模拟一个像耳机一样的设备,而Soundflower就是一个这样的程序。
安装Soundflower之后,要重启系统才能在系统声音输出设备里面看到
我在音频输出里选择Soundflower,这时Soundflower就相当于一个耳机,而且也因为我选择了Soundflower作为输出设备,所以声音只会输出到Soundflower,而不会输出到系统自带的喇叭或者耳机里,也就是说,此时你播放歌曲、看视频,系统自带的喇叭或者耳机是不会有声音的(如果有声音,说明Soundflower有问题,后面会说到)。
可是Soundflower是一个虚拟的设备,并不是一个真实存在的喇叭或者话筒,所以就算把声音输出给它,它也不可能能发出声音,那输出给它干嘛呢?
在系统自带的录屏工具里,选择Soundflower作为麦克风,假设我是录Safari浏览器里播放的一个视频,于是声音的流向就变成了:Safari→系统音频通道→Soundflower虚拟设备→录屏工具,用这样的方式,就可以把电脑内软件播放的声音给录下来了
其实所有的录屏工具或直播工具都可以用这种方法来实现录制电脑软件播放出来声音的!可是Soundflower实在太老了,而且也没人去更新,目前在我所使用的BigSur11.5.1里,上边说的方法已经无效了(之前我在Mojave里还是可以用的)!
那有没有类似Soundflower这样的工具呢?毫无疑问,肯定是有的!因为录制电脑声音的需求太多了,所以肯定有人写这样的软件,其实这样的软件有很多,我推荐的是:Loopback!当然,Loopback除了具有Soundflower这样的功能,它还有另外的更好用的功能,毕竟它是一个专业的音频路由软件。
使用Loopback解决直播/录屏无声音问题
Loopback是一款收费的音频路由工具,所谓音频路由,就是可以改变音频的输出走向(因为默认情况下,系统的音频都是会输出到音频输出设备中,比如自带喇叭、耳机里)。
Loopback是一个收费的软件,虽然可以免费用,但免费版录制一定时长后(据说是20分钟后),录制的声音就会有很大的噪音,不过好在是每次20分钟,而不是总时长20分钟,如果你录制视频时间不长,用免费版也不影响。
Loopback的安装非常简单,下载Loopback安装包,双击打开,把里面的Loopback.app拽到应用程序里就行,因为安装软件无非就那几种方式,如果你对安装软件不了解,强烈建议读一下我这篇文章:Mac实用技巧之:三种安装/卸载/更新软件的方式及其优缺点。
打开Loopback,它的界面是这样的
比如我要用macOS自带录屏工具录制Edge浏览器里播放的视频,默认情况下肯定是录不到这个视频里的声音的,但是我们在Loopback里把Edge添加为声音来源(点击Sources里的“+”号,添加一下,注意只有已经打开的软件才会显示,如果要删除,可以选中它,然后cmd+delete
删除)
然后在自带录屏里选择“Loopback Audio”作为麦克风,这样就能录到声音了
我们来捋一下声音的走向:Edge浏览器→Loopback→录屏工具!
但如果这样,虽然能录到声音,但是在录的时候,我们在自带的喇叭或者耳机里,是不到视频的声音的,这是为什么呢?原因是因为Loopback默认把输出给音频输出设备(自带喇叭、耳机等)的声音给静音了!
静音的原因是:如果你在输入源里添加了机身自带麦克风,如果你没插耳机又不静音,机身自带的麦克风将会收到自带喇叭发出的声音再次传到Loopback中,Loopback再播放出来,然后又被麦克风收到,再传入Loopback中,……,这个过程就跟你拿着麦唱K的时候,把麦对着音箱,结果就是会产生共鸣现象,造成啸叫,声音越来越刺耳!
如果你带了耳机,当然就不会有这种问题,所以才有第三栏“Monitors”(监听器),在“Monitors”里可以添加一个音频输出设备(机身喇叭、耳机等等),这样就可以在这个音频输出设备里听到声音了
快速预览要添加哪个app?
快速预览是macOS里很好用的一个功能,在访达里选中图片、文档、视频(mov/mp4等)、音频(mp3/flac等),然后按空格,就能预览这个文件,对于视频或者音频文件,其实就是播放视频或者音频。
“快速预览”播放视频
根据前面所说,如果要把一个软件播放的声音输入到Loopback里,只需要在Loopback的Sources里添加一下这个软件就行!可是你会发现,你在Loopback里添加的时候,列表里根本没有“快速预览”这个软件。
事实上快速预览不是一个软件,而是一个功能,是“访达”的功能,也就是说,如果我们想把“快速预览”播放的声音输入到Loopback里,我们只需要在Loopback的Sources里添加“访达(Finder)”即可!
什么是Pass-Thru?
如上图,在输入源“Sources”里有个“Pass-Thru”,Thru其实是through,所以它全称其实是pass through,懂英文的童鞋应该知道这个意思,就是“通过”的意思。
我们知道,在Sources里的都是某个软件,所以“Pass-Thru”是什么软件呢?但其实它并不是什么软件,请往下看!
Loopback的音频输入源有两种方式:
- 1、主动方式:比如上图中我添加的Edge浏览器,Loopback会主动去捕获Edge浏览器里播放的视频或音乐里的音频;
- 2、被动方式:也就是它自己不主动去捕获,而是别的软件把自己播放的声音传输给它!
在一些功能比较全的音频相关的软件里,比如Skype,它是可以指定输出设备的,如下图,在Skype的“音频和视频”里,可以把扬声器指定为“Loopback Audio”,意思是Skype里的声音将会从“Loopback Audio”这个“扬声器”里播放出来,然而“Loopback Audio”根本就不是一个真实的扬声器,所以这个做法就相当于是把Skype的声音输入到“Loopback Audio”里面而已,而“Pass-Thru”就是用于获取这个输入的声音的
就算不是像Skype这种能选择扬声器的软件,我们也可以在系统的声音输出里,选择把声音输出到“Loopback Audio”,然后再在“Loopback Audio”的输入源(即“Sources”)里使用“Pass-Thru”来接收这个声音,然后在录屏里还是选择Loopback作为麦克风,这样本来要输出到音频输出设备(喇叭、耳机等)里的声音,又被Loopback给转回来传到录屏工具了,这也是这个工具为什么叫Loopback的原因,因为loopback本身的意思就是“回路”,loop是转圈,back是回来,所以loopback就是“转一圈又回来了”
不过我认为没什么必要这么用,因为Loopback的主动获取方式可以直接从播放音频的软件里获取到它播放的声音,根本不需要从输出设备中绕一圈绕回来,就比如说Skype,也是可以直接在Loopback的“Sources”里添加它,添加了之后它的声音就会被Loopback捕获,根本不需要在Skype里设备扬声器为Loopback,然后再绕一圈再用Loopback的Pass-Thru来获取这个音频。
终上所术,我个人认为,绝大多数情况下,Pass-Thru没啥用!
添加/删除设备
Loopback里每添加一个设备,在声音输出设备里就能看到,但是如果要删除,记住不要直接删除,因为如果直接删除,声音输出设备里是不会刷新的,除非注销再登录或者重启电脑才会消失,如果要实时刷新,要在删除前先把on改为off(就是先关闭它),这样声音输出设备里对应的这个设备就会消失
其它录屏/直播工具使用Loopback
前面只说了自带的录屏工具如何使用Loopback实现内录电脑内部声音,但其实如果你认真看完了文章,就应该知道,其它的什么OBS、腾讯视频、钉钉之类的,根本就不需要说,因为前面都有截图说过了,它们都可以选择声音输入设备(即麦克风)的,只需要选“Loopback Audio”作为它们的麦克风即可!
“语音备忘录”App怎样内录?
前面说的直播、录屏类的软件,都有一个特点,那就是它们都能选择音频输入源(即“麦克风”),这样我们选择Loopback为麦克风就可以把电脑内部声音通过Loopback传到直播、录屏软件中。
但是,有一类软件它是无法选择音频输入源的,比如系统自带有一个录音软件,叫:语音备忘录(Voice Memo)
语音备忘录的界面极其简洁,偏好设置也几乎没有什么设置,这就没法像前面那些软件一样选择Loopback作为音频输入源
还记得吗?前面我们说过,如果软件里无法选择声音输出到哪个音频输出设备,那我们可以在系统的声音里选择要把声音输出到哪个设备
既然声音输出可以在系统里选择要输出到哪个音频输出设备,那声音的输入是不是也可以在系统里选择从哪个音频输入设备中输入呢?答案当然是可以!只不过,声音的输出可以直接在顶部的状态栏里点击声音图标就可以切换输出到哪个设备,但是输入的话需要在偏好设置里设置!
如下图,系统偏好设置→声音→输入→选择“Loopback Audio”,这样系统的默认麦克风就是“Loopback Audio”了。现在,你想用语音备忘录录哪个软件里的声音,只需要在Looback的音频输入源(Sources)里添加一下那个软件,让Loopback能捕获该软件的声音即可。
语音备忘录如何导出成音频文件?
超级无敌简单,只需要把对应的录音记录拖放到访达的某个文件夹即可(桌面也是访达的一个文件夹,它的位置是“/用户/你的用户名/桌面/”)
拖动出来的文件格式默认是m4a格式,如果你需要转换为mp3,直接把后缀改为mp3就行,如果你要把它作为iPhone铃声,那就直接把后缀由m4a改成m4r就行。注意,虽然mpa,mp4,mp3之间转换格式可以直接改后缀,但不代表所有的格式都可以这样改,大多数时候还是要用格式转换的。
至于得到m4a文件后,如何导入到iPhone里,可以看这篇文章:在Mac上制作iPhone铃声(Make iPhone ringtone on macOS)。
直播/录屏工具自带音频驱动
像腾讯视频、钉钉这些虽然其本身不是娱乐类的直播软件,但是线上开会的时候、或者老师上课需要共享屏幕,这本质上就是直播,所以它们不可避免的会碰到需要把电脑上的声音直播出去的情况。
虽然用前面说的Loopback或者与之类似的软件可以解决,但你本身作为一个商业产品(像钉钉虽然免费就够用,但也有收费功能),如果还要求必须依赖于其它软件,而且那个软件还是收费的,还非常贵,这就说不过去了。
所以像腾讯视频它就自带有类似Soundflower那样的音频驱动,让你可以把本机的声音也直播出去,另外,像Screenflow录屏工具,本身就是付费软件,如果还无法录制本机的声音,那我买你这软件有何用?所以Screenflow也是自带有音频驱动的,这样就不依赖于第三方软件。但钉钉确实是没有,也许以后会有吧!
腾讯视频和Screenflow自带音频驱动可以在活动监视器里搜索“audio”搜索到(如下图所示)
腾讯视频和screenflow录屏工具的声卡驱动是安装在/Library/Audio/
文件夹中的
> ll /Library/Audio/Plug-Ins/HAL/
total 0
drwxr-xr-x 3 root wheel 96B 9 10 14:41 ACE.driver
drwxr-xr-x 3 root wheel 96B 5 7 14:42 TelestreamAudioCapture.driver
drwxr-xr-x@ 3 root wheel 96B 5 23 23:00 WMAudioPlugin.driver
Soundflower是安装在/Library/Extensions/
中的,.kext
表示Kernel Extension,内核扩展的意思,但奇怪的是,TelestreamAudio在这里也有,按这个道理,WMAudio也在这里才对,但却没有
> ll /Library/Extensions/
total 0
drwxr-xr-x@ 3 root wheel 96B 9 1 2020 AppleMobileDevice.kext
drwxr-xr-x 3 root wheel 96B 1 1 2020 HighPointIOP.kext
drwxr-xr-x 3 root wheel 96B 1 1 2020 HighPointRR.kext
drwxr-xr-x 3 root wheel 96B 1 1 2020 SoftRAID.kext
drwxr-xr-x 3 root wheel 96B 12 19 2014 Soundflower.kext
drwxr-xr-x 3 root wheel 96B 5 16 2014 TelestreamAudio.kext
drwxr-xr-x 3 root wheel 96B 8 14 2013 hp_io_enabler_compound.kext
drwxr-xr-x 3 root wheel 96B 5 3 2018 intelhaxm.kext
drwxr-xr-x 3 root wheel 96B 1 18 2015 tap.kext
drwxr-xr-x 3 root wheel 96B 1 18 2015 tun.kext
# Soundflower所在路径
/Library/Extensions/Soundflower.kext
# 但是这个路径也有
/Library/StagedExtensions/Library/Extensions/Soundflower.kext
不过我对比StagedExtensions和Extensions中的Soundflower,发现是一样的
sudo diff /Library/StagedExtensions/Library/Extensions/Soundflower.kext/Contents/MacOS/Soundflower /Library/Extensions/Soundflower.kext/Contents/MacOS/Soundflower
StagedExtensions中的据说是在用户允许之前临时存放的,但不知道为什么允许之后却没有删除:可以看这里。
更神奇的是,Loopback在这些文件夹中都找不到,但它却可以像Soundflower一样作为声卡设备出现在系统声卡设备列表里,这个是我搞不懂的,目前还不知道它的原理,估计还是像系统的某个地方添加了扩展
目前我所知道的是,Loopback里添加的设备列表,是存在这里的
~/Library/Application Support/Loopback/Devices.plist
但是说实话,这些软件自带的音频驱动,有时候也是有问题,还是不如Loopback好用,可能人家是收费的原因吧!