如何将音频文件(.mp3或.wav)拆分为10秒部分将其部分发送到函数

这不是代码的一部分,所以用!运算符表示它,因为它是 Google Colab 命令行的命令(因为我首先在笔记本上测试此代码,然后可以在本地 PC 上使用相同的代码)。

这不是代码的一部分,所以用!运算符表示它,因为它是 Google Colab 命令行的命令(因为我首先在笔记本上测试此代码,然后可以在本地 PC 上使用相同的代码)。

! pip install -q transformers

这里的代码:

import librosa
import torch
#for download Wav2Vec2 from the Transformers library of Hugging Face
from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer

在这种情况下,我加载标记器和这个预先训练的模型

#load model and tokenizer
tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")

这里是问题,因为我加载完整的音频文件,它可能饱和 RAM 内存时,试图处理一个.mp3 文件与 14:18 分钟(6,54 Mb)的持续时间。

我选择 16000 Hz 频率,因为这个 facebook Wav2Vec2 模型是以 16 kHz 速率预训练的。

我不确定导致 RAM 饱和的问题是文件的重量还是音频文件的长度?在任何情况下,我认为解决方案是将其切成 5 秒或 10 秒或 30 秒的部分(因此,使用带有参数的函数来调整它将很方便)。

input_audio_file = "CLASE 9 HOMBRE MAQUINA.mp3"
speech, rate = librosa.load(input_audio_file, sr=16000)

最后是音频处理过程,这是我的 RAM 堵塞的地方,所以我需要一些帮助来创建某种循环,如果输入音频长于X 秒,则算法将此原始音频拆分为n 个部分X 秒(也许最后一部分较短,因为它小于 X 秒)。

在这里,我标记输入(在这种情况下,它是完整的音频,但我认为这将是最好的,如果他们从 X 秒持续时间的音频片段传递每个),我会配置包含 PyTorch 对象中的音频信息的张量。

这里的处理过程:

input_values = tokenizer(speech, return_tensors = 'pt').input_values
#Store logits (non-normalized predictions)
logits = model(input_values).logits
#Store predicted id's
predicted_ids = torch.argmax(logits, dim =-1)
#decode the audio to generate text
transcriptions = tokenizer.decode(predicted_ids[0])
#And finally I would print the text after this text-to-speech process
print(transcriptions)

enter image description here

这里导致连接关闭的 RAM 的饱和度(我想如果我在我的电脑上尝试这个音频文件的代码,它会冻结)

enter image description here

我认为对于这个问题,Wav2Vec2 algorith 操作可以作为程序将要工作的上下文的信息,但是我需要的是如何将音频分段并将其逐个部分发送到处理代码(也许可以方便地将其放在循环内调用的函数中),并在控制台中逐行打印转换为文本的内容。

我已经能够使用librosa方法以秒为单位确定音频文件的长度,以决定是否拆分它

speech, rate = librosa.load(input_audio_file)
x = 10
len_data = len(speech)  # holds length of the numpy array
duration_in_seconds = int( len_data / rate ) # returns duration in seconds but in floats
print(duration_in_seconds)
if(duration_in_seconds >= x):
    #split the audio file in x secs audio chunks
else:
    #dont split the audio file

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(460)
如何在PHP中获取连接的客户端的MAC和IP地址
上一篇
如何在 python中安装一个阶跃函数
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(52条)