如何将 numpy 数组转换为 mp3 文件

2024-01-02

我正在使用声卡库来记录我的麦克风输入,它记录在 NumPy 数组中,我想抓取该音频并将其保存为 mp3 文件。

Code:

import soundcard as sc
import numpy 
import threading


speakers = sc.all_speakers() # Gets a list of the systems speakers
default_speaker = sc.default_speaker() # Gets the default speaker
mics = sc.all_microphones() # Gets a list of all the microphones


default_mic = sc.get_microphone('Headset Microphone (Arctis 7 Chat)') # Gets the default microphone


# Records the default microphone
def record_mic():
  print('Recording...')
  with default_mic.recorder(samplerate=48000) as mic, default_speaker.player(samplerate=48000) as sp:
      for _ in range(1000000000000):
          data = mic.record(numframes=None) # 'None' creates zero latency
          sp.play(data) 
          
          # Save the mp3 file here 


recordThread = threading.Thread(target=record_mic)
recordThread.start()

使用 Scipy(到 wav 文件)

您可以轻松转换为 wav,然后单独将 wav 转换为 mp3。更多细节here https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html.

from scipy.io.wavfile import write

samplerate = 44100; fs = 100
t = np.linspace(0., 1., samplerate)

amplitude = np.iinfo(np.int16).max
data = amplitude * np.sin(2. * np.pi * fs * t)

write("example.wav", samplerate, data.astype(np.int16))

使用 pydub(转 mp3)

尝试这个优秀的功能thread https://stackoverflow.com/questions/53633177/how-to-read-a-mp3-audio-file-into-a-numpy-array-save-a-numpy-array-to-mp3 -

import pydub 
import numpy as np

def write(f, sr, x, normalized=False):
    """numpy array to MP3"""
    channels = 2 if (x.ndim == 2 and x.shape[1] == 2) else 1
    if normalized:  # normalized array - each item should be a float in [-1, 1)
        y = np.int16(x * 2 ** 15)
    else:
        y = np.int16(x)
    song = pydub.AudioSegment(y.tobytes(), frame_rate=sr, sample_width=2, channels=channels)
    song.export(f, format="mp3", bitrate="320k")

#[[-225  707]
# [-234  782]
# [-205  755]
# ..., 
# [ 303   89]
# [ 337   69]
# [ 274   89]]

write('out2.mp3', sr, x)

注意:输出 MP3 必然是 16 位,因为 MP3 始终是 16 位。不过,您可以设置sample_width=3正如 @Arty 对于 24 位输入的建议。

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

如何将 numpy 数组转换为 mp3 文件 的相关文章

