我计划用Python实现一个类似DSP的信号处理器。它应该通过ALSA捕获音频片段,对其进行处理,然后通过ALSA播放。在

为了开始工作,我写了以下代码(非常简单)。在import alsaaudio

inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NORMAL)

inp.setchannels(1)

inp.setrate(96000)

inp.setformat(alsaaudio.PCM_FORMAT_U32_LE)

inp.setperiodsize(1920)

outp = alsaaudio.PCM(alsaaudio.PCM_PLAYBACK, alsaaudio.PCM_NORMAL)

outp.setchannels(1)

outp.setrate(96000)

outp.setformat(alsaaudio.PCM_FORMAT_U32_LE)

outp.setperiodsize(1920)

while True:

l, data = inp.read()

# TODO: Perform some processing.

outp.write(data)

问题是,音频“结巴”而不是无间隙。我试着用PCM模式做实验,把它设为PCM_ASYNC或PCM_NONBLOCK,但问题仍然存在。我认为问题是“两个后续调用之间”的样本输入读取()“丢失。在

有没有一种方法可以在Python中“连续地”捕获音频(最好不需要太“特定的”/“非标准”的库)?我希望信号总是“在后台”被捕获到某个缓冲区,从中我可以读取一些“瞬时状态”,而音频则进一步被捕获到缓冲区中,即使是在我执行读取操作的时候。我怎样才能做到这一点?在

即使我使用一个专用的进程/线程来捕获音频,这个进程/线程也至少必须(1)从源读取音频,(2)然后将其放入某个缓冲区(然后“信号处理”进程/线程从中读取)。因此,这两个操作在时间上仍然是连续的,因此样本将丢失。我如何避免这种情况?在

非常感谢你的建议!在

编辑2:现在我让它运行了。在

^{pr2}$

然而,当我甚至对音频数据进行最细微的修改时(例如,注释该行),我会在输出处得到大量噪声和极端失真。似乎我没有正确处理PCM数据。奇怪的是,“液位计”等的输出似乎都有道理。但是,当我稍微偏移它时,输出是完全失真的(但是是连续的)。在

编辑3:我刚发现我的算法(不包括在这里)在我将它们应用于wave文件时起作用。因此,问题实际上似乎归结为ALSA API。在

编辑4:我终于找到了问题。他们是下面的。在

1st-在请求PCM_U32_LE格式时,ALSA悄悄地“退回”到PCM_U8_LE格式,因此我假设每个样本的宽度为4字节,从而错误地解释了数据。当我要求PCM格式时,它能工作。在

第二个-ALSA输出似乎期望以字节为单位的周期大小,尽管它们在规范中明确指出,它应该以帧的形式出现。因此,如果使用32位采样深度,则必须将周期大小设置为输出的四倍。在

第三,即使在Python中(这里有一个“全局解释器锁”),进程也比线程慢。通过更改为线程可以大大降低延迟,因为I/O线程基本上不做任何计算密集型的操作。在

python声音捕获_在Python中实现实时信号处理如何连续捕获音频?相关推荐

  1. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  3. python selenium 下拉列表_从下拉列表中选择python selenium选项

    我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...

  4. python 语料标注_在python中怎么标记文本?

    要运行下面的python程序,必须在系统中安装(NLTK)自然语言工具包. NLTK模块是一个庞大的工具包,旨在帮助您使用整个自然语言处理(NLP)方法. 要安装NLTK,请在终端中运行以下命令.su ...

  5. python pipeline框架_介绍Python的Django框架中的静态资源管理器django-pipeline

    django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 django-staticfiles 的collectstatic 命令,在开发 ...

  6. python中立方表示_在Python中表示一个对象的方法

    在 Python 中一切都是对象.如果要在 Python 中表示一个对象,除了定义 class 外还有哪些方式呢?我们今天就来盘点一下. 0x00 dict 字典或映射存储 KV 键值对,它对查找.插 ...

  7. python临床数据_从临床试验中获取数据

    我正在开发一个小Python函数来从clinicalTrials.gov中获取数据.从每个研究记录中,我想从中找出研究的目标条件.例如,对于this研究记录,我需要以下内容:conditions = ...

  8. python注入进程_向进程中注入Python代码

    我想把Python代码注入到一个进程中,当它注入时,它似乎会使我的进程崩溃.我没有在我自己的程序中得到任何错误,但目标进程停止工作.被调用的非托管api没有给我任何错误,并且似乎已经正确地执行了它们的 ...

  9. python创建矩阵_在Python中创建矩阵的Python程序

    python创建矩阵 There is no specific data type in Python to create a matrix, we can use list of list to c ...

最新文章

  1. 【LeetCode】0830.较大分组的位置
  2. synchronized(this)用法
  3. Java黑皮书课后题第5章:*5.31(金融应用:计算CD价值)假设你用10 000美元投资一张CD,年利率为5.75%。编写程序,提示由用户输入一个金额数、年获利率、月份数,然后显示一个表格
  4. AS报Failed to resolve: junit:junit:4.12错误正确的解决方法
  5. 【Unity】12.2 导航网格寻路简单示例
  6. MBP清除NVRAM和PRAM
  7. HTML5 之 Link 标签
  8. mercury已断开服务器无响应,Mercury水星无线路由器无法上网解决办法 | 192路由网...
  9. 【分享】品牌平面广告创意过程与思维技巧
  10. 使用二维码——第三方库ZBar和libqrencode的使用
  11. SpringBoot海景房出租管理系统+代码讲解
  12. C++之AStar寻路算法
  13. 游戏体验之穿越火线手游
  14. c语言中转义字符efg,C语言试题.docx
  15. pcie扰码的作用_分享 扰码的作用
  16. 身体指数bmi流程图_BMI指数事关重大,你家娃合不合格赶紧来对表查!
  17. 百度绿洲新一代区块链内测开放
  18. 75.功能测试中重复测试很多,你怎么看待这个问题?
  19. 毕设一:老年人摔倒检测及报警装置
  20. “鲁迅说过的话”检索系统上线就查询崩溃

热门文章

  1. C语言课后习题(13)
  2. Tensorlfow——变量
  3. linux 动态库系统目录,Linux共享库.so文件的命名和动态链接
  4. 中兴服务器raid配置_HP服务器RAID配置
  5. 资源放送丨《MySQL故障诊断常用方法手册》PPT视频
  6. 实战分享:activemq 在灾备双活建设中的研究
  7. 要想下班早,微服务架构少不了
  8. 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
  9. 【新春特辑】发压岁钱、看贺岁片、AI写春联……华为云社区给大家拜年了
  10. 实践案例丨GaussDB网络重传/丢包问题定位总结