如何实时处理音频流

2024-01-05

我有一个运行最新 jessie 的树莓派 3 的设置,其中安装了所有更新,其中我提供了一个 A2DP 蓝牙接收器,我可以在其中连接手机播放一些音乐。

通过pulseaudio,源(电话)被路由到alsa 输出(接收器)。这相当有效。

我现在想使用 python3.4 来分析音频流librosa https://github.com/librosa/librosa我发现了一个有希望的例子pyaudio https://people.csail.mit.edu/hubert/pyaudio/docs/#example-callback-mode-audio-i-o它被调整为使用脉冲音频输入(它神奇地工作,因为它是默认的)而不是 wavfile:

"""PyAudio Example: Play a wave file (callback version)."""

import pyaudio
import wave
import time
import sys
import numpy

# instantiate PyAudio (1)
p = pyaudio.PyAudio()

# define callback (2)
def callback(in_data, frame_count, time_info, status):
    # convert data to array
    data = numpy.fromstring(data, dtype=numpy.float32)
    # process data array using librosa
    # ...
    return (None, pyaudio.paContinue)

# open stream using callback (3)
stream = p.open(format=p.paFloat32,
                channels=1,
                rate=44100,
                input=True,
                output=False,
                frames_per_buffer=int(44100*10),
                stream_callback=callback)

# start the stream (4)
stream.start_stream()

# wait for stream to finish (5)
while stream.is_active():
    time.sleep(0.1)

# stop stream (6)
stream.stop_stream()
stream.close()
wf.close()

# close PyAudio (7)
p.terminate()

现在,虽然数据流原则上工作,但调用stream_callback 时存在延迟(缓冲区长度)。由于文档声明

请注意,PyAudio 在单独的线程中调用回调函数。

我假设在回调工作时,缓冲区不断填充主线程。当然,填充缓冲区会有一个初始延迟,之后我希望获得同步流。

我需要缓冲区中有较长的部分(请参阅frames_in_buffer),以便 librosa 能够正确执行分析。

这样的事怎么可能呢?这是树莓派 ARM 软件端口的限制吗?

我找到了其他答案,但是they https://stackoverflow.com/a/32161871/875020 use the https://stackoverflow.com/a/9235752/875020阻塞I/O https://stackoverflow.com/a/24985016/875020。我如何将其包装到一个线程中,以便 librosa 分析(可能需要一些时间)不会阻止缓冲区填充?

这个博客 http://bastibe.de/2012-11-02-real-time-signal-processing-in-python.html似乎与 cython 对抗性能问题,但我不认为延迟是性能问题。Or https://stackoverflow.com/a/41563752/875020 might it http://freshfoo.com/posts/pulseaudio_monitoring/?其他人似乎需要一些ALSA 调整 https://stackoverflow.com/a/39342170/875020但这在使用pulseaudio时会有帮助吗?

