.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "generated_examples/encoding/audio_encoding.py" .. LINE NUMBERS ARE GIVEN BELOW. .. rst-class:: sphx-glr-example-title .. _sphx_glr_generated_examples_encoding_audio_encoding.py: ======================================== Encoding audio samples with AudioEncoder ======================================== In this example, we'll learn how to encode audio samples to a file or to raw bytes using the :class:`~torchcodec.encoders.AudioEncoder` class. .. GENERATED FROM PYTHON SOURCE LINES 17-19 Let's first generate some samples to be encoded. The data to be encoded could also just come from an :class:`~torchcodec.decoders.AudioDecoder`! .. GENERATED FROM PYTHON SOURCE LINES 19-36 .. code-block:: Python 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) .. rst-class:: sphx-glr-script-out .. code-block:: none Encoding samples with samples.shape = torch.Size([48000]) and sample_rate = 16000 .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 37-48 We first instantiate an :class:`~torchcodec.encoders.AudioEncoder`. We pass it the samples to be encoded. The samples must be a 2D tensors of shape ``(num_channels, num_samples)``, or in this case, a 1D tensor where ``num_channels`` is assumed to be 1. The values must be float values normalized in ``[-1, 1]``: this is also what the :class:`~torchcodec.decoders.AudioDecoder` would return. .. note:: The ``sample_rate`` parameter corresponds to the sample rate of the *input*, not the desired encoded sample rate. .. GENERATED FROM PYTHON SOURCE LINES 48-53 .. code-block:: Python from torchcodec.encoders import AudioEncoder encoder = AudioEncoder(samples=samples, sample_rate=sample_rate) .. GENERATED FROM PYTHON SOURCE LINES 54-61 :class:`~torchcodec.encoders.AudioEncoder` supports encoding samples into a file via the :meth:`~torchcodec.encoders.AudioEncoder.to_file` method, or to raw bytes via :meth:`~torchcodec.encoders.AudioEncoder.to_tensor`. For the purpose of this tutorial we'll use :meth:`~torchcodec.encoders.AudioEncoder.to_tensor`, so that we can easily re-decode the encoded samples and check their properies. The :meth:`~torchcodec.encoders.AudioEncoder.to_file` method works very similarly. .. GENERATED FROM PYTHON SOURCE LINES 61-66 .. code-block:: Python encoded_samples = encoder.to_tensor(format="mp3") print(f"{encoded_samples.shape = }, {encoded_samples.dtype = }") .. rst-class:: sphx-glr-script-out .. code-block:: none encoded_samples.shape = torch.Size([9512]), encoded_samples.dtype = torch.uint8 .. GENERATED FROM PYTHON SOURCE LINES 67-71 That's it! Now that we have our encoded data, we can decode it back, to make sure it looks and sounds as expected: .. GENERATED FROM PYTHON SOURCE LINES 71-78 .. code-block:: Python 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) .. rst-class:: sphx-glr-script-out .. code-block:: none AudioSamples: data (shape): torch.Size([1, 48000]) pts_seconds: 0.0690625 duration_seconds: 3.0 sample_rate: 16000 .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 79-82 The encoder supports some encoding options that allow you to change how to data is encoded. For example, we can decide to encode our mono data (1 channel) into stereo data (2 channels), and to specify an output sample rate: .. GENERATED FROM PYTHON SOURCE LINES 82-91 .. code-block:: Python 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) .. rst-class:: sphx-glr-script-out .. code-block:: none AudioSamples: data (shape): torch.Size([2, 96000]) pts_seconds: 0.0 duration_seconds: 3.0 sample_rate: 32000 .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 92-94 Check the docstring of the encoding methods to learn about the different encoding options. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.043 seconds) .. _sphx_glr_download_generated_examples_encoding_audio_encoding.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: audio_encoding.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: audio_encoding.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: audio_encoding.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_