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: :error)

Mix.install([
  {:membrane_core, "~> 0.11.2"},
  {:membrane_file_plugin, "~> 0.13.0"},
  {:membrane_kino_plugin, path: ".."},
  {:membrane_opus_plugin, "~> 0.16.0"},
  {:membrane_aac_fdk_plugin, "~> 0.14.0"},
  {:membrane_aac_plugin, "~> 0.13.0"},
  {:membrane_wav_plugin, "~> 0.8.0"},
  {:membrane_generator_plugin, "~> 0.8.0"},
  {:membrane_raw_audio_format, "~> 0.10.0"},
  {:membrane_matroska_plugin, "~> 0.2.1"},
  {:membrane_portaudio_plugin, "~> 0.14.3"},
  {:membrane_ffmpeg_swresample_plugin, "~> 0.16.1"}
])

Section

alias Membrane.RemoteControlled, as: RC
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.Source{kino: kino_input})
  |> child(:from_opus, Opus.Decoder)
  |> child(:to_aac, AAC.FDK.Encoder)
  |> via_in(:audio)
  |> child(:player, %Membrane.Kino.Player.Sink{kino: kino_player})

:ok
structure = play_kino_audio
pipeline = RC.Pipeline.start!()
RC.Pipeline.exec_actions(pipeline, spec: structure, playback: :playing)

Kino.render(kino_input)
kino_player