如何使用 python 将 wav 实时转换为 mp3?

2023-11-23

我有如下所示的代码来从麦克风获取音频:

import pyaudio
p = pyaudio.PyAudio()
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 1024*10
RECORD_SECONDS = 10
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    send_via_socket(data) # function to send each frame to remote system

这段代码运行良好。然而每一个data帧的大小为 4kb。这意味着发送 1 秒的音频数据需要 40kb 的互联网数据。 当我将 10 帧(1 秒音频)保存到光盘并使用 pdub 模块将其转换为 mp3 时,数据只有 6kb。 在通过套接字发送之前,如何将每个 wav 帧转换为 mp3? (我只需要减小框架的大小以节省网络使用量)。 例如:

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)  # data =4kb
    mp3_frame = wav_to_mp3(data) # mp3_frame should be 1kb or less
    send_via_socket(mp3_frame) # function to send each frame to remote system

我能够找到一种工作方法flask and ffmpeg...

import select
import subprocess

import numpy

from flask import Flask
from flask import Response

app = Flask(__name__)


def get_microphone_audio(num_samples):
    # TODO: Add the above microphone code. 
    audio = numpy.random.rand(num_samples).astype(numpy.float32) * 2 - 1
    assert audio.max() <= 1.0
    assert audio.min() >= -1.0
    assert audio.dtype == numpy.float32
    return audio


def response():
    pipe = subprocess.Popen(
        'ffmpeg -f f32le -acodec pcm_f32le -ar 24000 -ac 1 -i pipe: -f mp3 pipe:'
        .split(),
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE)
    poll = select.poll()
    poll.register(pipe.stdout, select.POLLIN)
    while True:
        pipe.stdin.write(get_synthetic_audio(24000).tobytes())
        while poll.poll(0):
            yield pipe.stdout.readline()


@app.route('/stream.mp3', methods=['GET'])
def stream():
    return Response(
        response(),
        headers={
            # NOTE: Ensure stream is not cached.
            'Cache-Control': 'no-cache, no-store, must-revalidate',
            'Pragma': 'no-cache',
            'Expires': '0',
        },
        mimetype='audio/mpeg')


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000, debug=True)

该解决方案支持实时流式传输,并受 Chrome、Firefox 和 Safari 支持。

该解决方案也适用于类似的问题:如何在 Python 中流式传输给定 NumPy 数组的 MP3 块?

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

