快捷方式

使用 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 開發者文件

檢視文件

教程

為初學者和高階開發者提供深入的教程

檢視教程

資源

查詢開發資源並讓您的問題得到解答

檢視資源