使用 PortAudio / PyAudio 从输入设备获取振幅范围
Get amplitude range from input device using PortAudio / PyAudio
我正在使用 PyAudio (which is just a Python wrapper for PortAudio) 来记录用户的听觉反应;我想创建一个小校准动画,其中包含一个点,该点会根据给定采样周期内的峰值振幅动态增长和收缩。
问题是,在我知道任何给定设备的最大振幅可能是多少之前,我无法将振幅有意义地转换为像素(PortAudio 的 API 只是将其描述为无符号长整数,据我所知, 只是输入设备测量的未修改幅度,其值的范围基本上会根据齿轮的质量而变化)。
有没有办法让 PortAudio 报告输入设备可能的最大幅度值(大概是在流初始化后)?
您可以从输入设备接收到的最小值和最大值取决于所使用的样本格式,通常是有符号整数。例如,如果您使用 pyaudio.paInt16
格式,则样本是 16 位整数,因此它们的范围是从 -32,768 到 32,767。没有 "unsigned long" 示例格式。
实际范围输入值将取决于控制任何音频之外的许多因素API。诸如您使用的麦克风、人们说话的音量以及麦克风和 ADC 之间可能将模拟音频转换为数字音频的任何放大器或其他设备。您可能需要校准您的设置,以便它使用数字样本范围的有用部分。
我正在使用 PyAudio (which is just a Python wrapper for PortAudio) 来记录用户的听觉反应;我想创建一个小校准动画,其中包含一个点,该点会根据给定采样周期内的峰值振幅动态增长和收缩。
问题是,在我知道任何给定设备的最大振幅可能是多少之前,我无法将振幅有意义地转换为像素(PortAudio 的 API 只是将其描述为无符号长整数,据我所知, 只是输入设备测量的未修改幅度,其值的范围基本上会根据齿轮的质量而变化)。
有没有办法让 PortAudio 报告输入设备可能的最大幅度值(大概是在流初始化后)?
您可以从输入设备接收到的最小值和最大值取决于所使用的样本格式,通常是有符号整数。例如,如果您使用 pyaudio.paInt16
格式,则样本是 16 位整数,因此它们的范围是从 -32,768 到 32,767。没有 "unsigned long" 示例格式。
实际范围输入值将取决于控制任何音频之外的许多因素API。诸如您使用的麦克风、人们说话的音量以及麦克风和 ADC 之间可能将模拟音频转换为数字音频的任何放大器或其他设备。您可能需要校准您的设置,以便它使用数字样本范围的有用部分。