谢谢,任何意见表示赞赏!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实时处理音频流 的相关文章

  • 为什么我必须在 pybson (=bson, GitHub:py-bson) 之后安装 pymongo 才能成功导入 pybson?

    编辑 将问题放在网上很长时间后 我注意到这是一个衍生产品无法使用 pymongo 2 2 连接到 MongoDB 2 0 5 数据库 https stackoverflow com questions 10603754 cant conne
  • 如何使用BeautifulSoup查找所有下一个链接

    我目前正在通过预设一个名为 number of pages 的变量来抓取特定网站的所有页面 预设此变量一直有效 直到添加了我不知道的新页面 例如 下面的代码适用于 3 个页面 但网站现在有 4 个页面 base url https secu
  • 将 pandas DataFrame 中的数字转换为特定字符串格式

    我需要运行一个可以通过循环完成的任务 但我想有一种更有效 更漂亮的方法来做到这一点 我有一个DataFrame它有一个整数列 我想将其转换为 4 位字符串表示形式 也就是说 3 应转换为 0003 234 应转换为 0234 我正在寻找一种
  • Python3.5 BeautifulSoup4从div中的'p'获取文本

    我试图从 div 类 caselawcontent searchable content 中提取所有文本 此代码仅打印 HTML 不打印网页中的文本 我缺少什么来获取文本 以下链接位于 finteredcasesdoc text 文件中 h
  • 编程式 Google 登录/注销用户 1,然后登录用户 2 (Python)

    我正在开展一个 DIY 项目 为我的家庭中的多个成员检索 Google 位置历史记录 根据 StackOverflow 成员的指示 t m 亚当 https stackoverflow com users 7811673 t m adam
  • 如何在一段时间后停止执行?

    我想在一定时间后停止执行 Dash 程序 当我关闭浏览器窗口时效果更好 尽管我怀疑这是否可能 有没有办法通过python中断它 我已经尝试过放一个 sys exit 打电话后app run server 虽然据我了解app run serv
  • 查找两个复杂字典之间的集合差异

    我有两个结构如下的字典 a dict1 a 1 2 3 4 b 1 2 5 6 b dict2 a 1 2 5 6 b 1 2 7 8 我需要找到字典中每个键之间的设置差异 即 dict1 a dict2 a 应该返回 3 4 任何想法都值
  • FastAPI/Pydantic 接受任意 post 请求正文吗?

    我想创建一个 FastAPI 端点 它只接受任意的 post 请求正文并返回它 如果我发送 foo bar 我想得到 foo bar 后退 但我也希望能够发送 foo1 bar1 foo2 bar2 并把它拿回来 我试过 from fast
  • 互补DNA序列

    我在编写这个循环时遇到问题 它似乎在第二个序列之后停止了 我想返回给定 DNA 序列的互补 DNA 序列 例如 AGATTC gt TCTAAG 其中 A T 和 C G def get complementary sequence dna
  • 我无法使用 Python 和 Facebook Marketing API 获取所有 Facebook 营销活动的统计信息

    我正在尝试检索以下指标 date campaign name impressions clicks spend 在我的 Facebook 帐户中的所有活动中 但显然我编写的脚本仅返回某些活动的统计数据 而不是全部 它仅返回大多数营销活动的营
  • 初始化 dask 分布式工作线程的状态

    我正在尝试做类似的事情 resource MyResource def fn x something dosemthing x resource return something client Client results client m
  • Python 类型提示:typing.Mapping 与typing.Dict

    我正在开发一个 python 项目 我们使用typing整个模块类型提示 看来我们用的是typing Dict and typing Mapping几乎可以互换 有理由选择其中一种而不是另一种吗 我自己设法回答了这个问题 typing Di
  • 如何向 scikit-learn KD 树添加/删除数据点?

    我想知道是否可以在创建 scikit learn KDTree 实例后添加或删除数据点 例如 from sklearn neighbors import KDTree import numpy as np X np array 1 1 2
  • shap.TreeExplainer 和 shap.Explainer 条形图之间的区别

    对于下面给出的代码 我得到了不同的条形图shap values 在此示例中 我的数据集为 1000train样本有 9 个类别和 500 个test样品 然后 我使用随机森林作为分类器并生成模型 当我开始生成shap条形图在这两种情况下得到
  • neo4j - python 驱动程序,服务不可用

    我对 neo4j 非常陌生 我正在尝试建立从 python3 6 到 neo4j 的连接 我已经安装了驱动程序 并且刚刚开始执行第一步 导入请求 导入操作系统 导入时间 导入urllib 从 neo4j v1 导入 GraphDatabas
  • Windows 操作系统中 ST_INO(os.stat() 输出)的含义

    谁能告诉我这个值的含义是什么st ino是跑步时os stat 在 Windows 上 Python 3 5 3 在早期的 Python 版本中 它包含虚拟值 但最近发生了变化 我找不到它是如何计算 生成的 我怀疑它因文件系统 NTFS F
  • Python 3 列表列表中的列表理解以转换类型

    考虑以下列表 list1 1 1 1 2 1 3 2 1 2 2 2 3 要理解字符串列表并将其转换为浮点数 可以使用 list1 0 float i for i in list1 0 但我尝试理解浮点数列表的列表并没有完全起作用 list
  • 占据花车的地板

    我发现了两种在 Python 中占据发言权的方法 3 1415 1 and import math math floor 3 1415 第一种方法的问题是它返回一个浮点数 即3 0 第二种方法感觉很笨拙而且太长 在 Python 中是否有替
  • Spacy 实体规则不适用于基数(社会安全号码)

    我已使用实体规则为社会保障号添加新标签 即使设置了 overwrite ents true 但它仍然无法识别 我验证了正则表达式是正确的 不知道我还需要做什么 我之前尝试过 ner 但结果相同 text My name is yuyyvb
  • 哪种方式最适合Python工厂注册?

    这是一个关于这些方法中哪一种被认为是最有效的问题 Pythonic 我不是在寻找个人意见 而是在寻找惯用的观点 我的背景不是Python 所以这会对我有帮助 我正在开发一个可扩展的 Python 3 项目 这个想法类似于工厂模式 只不过它是

