首页 > 解决方案 > 如何分析扬声器音频输出以进行频率分析?蟒蛇 3.6

问题描述

Python 3.6 Ubuntu 18.04

使用 pyaudio 模块,我已经成功录制了从扬声器发出的音频,并且为了测试,我已经能够正确地将其保存到 WAV 文件中。这是一个更大的多线程应用程序的一部分,所以我很高兴看到协调按计划进行。不过,现在我想对数据进行一些音频分析,以收集音频中存在的主要频率。所以,我有几个问题,一个更笼统,因为我很好奇,另一个更具体到我的问题:

1.) 这是我用来捕获音频帧的代码片段:

    self.audio_stream = self.audio_stream_parent.open(
        format=AUDIO_FRAME_FORMAT,
        channels=AUDIO_FRAME_CHANNELS,
        rate=AUDIO_FRAME_RATE,
        input=True,
        frames_per_buffer=AUDIO_FRAME_SIZE_BYTES
    )
    ...
    while self.keep_audio_collection_thread_alive:
        audio_frame = self.audio_stream.read(AUDIO_FRAME_SIZE_BYTES)
        if self.collect_audio and audio_frame:
            self.audio_collected.put(audio_frame)

我的第一个问题是:audio_frame变量中代表了什么样的数据?我为每个读取操作返回一个 4096 字节的列表(即使AUDIO_FRAME_SIZE_BYTES设置为 1024),这实际上描述了什么?难道都是纯粹的音频数据,通道数和格式等东西需要以后再提供来重新解释?或者4096字节中是否包含类似的信息?

2.) 对此数据执行频率分析的最佳方法是什么?我看到很多关于对 WAV 文件内容执行 FFT 的最佳方法的信息,但我想实时执行此操作,或者接近它。我看不到同时打开一个 WAV 文件进行读写的方法,所以我基本上无法通过那里传递它。我可以对 中的原始数据执行此分析audio_frame吗?我想这就是为什么我问我的第一个问题,看看我是否能够遵循这个 SO 答案中的一般逻辑,而不必实际写入 WAV 文件。

先感谢您!

标签: pythonaudioaudio-analysis

解决方案


推荐阅读