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