随机推荐

  • 如何在 Service Worker 中动态加载 Javascript 文件?

    我无法使用任何涉及创建
  • 为列表视图列设置不同的对齐方式

    我在绘制列左对齐或居中对齐的列表视图时遇到问题 我查看了在这里或其他论坛上找到的一些解决方案 但它们似乎都适用所有列 https stackoverflow com questions 4883182 content alignment f
  • 简化 vb.net 中的列表初始化

    有哪些选项可以简化List初始化以消除重复New MyObject With以及参数名称 例如Value1 我需要创建 50 个对象的列表 因此有很多重复的 可能不必要的代码 我使用最新的 Visual Studio 2019 16 2 3
  • 事件时间序列的数据库建议

    对于我的一个项目 我必须将大量事件集合输入数据库以供以后处理 并且我正在尝试确定哪个 DBMS 最适合我的目的 I have 目前大约有 400 000 000 个离散事件 数据库中将存储约 600 GB 的数据 这些事件有多种形式 但我估
  • 在c中创建我自己的memset函数

    这是原型 void memset void s int c size t n 首先 我不确定是否必须返回某些内容 因为当我使用 memset 时 我会这样做 memset str a 5 代替 str memset str a 5 这是我的
  • saveRDS 问题

    我在重新保存对象时表现出了 saveRDS 的奇怪行为 这是一个可重现的示例 df lt data frame a c 1 2 b c 3 4 saveRDS df test rds readRdsFile lt readRDS test
  • import React 和 import { Component } 语法之间的区别[重复]

    这个问题在这里已经有答案了 假设我们正在使用 React 和 ES6 我们将 React 和 Component 导入为 import React from react import Component from react 为什么语法不同
  • 使用ansible添加交换内存

    我正在开发一个项目 其中需要在我的服务器上拥有交换内存 以避免某些 python 长时间运行的进程耗尽内存 并第一次意识到我的 ubuntu vagrant box 和 AWS ubuntu 实例还没有交换内存设置 In https git
  • 如何解决语法错误:await 仅在异步函数中有效?

    我编写了一段代码 使用 Promise 从异步调用返回一些数据 当我尝试执行时 我得到 语法错误等待仅在异步函数中有效 并且我还得到无法代理应用程序请求 错误 连接ECONNREFUSED 我不确定为什么会出现这些错误 我尝试在函数调用之前
  • 显示核心数据:如果属性具有相同的名称,则显示一次

    我查看了许多谓词问题 阅读了文档 但似乎没有什么可以回答我的问题 我有一个名为的核心数据实体材料我有属性category 子类别 and 描述 我有三个UITableViewControllers在每个我想使用谓词来显示如下 TableVi
  • 从 Web API .NET Core get 操作返回字符串

    我有一个 get 操作 我想从中返回一个字符串 一个例子是 000875 当我从完整的 NET Web API 控制器中的控制器返回此字符串时 它的格式如下 Property 000875 当我在转换后的 NET Core 控制器中返回字符
  • webpack 对 *.js 的意外修改

    我是 webpack 和类似工具的新手 我想重新组织我的项目 目前我所有的 JS 代码都位于 App js 中 因此 在将其拆分为模块并进行改进之前 我只想设置复制它的工作流程 这是 webpack config js 的内容 const
  • 将ASP.Net Core 2.1preview2网站发布到本地IIS MSB3030 *.PrecompiledViews.dll

    Update 1 根据 Priyesh Kumar 的反馈 我使用了网站根文件夹中的以下命令 网站带有 csproj 的命令 这有效 然后我将 win10 x64 内容文件复制到 c www sigex com 中 dotnet publi
  • 在多阶段 docker 构建中使用变量

    我想在多阶段 docker 构建中使用变量 如同这个问题 https stackoverflow com questions 52904847 在撰写本文时尚未得到答复 我的具体用例是在builder阶段并保存目录 这是在变量中完成的 并在
  • React:创建 onClick HOC 而不使用额外的

    我想避免手动添加onClick我的自定义组件的属性 为此 我考虑了一个名为的高阶组件WithClick这将用集成的组件包裹我的组件onClick财产 我面临的问题是 为了包装它 我必须使用额外的 div div 标签来访问事件属性 这个标签
  • 如何以编程方式检测 ensemble 客户端中的哪个服务器连接到?

    如何以编程方式检测客户端连接到 ZooKeeper 集合中的哪台服务器 我正在使用阿帕奇策展人 http curator apache org API 和我正在通过注册监听连接状态变化连接状态监听器 https curator apache
  • ASP.NET WebAPI 中的模拟和异步

    Update 2 这个问题最初是 模仿可以与 Web API 一起使用吗 这个问题的问题是 是的 确实如此 但问题不在于 Web API 而在于模仿本身 问题描述如下 但现在我想告诉其他人解决方案 我的控制器是异步的 我错误的前提是模拟线程
  • 如何使用 C# 检查打印机是否已安装并准备就绪?

    如何使用 NET 3 5 和 Visual Studio 2008 在 C 中以编程方式检查打印机是否已安装 如果有 如何检查它是否已打开并准备好使用 提前致谢 此代码片段将检索有关已安装打印机的信息 using System Drawin
  • 读取或转换 word .doc 文件 iOS

    iOS 上的其他应用程序如何读取和写入 Word 文档 我看到其他一些与此相关的问题 并且接受的答案都是 这是不可能完成的 我不想只显示 Word 文档 我想阅读它及其格式 其他应用程序是如何做到这一点的 他们是否使用微软发布的发布标准自己
  • 如何实时处理音频流

    我有一个运行最新 jessie 的树莓派 3 的设置 其中安装了所有更新 其中我提供了一个 A2DP 蓝牙接收器 我可以在其中连接手机播放一些音乐 通过pulseaudio 源 电话 被路由到alsa 输出 接收器 这相当有效 我现在想使用