Python PyAudio和Audition CS6记录不同的样本值

Python PyAudio和Audition CS6记录不同的样本值,python,audio,pyaudio,Python,Audio,Pyaudio,应评估和实现的内容: 我试着用最少的硬软件影响来记录音频数据。在使用Adobe Audition一段时间后,我偶然发现了PyAudio,出于好奇心以及刷新Python知识的可能性。 正如上面标题中显示的事实可能已经透露的那样,我比较了两个wave文件(实际上是其中的部分)的样本值,并发现两个程序产生不同的输出。 因为我肯定是束手无策了,我真的希望能找到能帮助我的人 到目前为止所做的工作: M-Audio“M-Track双通道USB接口”已用于同时使用Audition CS6和PyAudio录制音

应评估和实现的内容:

我试着用最少的硬软件影响来记录音频数据。在使用Adobe Audition一段时间后,我偶然发现了PyAudio,出于好奇心以及刷新Python知识的可能性。 正如上面标题中显示的事实可能已经透露的那样,我比较了两个wave文件(实际上是其中的部分)的样本值,并发现两个程序产生不同的输出。 因为我肯定是束手无策了,我真的希望能找到能帮助我的人

到目前为止所做的工作:

M-Audio“M-Track双通道USB接口”已用于同时使用Audition CS6和PyAudio录制音频数据,因为以下步骤按给定顺序执行

  • 通过打开“优先/音频硬件”并选择音频接口、48 kHz的采样率和250 ms的延迟时间,为录音做好准备(在过去几年中,该值被认为是我在没有收到丢失样本警告的情况下可以得到的第二低值——如果我正确理解了目的,我只需担心丢失样本,因为监测不是问题)
  • 打开一个具有一个通道、48 kHz采样率和24位深度的新文件
  • Python代码(如下所示)被启动,并导致一个倒计时,用于切换到试听,并在Python启动其功能前10秒开始录制。)
  • 等待Python打印“程序结束”消息
  • 停止并保存试听记录的数据
现在必须检查数据:

  • 这两个文件(分别由Audition和Python录制)都在Audition(多轨会话)中打开。由于试听是手动开始和终止的,两个文件的开始和结束时间完全不同。然后对它们进行视觉对齐,以便可以剪切并保存小的提取(通过波形形状,视觉上包含相同的数据)
  • 编写了一个Python程序,分别使用默认的wave模块和matplotlib.pyplot打开、读取和显示示例值(下图所示)
  • 两种波形的差异和一个大问号被揭示
有人知道为什么试听会显示不同的样本值,特别是错误(有没有?)隐藏在哪里吗

一些(有趣的)观察结果

a) 调用pyaudio.pyaudio().get_default_input_device_info()方法时,默认采样率被列为44,1 kHz,即使默认M轨道采样率根据其规格被称为48 kHz(实际上,如果选择了另一个速率,试听会通过重新采样传入数据来识别48 kHz)。你知道为什么以及如何改变这一点吗

b) 使用PyAudio覆盖的序列的开头对齐两个文件,并检查它们是否在结尾处仍处于“同相”,则显示否–PyAudio较短并且似乎丢失了样本(即使未引发异常且“溢出时异常”参数为“True”)

c) 在streamopen方法中使用“frames\u per\u buffer”关键字,我无法对齐这两个文件,不知道Python从哪里获得数据

d) 使用“.get_default_input_device_info()”方法并尝试不同的采样率(22,05 k,44,1 k,48 k,192 k),我总是收到True作为输出

官方规范M-Track:

位深度=24位 采样率=48 kHz 通过卡侬输入 通过USB输出

计算机和软件规格:

Windows 8.1 I5-3230M@2,6 GHz 8GB内存 Python 3.4.2和PyAudio 0.2.11–32位 试听CS6版本5.0.2

Python代码

import pyaudio
import wave
import time

formate = pyaudio.paInt24
channels = 1
framerate = 48000
fileName = 'test ' + '.wav'
chunk = 6144
# output of stream.get_read_available() at different positions

p = pyaudio.PyAudio()

stream = p.open(format=formate,
                channels=channels,
                rate=framerate,
                input=True)
                #frames_per_buffer=chunk) # observation c

# COUNTDOWN
for n in range(0, 30):
    print(n)
    time.sleep(1)

# get data
sampleList = []

for i in range(0, 79): 
    data = stream.read(chunk, exception_on_overflow = True)
    sampleList.append(data)

print('end -', time.strftime('%d.%m.%Y %H:%M:%S', time.gmtime(time.time())))

stream.stop_stream()
stream.close()
p.terminate()

# produce file
file = wave.open(fileName, 'w')
file.setnchannels(channels)
file.setframerate(framerate)
file.setsampwidth(p.get_sample_size(formate))
file.writeframes(b''.join(sampleList))
file.close()
图1:第一次对比试听–PyAudio

图2:第二次对比试听-Pyaudio