tl; dr对于未来的读者,使用Java或C#无法(现在)录制实时音频.使用C++,因为它提供了大量的音频api.
我的目标是获得在Windows机器上播放的当前声音,并像图形音频可视化器一样分析声音(获得音量属性和Hz(基数和高音)).当我说当前声音时,我的意思是如果要播放Youtube视频或Spotify歌曲,这个程序会读取该音频输出.我无意播放声音,但实时捕捉它并将其可视化.
在尝试这样做时,我阅读了如何构建音频波形显示,并探讨了如何将音频文件转换为字节数组(一行).这没有用,因为它不会得到当前的声音.我还阅读了如何捕获音频,以及这个java访问声音教程,这些都没有回答我的问题,因为它们都需要加载歌曲文件.
我根本就不理解这一点.我完全无能为力,任何帮助都会受到赞赏.
编辑:我做了一些更多的环顾四周,这个来源的第二个答案让我得出结论:我可以找到所有的音频设备,看看哪一个产生声音.我不知道在那之后该怎么办.
编辑2(再次编辑):从实验和环顾四周,我在下面编写了这段代码.我认为这让我朝着我想要的方向前进,但我不知道如何完成它.
Mixer.Info[] mixers = AudioSystem.getMixerInfo();
for (Mixer.Info mixerInfo : mixers) {
Mixer mixer = AudioSystem.getMixer(mixerInfo);
try {
mixer.open();
Line.Info[] lines = mixer.getTargetLineInfo();
for (Line.Info linfo : lines) {
Line line = AudioSystem.getLine(linfo);
//here I'm opening the line, but I don't know how to grab data
line.open();
}
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我使用了这个来源:在混音器行中检查音频播放的级别 …
我一直在研究用于创建游戏的好工具,我遇到了 Monogame、Sharpx 和 XNA。我对每个问题都有一些疑问:
当我创建一个新的 Windows 项目(它宣传它使用 DirectX 12)时,代码模板如下所示:
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
Run Code Online (Sandbox Code Playgroud)我知道 Monogame 是 XNA 的重新实现,但“重新”部分在哪里?这段代码显示了使用 Microsoft 的 XNA 的 Monogame,甚至没有暗示 DirectX 12 的使用。
我觉得我对某些事情感到困惑并想要清楚。请记住,我对这些东西完全是个菜鸟,任何事情都有帮助!