如何使用 python 将 wav 实时转换为 mp3? 的相关文章

  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • ipython/ pylab/ matplotlib安装和初始化错误

    我在 OS X El Captain 上安装了 matplotlib anaconda ipython 然而 即使在尝试以所有可能的方式设置环境变量之后 我仍无法启动 ipython shell pylab 版本 这是错误 ImportEr
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • Qt moveToThread() 与调用新线程何时使用每个

    我们什么时候在线程应用程序中使用每个函数调用 给定在同一类中定义的两个函数 fun1 和 fun2 处理数据读 写到缓冲区 队列操作 来实现多线程这些 我们必须在单独的线程中运行这两个函数 现在假设第一个函数 read 在其线程开始时被调用
  • 在 python 中运行 AppleScript 时“不允许用户交互”

    我有苹果脚本 它将显示菜单列表并允许用户选择菜单项等 它本身运行良好 现在我尝试在 python 中运行它 我收到不允许用户交互的消息 1713 错误 我上网查了一下 我尝试了以下方法 在同一个 applescript 中添加 run 函数
  • 错误 TS2339:类型“Observable”上不存在属性“catchError”

    这是我在 book service ts 中的代码 import Injectable from angular core import Http Response from angular http import Observable f
  • 在asp.net MVC中不使用@HTML.Beginform并使用Jquery(ajax)发布表单

    如何在不使用 HTML Beginform 并使用 JQuery Ajax 的情况下填写表单 现在我尝试过 var postData form1 username form2 password ajax type POST url Cont
  • IEnumerable.Last() 是否针对 List 进行了优化?

    我有一个List
  • 查找图中的最小割边

    给定一个随机无向图 我必须找到 瓶颈边 编辑 最小切割边 才能从一个顶点到达另一个顶点 我所说的 瓶颈边缘 编辑 最小切割边缘 假设我有以下无向图 A B C D E F G H 为了从 A 到 H 独立于所选路径边 必须始终遍历 BE 和
  • python 中的会话身份验证

    使用来自的会话requestspython 中的模块 似乎会话仅在第一个请求时发送授权 我不明白为什么会发生这种情况 import requests session requests Session session auth u user
  • 为什么点符号只能引用表格?

    这似乎是一个简单的初学者问题 但我无法在任何地方找到答案 假设我有这样的 HTML
  • Swift 中的字符串插值

    swift 中的函数采用 Swift 中的任何数字类型 Int Double Float UInt 等 该函数将数字转换为字符串 函数签名如下 func swiftNumbers
  • 如何在 JQuery 中将 json 响应读取为名称值对

    我想在 JQuery 代码中将 json 响应读取为名称和值对 以下是我从 java 代码返回的示例 JSON 响应 String jsonResponse name1 value1 name2 value2 在我的 JQuery 中 如果
  • Python,numpy 排序数组

    我正在使用 numpy 并有一个包含一些值的数组 ndarray 类型 该数组的形状为 1000x1500 我重新塑造了它 brr np reshape arr arr shape 0 arr shape 1 当我尝试时 brr rever
  • 使用 tSQLt 测试时如何回滚事务

    我最近正在调用一个代码中包含 rasierror 的过程 raiserror 位于 try catch 块中 BEGIN TRAN 也位于 raiserror 之后的同一个 try catch 块中 Catch 块旨在在事务中发生错误时回滚
  • 扩展范围的继续和中断

    是否有可能continue or break拥有比当前运行的循环更大的范围 在下面的示例中 我希望在以下情况下继续执行外部 for 循环 expr是 true 尽管它是在内部 for 循环中调用的 因此两者都不是 some inner co
  • 验证失败时防止焦点集中在字段上

    我经常使用这个 jQuery 验证插件验证表单 效果很好 真的很满意 但是当您在表单上按 提交 时 它会自动将焦点放在无效的字段上 在我当前的项目中 我有一个非常长的表单 当您按下提交按钮时 您的滚动条会跳到该字段 可能是因为它获得焦点 但
  • 在 C# 中,如何在运行时检查对象是否属于某种类型?

    在 C 中 如何在运行时检查对象是否属于某种类型 您可以使用is关键词 例如 using System class CApp public static void Main string s fred long i 10 Console W
  • 如何在Excel中过滤多个条件?

    我正在尝试过滤多个条件 但我看到 过滤器 选项只有 2 个 AND OR 选项字段 我有一个充满链接的专栏 我想提取其中包含这些的所有行 pdf doc docx xls xlsx rtf TXT csv pps 有没有好的方法可以做到这一
  • Java读取wav文件

    我想用 Java 读取 wav 文件 并且将使用 K means 对它们进行分类 我怎样才能读取Java中的wav文件并将它们分配到一个数组或类似的东西 你可以建议它的想法 来对它们进行分类 EDIT 我想使用 API 来读取 wav 文件
  • 如何像 UNIX 中的 tar 一样在 Perl 中归档目录?

    我想归档一个目录 我不知道是否可以调用 我想压缩一个目录 我想在解压时保留另一端的访问权限 我应该用 perl 解决这个问题 感谢您的回复 但我为什么要求使用 Perl 来做到这一点是因为我希望它独立于平台 我想将一个大文件传输到多台机器
  • 如何克隆到非空目录?

    我有目录 A 和与目录 B 匹配的文件 目录 A 可能还有其他需要的文件 目录 B 是一个 git 存储库 我想将目录 B 克隆到目录 A 但 git clone 不允许我这样做 因为该目录非空 我希望它只是克隆 git 并且因为所有文件都
  • 如何使用 python 将 wav 实时转换为 mp3?

    我有如下所示的代码来从麦克风获取音频 import pyaudio p pyaudio PyAudio CHUNK 1024 FORMAT pyaudio paInt16 CHANNELS 2 RATE 1024 10 RECORD SEC