Mac/OSX 系统如何采集扬声器(代码实现 附源码)

本文介绍了在Mac系统中,由于版权问题无法直接通过API采集扬声器音量,但可以使用BlackHole插件作为替代方案。文章详细讲解了如何安装BlackHole,创建多输出设备,并提供了使用RtAudio库进行音频采集的代码实现,特别指出在Mac下采集扬声器需以输入设备方式进行。
摘要由CSDN通过智能技术生成

总所周知由于版权问题,mac系统是无法通过api采集扬声器的音量的,一些录屏软件大多采用soundflower,lookloop等插件来实现扬声器的采集。soundflower这种免费的插件已经没人维护了,最新的M1 已经无法使用了。

这里推荐一个免费的支持M1架构的插件blackhole,操作与soundflower类似,创建一个多输出设备,将录制的扬声器设置为该多输出设备,看起来像这样:

在我们使用obs,系统自带的录屏软件时就可以选择该输出设备作为扬声器采集从而实现扬声器音量采集。 

如果我们想自己开发软件实现采集该如何实现呢,笔者开始在百度 google一顿乱搜,实在没找到,只能开始自己研究,这里先推荐一款跨平台音频采集开源库RtAudio ,使用非常简单:

    RtAudio::StreamParameters parameters;
    parameters.deviceId = devId;
    parameters.nChannels = m_format.channelCount();
    parameters.firstChannel = 0;
    unsigned int sampleRate = m_format.sampleRate();
    unsigned int bufferFrames = 1024;

    try {
        adc.openStream(NULL, &parameters, RTAUDIO_SINT16, sampleRate, &bufferFrames,
                       &record, this, NULL, AudioDevideErrorCallback);
        adc.startStream();

        stateChanged(AUDIO_DEVICE_STATE_OK);
    } catch (RtAudioError &e) {
        e.printMessage();
        stateChanged(AUDIO_DEVICE_STATE_ERROR);
        qDebug("Speaker audio device open error, code=%d, err=%s, channelcount = %d", (int)e.getType(),
               e.getMessage().c_str(), parameters.nChannels);
        return;
    }

下面开始本章重头戏:

首先我们现在blackhole,记住要下载16ch的,笔者开始下载的2ch的版本,折腾了好几天没有成功,都开始怀疑人生了。

下载后发现blackhole其实跟soundflower一样,是一个驱动库, 如果你直接下载的安装版本,直接安装就好。但是作为一个code多年的人,你可能不局限于此,比如你想免去用户的操作,在自己的软件包中带上blackhole实现程序自动安装,要实现这个也不难,首先下载blackhole安装后,到安装目录把framework拷贝出来

1. 编写安装脚本,我们将该脚本命名为load,内容如下:

echo "load BlackHole"
cd "`dirname "$0"`"
mkdir -p /Library/Audio/Plug-Ins/HAL
cp -rv BlackHole16ch.driver /Library/Audio/Plug-Ins/HAL
chown -R root:wheel /Library/Audio/Plug-Ins/HAL

2. 编写卸载脚本,命名为unload,内容如下:

rm -r /Library/Audio/Plug-Ins/HAL

 

3. 代码中执行脚本

这里我们需要使用oc 代码来执行脚本

LoadStatus BlackHoleLoader::runScriptFile(const QString &fileName)
{
    NSString* scriptPath = [NSString stringWithUTF8String: fileName.toUtf8().data()];

    Author
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值