2

我是音频处理和实时流式处理数据的新手。我想做的是:

  • 听内置麦克风
  • 将样本分块成 0.1 秒的块
  • 通过短时傅里叶变换 (STFT) 将块转换为周期图
  • 应用一些简单的功能
  • 通过逆 STFT (ISTFT) 转换回时间序列数据
  • 在耳机上播放新音频

我一直在寻找"real time spectrograms"给我如何处理数据的指南,但没有骰子。然而,我发现了一些有趣的包,包括PortAudio.jl,DSP.jlMusicProcessing.jl.

感觉就像我需要使用多处理技术将传入的数据存储到合适的块中,同时将一些功能应用于前一个块,同时还播放另一个先前处理的块。所有这一切都让人感觉过于复杂,并且让我暂时无法接触这个项目。

任何帮助将不胜感激,谢谢。

4

1 回答 1

1

一如既往地从您真正需要的简单版本开始...暂时忽略从麦克风中提取音频,而是编写一些代码来合成已知频率的正弦曲线并将其用作您的输入音频,或读入音频来自 wav 文件 - 与麦克风音频不同,这里的好处是它已知且可重现

这篇文章展示了如何使用你提到的一些库 http://www.seaandsailor.com/audiosp_julia.html

你说的是“实时频谱图”......这只是重复处理一个音频窗口,所以让我们最初也简化一下......一旦您能够读取 wav 音频文件,然后将其发送到 FFT 调用中将在其频域表示中返回该音频曲线...正如您正确说明此频域数据然后可以发送到反向 FFT 调用中以返回原始时域音频曲线

在您完成工作后,将其包装在一个呼叫中,该呼叫提供音频样本的滑动窗口,为您提供能够解析来自麦克风的传入音频的“实时”优势......请记住,您始终使用您输入 FFT 和 IFFT 调用的样本窗口中有 2 个音频样本......假设您的窗口是 16384 个样本......您的 julia 服务器将需要处理多个需求(1)从中提取下一个样本缓冲区您的麦克风馈送 (2) 将一个样本窗口发送到您的 FFT 和 IFFT 调用中......请注意,滑动窗口中的音频样本数量通常比传入麦克风缓冲区的大小要宽 - 因此滑动的概念窗户 ...随着时间的推移,将您的麦克风缓冲区添加到该窗口的前面,并从该样本窗口的尾部移除相同数量的样本

于 2018-11-24T01:06:20.453 回答