如何将音频字节流转换为torch张量?

问题描述 投票:0回答:2

我正在尝试将

bytes
音频流转换为 PyTorch 张量,作为 PyTorch
forward()
函数的输入。

(更具体地说,我使用

Nemo
扬声器模型进行说话人识别:

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

有人知道该怎么做吗?

audio pytorch tensor torch bytestream
2个回答
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)

0
投票

您也可以直接从 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 张量。

© www.soinside.com 2019 - 2024. All rights reserved.