Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Audio capture

examples/audio_capture.livemd

Audio capture

File.cd(__DIR__)
Logger.configure(level: :warning)

Mix.install([
  {:membrane_core, "~> 1.0"},
  {:membrane_kino_plugin, path: ".."},
  {:membrane_matroska_plugin, "~> 0.5.1"},
  {:membrane_opus_plugin, "~> 0.20.2"},
  {:membrane_aac_fdk_plugin, "~> 0.18.9"}
])

Pipeline definition

alias Membrane.RCPipeline
import Membrane.ChildrenSpec

alias Membrane.{
  Opus,
  File,
  AAC,
  Time,
  RawAudio
}

kino_input =
  Membrane.Kino.Input.new(
    audio: true,
    flush_time: Time.milliseconds(1)
  )

kino_player =
  Membrane.Kino.Player.new(
    audio: true,
    flush_time: Time.milliseconds(500)
  )

play_kino_audio =
  child(:input, %Membrane.Kino.Input.Bin.Source{kino: kino_input})
  |> via_out(:audio)
  |> child(:opus_decoder, Opus.Decoder)
  |> child(:aac_encoder, AAC.FDK.Encoder)
  |> via_in(:audio)
  |> child(:player, %Membrane.Kino.Player.Sink{kino: kino_player})

:ok

Playing pipeline

pipeline = RCPipeline.start!()
RCPipeline.exec_actions(pipeline, spec: play_kino_audio)

Kino.render(kino_input)
kino_player