随机推荐

  • Android:在自定义适配器中调用 getView() 两次

    我正在将自定义 SimpleCursorAdapter 设置为 ListView 由于某种原因 FriendAdapter 的 getView 会针对数据库中的每个项目调用两次 经过一番调查 我的 contact list xml 中没有w
  • php的file_get_contents是否忽略文件锁定?

    我读过 php 的手册页 http php net manual en function file get contents php 120389关于 file get contents 函数 它没有说明 file get contents
  • Firebase 检索最高 100 分

    This is a screen shot of my firebase I am trying to retrieve the highest 100 score in firebase database I am using this
  • 2008 年和 2010 年使用实体框架有什么区别

    您知道 首先实体框架是随 Visual Studio 2008 SP1 一起提供的 现在它随 Visual Studio 2010 一起提供 问题是 这两个版本有什么区别呢 持久性无知 您可以定义自己的 POCO 普通旧 CLR 对象 它们
  • MSI WIX:使用 2 个 MSI 创建次要升级补丁

    有没有办法根据旧的 MSI 安装程序和新的 MSi 安装程序创建次要升级 补丁文件 即 msp 或 msi 我们希望为客户提供次要升级补丁 msp 或 msi0 其中仅包含更改 1 我基于 4 个 wxs 文件创建了 旧的 Test msi
  • 用行均值替换 NA 值

    我想替换通过以下方式获取的矩阵中的 NA 值 read table 这些值应该是相应行的平均值 即表的以下行 1 2 1 NA 2 1 1 2 会成为 1 2 1 1 43 2 1 2 谢谢 这是一些示例数据 m lt matrix 1 1
  • Javascript 显示非常大的数字而不是显示 xe+n [重复]

    这个问题在这里已经有答案了 我的 JavaScript 代码经常输出非常大的数字 我希望完全显示这些数字 而不是获取诸如2 7934087356437704e 56我希望它显示完整的数字 在 JS 中可以实现这一点吗 如此大的数字 你会失去
  • gwt maven war插件配置问题

    我正在 Maven 中开发 gwt 应用程序 在这里我使用 Maven War 插件 一切正常 当我给予MVN安装命令它构建abc war目标文件夹中的文件 但它不是复制已编译的 javascript 文件 module1 and modu
  • 错误:定义表达式时出现“意外符号”

    我正在上一门统计和数据分析课 最近开始使用 R 我收到一条错误消息 到目前为止我还无法准确确定错误是什么或如何修复它 我们得到了绘制该函数的指示 y 0 1x 4 0 5x 3 x 2 3x 2 下一条指令要求遵循此编码并输入上述函数 gt
  • jquery deferred - 等待两个调用完成

    我正在寻找一种在两个 ajax 调用完成后进行回调的方法 when call1 call2 always function Here I want to be sure the two calls are done and to get t
  • 使用facet_wrap显示多个直方图

    样本数据 df lt data frame id rep 1 6 each 50 x rnorm 50 6 mean 10 sd 5 y rnorm 50 6 mean 20 sd 10 z rnorm 50 6 mean 30 sd 15
  • 将 xtable 与 longtable 选项一起使用时重复标头

    在使用 longtable 选项生成 xtable 时 有没有办法重复顶行 设置标题 例如 如果我有 tableSb lt xtable df caption A Very Long Table label ALongTable print
  • 处理不是 Action 请求的 Multipart 请求?

    我一直在想是否可以处理不是操作请求的多部分请求 对我来说这似乎不可能是有原因的 只有 ActionRequest 实现 getFile 类方法 我不能 找到任何简单的方法来获取文件 出于除 Action 之外的请求 要求 如果我不使用 ht
  • 不在 UI 线程中触发 PropertyChanged 会产生哪些副作用?

    如果您实现 INotifyPropertyChanged 您可以在非 UI 线程中引发事件 我应该避免这种情况吗 为什么 Update 这是关于 wpf 应用程序中的绑定 不 你不应该避免这个 WPF 元帅PropertyChanged代表
  • 使用 XSL 封装 HTML 中的单词

    我需要在 HTML 文档中用标签 例如 span 包装每个单词 例如 div Text in a div div div Text in a div p Text inside a p p div 得到这样的结果 div span Text
  • 为了学习目的,Erlang 有哪些有趣的项目可以解决? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近发现了 Erlang 现在正在学习几个教程 到目前为止 我期待着将一些东西作为一个业余爱好项目来实际实施 我对另一个聊天服务器并不真正感兴
  • NetBeans 安装程序未正确找到 Java

    我正在尝试安装 NetBeans 全部 包 并且我很确定我已经安装了 Java SE 开发工具包 但是它没有正确定位它 它出现了错误 Java SE Development Kit JDK was not found on this com
  • 如何仅使用 javascript 将页面高度增加 X 像素

    假设一个 HTML 页面 html content outside of our control javascript block some more html content outside of our control 进一步假设我们能
  • Google 地方信息返回错误的城市

    我正在使用 google autocomplete Places API 构建一个应用程序 如果我对地址 Pongal New York NY United States 使用预测建议 我会在返回地点对象中得到以下项目 地区 曼哈顿 Adm
  • 如何将 numpy 数组转换为 mp3 文件

    我正在使用声卡库来记录我的麦克风输入 它记录在 NumPy 数组中 我想抓取该音频并将其保存为 mp3 文件 Code import soundcard as sc import numpy import threading speaker