当前位置: 首页 > 知识库问答 >
问题:

如何用Java或C监控/采样输出音频?

松德曜
2023-03-14

最近,我一直在尝试对我在电脑上播放的音频进行实时可视化(通过任何任意程序,如Spotify),但我一直在使用SoundFlower将输出音频导入到一个假线路。

我想知道的是,是否有一种C / C或Java固有的方法,可以让我捕获发送到计算机(我使用的是Mac)行的任何音频,其方式类似于我如何捕获其中的行(即不断填充PCM数据的示例缓冲区)。

除了读取line out数据,我不想模仿SoundFlower的其他功能。

共有1个答案

常自怡
2023-03-14

我建议看一下WavTap的源代码,它是SoundFlower的一个分支,只专注于捕获系统的默认音频输出。

SoundFlower和WavTap都是通过安装一个内核扩展来工作的,这就增加了一个额外的音频设备,音频可以路由到这个设备。然后他们从这个设备中获取音频。WavTap使其成为启动时的默认设备,以便自动捕获系统的整体输出,而无需用户明确设置路由。

我相信WavTap代码是麻省理工学院许可的,系统扩展代码是很好的抽象,所以你应该能够适应自己的项目。

为了更好地理解它是如何工作的,OS X和iOS内核编程一书解释了第12章中的一些技术,以及示例音频设备和引擎的可下载代码。

 类似资料:
  • 我使用的是libav 9.6,通过自制安装。 尽管在命令行输出的stdout中显示了采样率,但选项根本不会显示音频文件的采样率信息。 下面是BASH终端输出: 我向libav提交了一张票,但我只是好奇是否有任何其他方法可以从libav探测UTIL中提取采样率。我很感激事先的回答。 PS:在这种情况下,ffmpeg(ffprobe)的上游项目也会遇到同样的问题。

  • 问题内容: 嗨,我需要将wav音频文件的采样率从44.1kHz下采样到8kHz。我必须使用字节数组手动完成所有工作…这是出于学术目的。 我目前正在使用2个类(接收器和源)来弹出和推送字节数组。一切顺利,直到到达需要使用线性插值对数据块进行下采样的部分为止。 由于我是从44100降采样到8000 Hz,因此我该如何插入一个包含约128000000字节的字节数组?现在,我弹出5、6或7个字节,具体取决

  • 问题内容: 我想知道是否有一个库或某种东西可以在给定的采样率(20–20,000 Hz)下播放声音。实际上,我发现了一些东西,但是我不知道如何使它起作用! 问题答案: 这是一个完整的示例,不需要任何外部库: 来源:http : //www.rgagnon.com/javadetails/java-0499.html

  • 问题描述 我想要通过GNUradio和PlutoSDR实现FM自动扫频接收,接收信号经过threadhold已经变成了只有0和1的float类型输出,我想把float转成变量以便和其他变量做逻辑运算。但是gnuradio没有相关模块可以实现这个功能。 问题出现的平台版本及自己尝试过哪些方法 Ubuntu 22.10 GNUradio 3.3.8 Python3 我尝试通过python block

  • 问题内容: 我需要编写一个简单的基于终端的程序, 使用包裹在BufferedReader中的FileReader从文件中读取一些文本。 将文本打印到控制台,用户应该可以对其进行修改。 输入Enter + S后,程序应读取修改后的文本并将其保存回原始文件。 总而言之,这个想法是为没有GUI的类Unix环境编写一个文本编辑器。 但是,我在步骤2和3中遇到问题。 System.out打印的所有文本都是不