首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >立体声音频文件的程序组合分析-是低音平移到一个频道?

立体声音频文件的程序组合分析-是低音平移到一个频道?
EN

Stack Overflow用户
提问于 2014-02-13 17:48:58
回答 1查看 294关注 0票数 0

我想分析我的音乐收集,这是所有的CD音频数据(立体声16位PCM,44.1kHz)。我想要做的是通过编程确定是否低音是混合(平移)到一个频道。理想情况下,我希望能够运行这样的程序

代码语言:javascript
复制
mono-bass-checker music.wav

并让它输出像“低音不是平底”或“低音主要混合到0频道”。

我对此有一个初步的开始,在伪代码中如下所示:

代码语言:javascript
复制
binsize = 2^N # define a window or FFT bin as a power of 2
while not end of audio file:
    read binsize samples from audio file
    de-interleave channels into two separate arrays
    chan0_fft_result = fft on channel 0 array
    chan1_fft_result = fft on channel 1 array
    for each index i in (number of items in chanX_fft_result/2):
        freqency_bin = i * 44100 / binsize
        # define bass as below 150 Hz (and above 30 Hz, since I can't hear it)
        if frequency_bin > 150 or frequency_bin < 30 ignore
        magnitude = sqrt(chanX_fft_result[i].real^2 + chanX_fft_result[i].complex^2)

我不太确定从这里往哪里走。我读过一些概念,但对我来说还是太模糊了:

  • 窗口函数我目前没有使用它,只是天真地从0到1024、1025到2048等音频文件中读取(例如,使用binsize=1024)。这对我有用吗?如果是的话,如何将其集成到程序中?
  • 量值的正常化和/或缩放。很多人这样做是为了制作漂亮的平面图,但在我的情况下,我需要这样做吗?我知道人类的听觉大概是在一个对数尺度上工作的,所以也许我需要用某种方式去过滤掉我根本听不到的东西。像A加权之类的东西在这里有关系吗?
  • 二进制码。我知道一个更大的垃圾箱能让我有更多的频率.但在这种情况下,我无法判断这是否有帮助或伤害。

我可以用这样的sox制作一首“低音歌曲”:

代码语言:javascript
复制
sox -t null /dev/null --encoding signed-integer --bits 16 --rate 44100 --channels 1 sine40hz_mono.wav synth 5.0 sine 40.0
sox -t null /dev/null --encoding signed-integer --bits 16 --rate 44100 --channels 1 sine329hz_mono.wav synth 5.0 sine 329.6
sox -M sine40hz_mono.wav sine329hz_mono.wav sine_merged.wav

在生成的"sine_merged.wav“文件中,一个通道是纯低音(40 Hz),另一个是非低音(329 Hz)。当我计算该文件的每个频道的低音频率的大小时,我确实看到了一个显著的差异。但奇怪的是,329赫兹通道的震级为非零,低于150赫兹。我希望是零。

即使这样,对于这个微不足道的sox生成文件,我也不知道如何解释我正在生成的数据。显然,我不知道如何概括到我的实际音乐收藏。

FWIW,我试图使用C中的libsndfile和fftw3来实现这一点,基于其他帖子中的帮助:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-14 01:24:13

不使用窗口函数(与使用矩形窗口相同)会将一些高频内容(任何在FFT长度中不完全周期性的内容)溅到FFT结果的所有其他频率桶中,包括低频回收箱。(有时这被称为光谱“泄漏”。)

要最小化这一点,请尝试应用一个窗口函数(von Hann等)。在FFT之前,预期要使用一定的阈值级别,而不是期望在任何垃圾箱中的内容为零。

还要注意的是,来自许多乐器的低音音符可以产生一些非常强大的高频信号或谐波,它们会出现在快速傅立叶变换( FFT )的上层回收箱中,所以你不能排除很强的低音混音,不存在大量的高频内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21761741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档