Membrane WAV Plugin

Hex.pmAPI DocsCircleCI

Plugin providing elements handling audio in WAV file format.

It is part of Membrane Multimedia Framework.

Installation

The package can be installed by adding membrane_wav_plugin to your list of dependencies in mix.exs:

def deps do
  [
    {:membrane_wav_plugin, "~> 0.3.0-alpha"}
  ]
end

Parser

The Parser requires a WAV file on the input and provides a raw audio in uncompressed, PCM format on the output.

Parsing steps:

It can parse only uncompressed audio.

Serializer

The Serializer adds WAV header to the raw audio in uncompressed, PCM format.

Warning

The Serializer creates header with invalid blocks which depend on the file size. To fix that, using Membrane.WAV.Postprocessing is recommended.

Sample usage

defmodule Mixing.Pipeline do
  use Membrane.Pipeline

  @impl true
  def handle_init(_) do
    children = [
      file_src: %Membrane.File.Source{location: "/tmp/input.wav"},
      parser: Membrane.WAV.Parser,
      converter: %Membrane.FFmpeg.SWResample.Converter{
        input_caps: %Membrane.Caps.Audio.Raw{channels: 1, sample_rate: 16_000, format: :s16le},
        output_caps: %Membrane.Caps.Audio.Raw{channels: 2, sample_rate: 48_000, format: :s16le}
      },
      serializer: Membrane.WAV.Serializer,
      file_sink: %Membrane.File.Sink{location: "/tmp/output.wav"},
    ]

    links = [
      link(:file_src)
      |> to(:parser)
      |> to(:converter)
      |> to(:serializer)
      |> to(:file_sink)
    ]

    {{:ok, spec: %ParentSpec{children: children, links: links}}, %{}}
  end
end

Copyright and License

Copyright 2021, Software Mansion

Software Mansion

Licensed under the Apache License, Version 2.0