MayaFlux 1.0.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_audio_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_audio_capture() to finalise.

Definition at line 531 of file IOManager.cpp.

532{
533
536 .get_service<Registry::Service::AudioBackendService>();
537 }
538
540 error<std::runtime_error>(Journal::Component::IO, Journal::Context::FileIO, std::source_location::current(),
541 "capture_output: AudioBackendService unavailable");
542 }
543
544 auto ct = std::make_shared<Kakshya::AudioOutputContainer>(m_stream_info);
545 ct->create_default_processor();
546
547 auto writer = std::make_shared<SoundFileWriter>();
548 if (!writer->open(filepath,
551 codec_id)) {
553 "capture_output: writer open failed for '{}': {}", filepath, writer->last_error());
554 return 0;
555 }
556
558 [ct, writer](const double*, uint32_t) {
559 ct->process_default();
560 const auto& vt = ct->get_processed_data();
561 if (!vt.empty())
562 writer->write(vt);
563 });
564
565 {
566 std::lock_guard lock(m_writers_mutex);
567 m_writers.push_back(writer);
568 }
569
570 std::lock_guard lock(m_audio_captures_mutex);
571 m_audio_captures.emplace(obs_id, AudioCaptureState { .container = ct, .writer = writer, .observer_id = obs_id });
572 return obs_id;
573}
#define MF_ERROR(comp, ctx,...)
tvdb_value_type_t vt
std::unordered_map< uint32_t, AudioCaptureState > m_audio_captures
Registry::Service::AudioBackendService * m_audio_backend_service
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_stream_info, m_writers, m_writers_mutex, MF_ERROR, MayaFlux::Core::GlobalStreamInfo::output, MayaFlux::Registry::Service::AudioBackendService::register_output_observer, MayaFlux::Core::GlobalStreamInfo::sample_rate, and vt.

+ Here is the call graph for this function: