如何将音频字节流转换为Torch Tensor?

3

我正在尝试将bytes音频流转换为PyTorch张量,以作为PyTorch的forward()函数的输入。

(更具体地说,我正在使用Nemo说话人模型进行说话人识别:

audio_signal,audio_signal_length = torch.tensor([audio]),torch.tensor([audio_length])

有人知道如何做吗?


我有一个非常类似的问题。我正在使用PyAudio实时录制音频,将音频帧存储在内存中作为IOByte对象,并希望将这些帧转换为torch张量。您是否在此期间找到任何解决方案? - hoang tran
2个回答

1
您还可以直接从numpy数组中进行转换:
import torch
import numpy as np

def audio_to_tensor(audio_frame: bytes):
    buffer = np.frombuffer(audio_frame, dtype=np.int16).astype(np.float32) / 32767.0
    return torch.from_numpy(buffer)

它返回一个归一化的float32张量。

0

这个对我来说是可行的,虽然我相信肯定有更简单的方法

import io
import numpy as np
import scipy as sc
import torch
import torchaudio


SAMPLE_RATE = 16000

def bytes_to_audio_tensor(audio_bytes:bytes) -> torch.Tensor:
    bytes_io = io.BytesIO()
    raw_data = np.frombuffer(
        buffer=audio_bytes, dtype=np.int32
    )
    sc.io.wavfile.write(bytes_io, SAMPLE_RATE, raw_data)
    audio, _ = torchaudio.load(bytes_io)
    return audio.squeeze(0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接