MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ capture_output()

uint32_t MayaFlux::IO::IOManager::capture_output ( const std::string &  filepath,
AVCodecID  codec_id = AV_CODEC_ID_NONE 
)

Begin continuous capture of live audio output to a file.

Registers an observer with AudioBackendService. Each output cycle the observer drives an AudioOutputContainer and posts its processed_data to a SoundFileWriter. Returns an opaque capture id for use with stop_capture().

Returns 0 and logs an error if AudioBackendService is unavailable.

Parameters
filepathOutput file path.
codec_idEncoder override; AV_CODEC_ID_NONE = container default.
Returns
Capture handle; pass to stop_capture() to finalise.

Definition at line 380 of file IOManager.cpp.

381{
382
385 .get_service<Registry::Service::AudioBackendService>();
386 }
387
389 error<std::runtime_error>(Journal::Component::IO, Journal::Context::FileIO, std::source_location::current(),
390 "capture_output: AudioBackendService unavailable");
391 }
392
393 auto ct = std::make_shared<Kakshya::AudioOutputContainer>(m_stream_info);
394 ct->create_default_processor();
395
396 auto writer = std::make_shared<SoundFileWriter>();
397 if (!writer->open(filepath,
400 codec_id)) {
402 "capture_output: writer open failed for '{}': {}", filepath, writer->last_error());
403 return 0;
404 }
405
407 [ct, writer](const double*, uint32_t) {
408 ct->process_default();
409 const auto& vt = ct->get_processed_data();
410 if (!vt.empty())
411 writer->write(vt);
412 });
413
414 {
415 std::lock_guard lock(m_save_tasks_mutex);
416 m_writers.push_back(writer);
417 }
418
419 std::lock_guard lock(m_audio_captures_mutex);
420 m_audio_captures.emplace(obs_id, AudioCaptureState { .container = ct, .writer = writer, .observer_id = obs_id });
421 return obs_id;
422}
#define MF_ERROR(comp, ctx,...)
std::unordered_map< uint32_t, AudioCaptureState > m_audio_captures
Registry::Service::AudioBackendService * m_audio_backend_service
std::mutex m_save_tasks_mutex
Core::GlobalStreamInfo & m_stream_info
std::vector< std::shared_ptr< SoundFileWriter > > m_writers
std::mutex m_audio_captures_mutex
Interface * get_service()
Query for a backend service.
static BackendRegistry & instance()
Get the global registry instance.
@ FileIO
Filesystem I/O operations.
@ IO
Networking, file handling, streaming.
uint32_t channels
Number of discrete channels in this set.
uint32_t sample_rate
Number of samples processed per second (Hz)
ChannelConfig output
Configuration for output signal channels.
std::function< uint32_t(std::function< void(const double *, uint32_t)>)> register_output_observer
Register a per-cycle output observer.

References MayaFlux::Core::GlobalStreamInfo::ChannelConfig::channels, MayaFlux::IO::IOManager::AudioCaptureState::container, MayaFlux::Journal::FileIO, MayaFlux::Registry::BackendRegistry::get_service(), MayaFlux::Registry::BackendRegistry::instance(), MayaFlux::Journal::IO, m_audio_backend_service, m_audio_captures, m_audio_captures_mutex, m_save_tasks_mutex, m_stream_info, m_writers, MF_ERROR, MayaFlux::Core::GlobalStreamInfo::output, MayaFlux::Registry::Service::AudioBackendService::register_output_observer, and MayaFlux::Core::GlobalStreamInfo::sample_rate.

+ Here is the call graph for this function: