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