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

时间:2017-10-05 18:26:49

标签: python audio pyaudio

应评估和实现的内容:

我试图通过硬盘和特别是软件以最小的影响来录制音频数据。在使用Adobe Audition一段时间之后,我偶然发现了PyAudio并且受到了好奇心的驱使以及刷新我的Python知识的可能性。 由于上面标题中显示的事实可能已经放弃,我比较了两个波形文件(实际上是它们的部分)的样本值,并且必须发现两个程序产生不同的输出。 因为我绝对是在我的智慧结束,我希望找到一个可以帮助我的人。

到目前为止所做的工作:

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

  • 通过打开“Prefrences / Audio Hardware”并选择音频接口,48 kHz的采样率和250 ms的延迟(此值已在过去几年中被检查为第二低),准备录音进行录音我可以在没有得到丢失样品的警告的情况下得到 - 如果我理解正确的目的,我只需担心失去样品,因为监测不是问题。
  • 打开一个包含一个通道,采样率为48 kHz,位深度为24位的新文件。
  • 启动Python代码(如下所示)并导致倒计时用于切换到Audition并在Python启动之前10秒开始录制。)
  • 等到Python打印出“程序结束”消息。
  • 停止并保存Audition录制的数据。

现在必须检查数据:

  • 两个文件(分别由Audition和Python录制的文件)在Audition(Multitrack会话)中打开。当Audition手动启动和终止时,两个文件的开始和结束时间完全不同。然后它们在视觉上对齐,以便可以剪切并保存小的提取物(在视觉上 - 通过波形形状 - 包含相同的数据)。
  • 编写了一个Python程序,分别使用默认波形模块和matplotlib.pyplot打开,读取和显示样本值(图表如下所示)。
  • 显示两种波形和一个大问号的差异......

有没有人知道为什么Audition会显示不同的样本值,特别是哪里有错误(有没有?)隐藏?

一些(有趣的)观察

a)当调用pyaudio.PyAudio()。get_default_input_device_info()方法时,默认采样率列为44,1 kHz,即使默认的M-Track采样率据说其规格为48 kHz(实际上是Audition)如果选择了另一个速率,则通过重新采样输入数据来识别48 kHz。任何想法为什么以及如何改变这个?

b)使用PyAudio所覆盖的序列的开头对齐这两个文件,并检查它们是否仍然处于“同相”状态,结果显示没有 - PyAudio更短并且似乎丢失了样本(即使没有引发异常并且“溢出时的异常”参数为“True”)

c)在流打开方法中使用“frames_per_buffer”关键字我无法对齐这两个文件,不知道Python从何处获取数据。

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

官方规格M-Track:

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

规格计算机和软件:

Windows 8.1 I5-3230M @ 2,6 GHz 8 GB RAM 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 image 1

图2:第二次比较试听 - Pyaudio image 2

0 个答案:

没有答案
相关问题