From 24192b4043d64d426611acf19d079f10b976ce22 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 30 Apr 2016 11:25:04 -0700 Subject: [PATCH] Capture: Write simple metadata for baseband and audio files. Will probably turn the audio metadata file into .wav data, eventually. --- firmware/application/analog_audio_app.cpp | 22 ++++++++++++++++++++++ firmware/application/analog_audio_app.hpp | 1 + firmware/application/capture_app.cpp | 9 +++++++++ firmware/application/capture_app.hpp | 1 + 4 files changed, 33 insertions(+) diff --git a/firmware/application/analog_audio_app.cpp b/firmware/application/analog_audio_app.cpp index 3ba17582b..32d198b02 100644 --- a/firmware/application/analog_audio_app.cpp +++ b/firmware/application/analog_audio_app.cpp @@ -30,6 +30,8 @@ using namespace portapack; #include "utility.hpp" +#include "string_format.hpp" + namespace ui { /* AMOptionsView *********************************************************/ @@ -322,6 +324,8 @@ void AnalogAudioView::record_start() { return; } + write_metadata_file(filename_stem + ".TXT"); + capture_thread = std::make_unique(filename_stem + ".S16", 12, 2); button_record.set_bitmap(&bitmap_stop); } @@ -331,4 +335,22 @@ void AnalogAudioView::record_stop() { button_record.set_bitmap(&bitmap_record); } +void AnalogAudioView::write_metadata_file(const std::string& filename) { + // TODO: This doesn't belong here! There's a better way. + const auto modulation = static_cast(receiver_model.modulation()); + size_t sampling_rate = 0; + switch(modulation) { + case ReceiverModel::Mode::AMAudio: sampling_rate = 12000; break; + case ReceiverModel::Mode::NarrowbandFMAudio: sampling_rate = 24000; break; + case ReceiverModel::Mode::WidebandFMAudio: sampling_rate = 48000; break; + default: + return; + } + + File file; + file.open_for_writing(filename); + file.puts("sample_rate=" + to_string_dec_uint(sampling_rate) + "\n"); + file.puts("center_frequency=" + to_string_dec_uint(receiver_model.tuning_frequency()) + "\n"); +} + } /* namespace ui */ diff --git a/firmware/application/analog_audio_app.hpp b/firmware/application/analog_audio_app.hpp index 6e127fe3b..9ceecc88b 100644 --- a/firmware/application/analog_audio_app.hpp +++ b/firmware/application/analog_audio_app.hpp @@ -181,6 +181,7 @@ private: bool is_recording() const; void record_start(); void record_stop(); + void write_metadata_file(const std::string& filename); }; } /* namespace ui */ diff --git a/firmware/application/capture_app.cpp b/firmware/application/capture_app.cpp index ee9fe331d..8658cd418 100644 --- a/firmware/application/capture_app.cpp +++ b/firmware/application/capture_app.cpp @@ -130,6 +130,8 @@ void CaptureAppView::record_start() { return; } + write_metadata_file(filename_stem + ".TXT"); + capture_thread = std::make_unique(filename_stem + ".C16", 14, 1); button_record.set_bitmap(&bitmap_stop); } @@ -139,6 +141,13 @@ void CaptureAppView::record_stop() { button_record.set_bitmap(&bitmap_record); } +void CaptureAppView::write_metadata_file(const std::string& filename) { + File file; + file.open_for_writing(filename); + file.puts("sample_rate=" + to_string_dec_uint(sampling_rate) + "\n"); + file.puts("center_frequency=" + to_string_dec_uint(receiver_model.tuning_frequency()) + "\n"); +} + void CaptureAppView::on_tick_second() { if( capture_thread ) { const auto dropped_percent = std::min(99U, capture_thread->state().dropped_percent()); diff --git a/firmware/application/capture_app.hpp b/firmware/application/capture_app.hpp index de92712bb..030b6e7c7 100644 --- a/firmware/application/capture_app.hpp +++ b/firmware/application/capture_app.hpp @@ -64,6 +64,7 @@ private: bool is_recording() const; void record_start(); void record_stop(); + void write_metadata_file(const std::string& filename); void on_tick_second();