快捷方式

使用 AudioEncoder 对音频样本进行编码

在此示例中,我们将学习如何使用 AudioEncoder 类将音频样本编码到文件或原始字节中。

我们首先生成一些要编码的样本。要编码的数据也可以直接来自 AudioDecoder

import torch
from IPython.display import Audio as play_audio


def make_sinewave() -> tuple[torch.Tensor, int]:
    freq_A = 440  # Hz
    sample_rate = 16000  # Hz
    duration_seconds = 3  # seconds
    t = torch.linspace(0, duration_seconds, int(sample_rate * duration_seconds), dtype=torch.float32)
    return torch.sin(2 * torch.pi * freq_A * t), sample_rate


samples, sample_rate = make_sinewave()

print(f"Encoding samples with {samples.shape = } and {sample_rate = }")
play_audio(samples, rate=sample_rate)
Encoding samples with samples.shape = torch.Size([48000]) and sample_rate = 16000


我们首先实例化一个 AudioEncoder。我们将要编码的样本传递给它。样本必须是形状为 (num_channels, num_samples) 的二维张量,或者在这种情况下,是一维张量,其中 num_channels 默认为 1。值必须是归一化在 [-1, 1] 范围内的浮点值:这也是 AudioDecoder 会返回的值。

注意

sample_rate 参数对应于 *输入* 的采样率,而不是所需的编码后采样率。

from torchcodec.encoders import AudioEncoder

encoder = AudioEncoder(samples=samples, sample_rate=sample_rate)

AudioEncoder 支持通过 to_file() 方法将样本编码到文件中,或者通过 to_tensor() 编码到原始字节中。在本教程中,我们将使用 to_tensor(),以便我们可以轻松地重新解码编码后的样本并检查它们的属性。to_file() 方法的工作方式非常相似。

encoded_samples = encoder.to_tensor(format="mp3")
print(f"{encoded_samples.shape = }, {encoded_samples.dtype = }")
encoded_samples.shape = torch.Size([9512]), encoded_samples.dtype = torch.uint8

就是这样!

现在我们有了编码后的数据,我们可以将其解码回来,以确保它看起来和听起来都符合预期

from torchcodec.decoders import AudioDecoder

samples_back = AudioDecoder(encoded_samples).get_all_samples()

print(samples_back)
play_audio(samples_back.data, rate=samples_back.sample_rate)
AudioSamples:
  data (shape): torch.Size([1, 48000])
  pts_seconds: 0.0690625
  duration_seconds: 3.0
  sample_rate: 16000


编码器支持一些编码选项,允许您更改数据的编码方式。例如,我们可以决定将单声道数据(1 个通道)编码为立体声数据(2 个通道),并指定输出采样率

desired_sample_rate = 32000
encoded_samples = encoder.to_tensor(format="wav", num_channels=2, sample_rate=desired_sample_rate)

stereo_samples_back = AudioDecoder(encoded_samples).get_all_samples()

print(stereo_samples_back)
play_audio(stereo_samples_back.data, rate=desired_sample_rate)
AudioSamples:
  data (shape): torch.Size([2, 96000])
  pts_seconds: 0.0
  duration_seconds: 3.0
  sample_rate: 32000


请查看编码方法的 docstring 以了解不同的编码选项。

脚本总运行时间: (0 分钟 0.043 秒)

由 Sphinx-Gallery 生成的画廊

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源