【问题标题】:Trimming audio in python在python中修剪音频
【发布时间】:2013-10-22 19:35:23
【问题描述】:

好的,所以我也在使用 pyaudio,但从我一直在看的 wave 模块来看,这可能对我有帮助。

所以我试图在我的程序上添加一个修剪功能,我的意思是我试图让用户找到 wav 的一部分。他/她不喜欢并且有能力将波形文件修剪成他/她想要的。

到目前为止,我一直在使用 pyaudio 进行简单的播放,而 pyaudio 在从输入设备录制时非常容易。

我一直在 pyaudio 上搜索我可以做的任何事情来修剪音频,但我真的没有找到任何可以帮助我的东西。虽然在嵌入式波形模块上我看到有设置位置的方法。

我是否必须执行一个循环或 if 语句,以便程序知道要录制哪些位置,然后让 pyaudio 或 wave 模块从用户设置的位置(开始、结束)录制歌曲?如果我以这种方式接近它,我的程序会有效运行吗?

【问题讨论】:

标签: python audio wav pyaudio


【解决方案1】:

假设您使用 scipy 读取波形文件。

然后你需要有“编辑点”这些是用户想要保留的输入和输出值(例如以秒为单位)。您可以从文件中获取这些信息,也可以通过显示波形文件并获得鼠标点击来获取这些信息。如果用户提供了应该删除的部分音频文件,那么这需要首先被否定

这不是最有效的解决方案,但在许多情况下应该没问题。

import scipy.io.wavfile
fs1, y1 = scipy.io.wavfile.read(filename)
l1 = numpy.array([  [7.2,19.8], [35.3,67.23], [103,110 ] ])
l1 = ceil(l1*fs1)#get integer indices into the wav file - careful of end of array reading with a check for greater than y1.shape
newWavFileAsList = []
for elem in l1:
  startRead = elem[0]
  endRead = elem[1]
  if startRead >= y1.shape[0]:
    startRead = y1.shape[0]-1
  if endRead >= y1.shape[0]:
    endRead = y1.shape[0]-1
  newWavFileAsList.extend(y1[startRead:endRead])


newWavFile = numpy.array(newWavFileAsList)

scipy.io.wavfile.write(outputName, fs1, newWavFile)

【讨论】:

  • 你是否也在使用 numpy 模块?
  • 最有效的方法是什么?
  • 你认为我可以用这个来设置 pyaudio 吗?
  • 是的,我正在使用 numpy 和 scipy。 Numpy 数组和 scipy 读取/写入 wav 文件。我认为给定的代码对您来说应该是一个很好的起点。然后看看你的瓶颈在哪里,以寻找加速的方法。如果你想使用 pyaudio,这个问答可以让你从 pyaudio 到 numpy:stackoverflow.com/questions/9082431/…,但我认为 numpy/scipy 应该适合你阅读 wav 文件
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2021-02-06
  • 2011-05-13
  • 1970-01-01
  • 2022-07-26
相关资源
最近更新 更多