]> git.sesse.net Git - nageru/blobdiff - nageru/audio_clip.h
Begin working on a delay analyzer.
[nageru] / nageru / audio_clip.h
diff --git a/nageru/audio_clip.h b/nageru/audio_clip.h
new file mode 100644 (file)
index 0000000..71248af
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef AUDIO_CLIP_H
+#define AUDIO_CLIP_H
+
+// A short single-channel recording of an audio clip, for the delay analyzer.
+// Thread safe.
+
+#include <chrono>
+#include <memory>
+#include <mutex>
+#include <utility>
+#include <vector>
+
+class AudioClip
+{
+public:
+       void clear();
+       void add_audio(const float *samples, size_t num_samples, double sample_rate, std::chrono::steady_clock::time_point frame_time);
+       double get_length_seconds() const;
+
+       std::unique_ptr<std::pair<float, float>[]> get_min_max_peaks(unsigned width) const;
+
+private:
+       mutable std::mutex mu;
+       std::vector<float> vals;  // Under <mutex>.
+       double sample_rate;  // Under <mutex>.
+       std::chrono::steady_clock::time_point first_sample;  // Under <mutex>.
+};
+
+#endif