#pragma once
#include "transcribe.h"
#include <cstdint>
#include <functional>
#include <utility>
#include <vector>
namespace transcribe::parakeet::longform {
using Regions = std::vector<std::pair<double, double>>;
struct Params {
int sample_rate = 16000;
double frame_seconds = 0.08; float speech_threshold = 0.5f;
double min_speech_seconds = 0.1;
double min_gap_seconds = 0.1;
double max_segment_seconds = 30.0;
double min_segment_seconds = 1.0;
double min_pause_seconds = 0.2;
double scan_block_seconds = 120.0;
double boundary_window_secs = 0.1;
double min_tail_seconds = 0.5;
int min_feature_samples = 320;
};
struct Segment {
int64_t start = 0; int64_t n_samples = 0;
};
int64_t round_half_even(double x);
Regions speech_regions(const float * probs, int n_frames, const Params & p);
Regions pauses_from_speech(Regions speech, double duration, const Params & p);
double next_cut(const Regions & pauses, const Params & p);
bool fits_one_segment(int64_t n_samples, const Params & p);
std::vector<int64_t> scan_block_sizes(int64_t n_samples, const Params & p);
using SpeechFn = std::function<transcribe_status(int64_t block_start, int64_t block_len, Regions & regions)>;
transcribe_status pause_segments(int64_t n_samples,
const Params & p,
const SpeechFn & speech,
std::vector<Segment> & out);
}