File spectrogram_core.h¶
File List > doppler > spectrogram > spectrogram_core.h
Go to the documentation of this file
#ifndef DP_SPECTROGRAM_CORE_H
#define DP_SPECTROGRAM_CORE_H
#include "doppler/clib_common.h"
#include "doppler/dp_state.h"
#include "doppler/f32_buffer/f32_buffer_core.h"
#include "doppler/psd/psd_core.h"
#include <stddef.h>
#include <stdint.h>
#include "doppler/dp_interrupt_guard/dp_interrupt_guard_core.h"
#ifdef __cplusplus
extern "C"
{
#endif
#define SPECTROGRAM_STATE_MAGIC DP_FOURCC ('S', 'P', 'G', 'M')
/* v2: the blob carries the configuration (mode, nfft, hop, window, beta) so a
* restore refuses a blob whose rows would mean something else (#2102). */
#define SPECTROGRAM_STATE_VERSION 2u
/* The row units. The Python face binds "power" and "db" to these constants
* by name (just-makeit.toml, `[[enum]] spectrogram_mode`), so their order is
* this header's alone. */
/* SSOT: enum=spectrogram_mode */
enum
{
DP_SPECTROGRAM_POWER = 0,
DP_SPECTROGRAM_DB = 1
};
typedef struct
{
dp_psd_kernel_t k;
dp_f32_t *ring;
dp_f32_framer_t fr;
float _Complex *last;
size_t nfft;
size_t hop;
int window;
float beta;
int mode;
size_t consumed;
} dp_spectrogram_state_t;
dp_spectrogram_state_t *dp_spectrogram_create (size_t nfft, size_t hop,
int window, float beta,
int mode);
void dp_spectrogram_destroy (dp_spectrogram_state_t *s);
void dp_spectrogram_reset (dp_spectrogram_state_t *s);
size_t dp_spectrogram_push (dp_spectrogram_state_t *s,
const float _Complex *in, size_t n_in, float *out,
size_t max_out);
size_t dp_spectrogram_push_max_out (const dp_spectrogram_state_t *s,
size_t n_in);
size_t dp_spectrogram_consumed (const dp_spectrogram_state_t *s);
size_t dp_spectrogram_rows_for (const dp_spectrogram_state_t *s,
size_t n_in);
int64_t dp_spectrogram_flush (dp_spectrogram_state_t *s, float *row,
size_t row_len);
size_t dp_spectrogram_flush_max_out (const dp_spectrogram_state_t *s);
size_t dp_spectrogram_pending (const dp_spectrogram_state_t *s);
size_t dp_spectrogram_state_bytes (const dp_spectrogram_state_t *s);
void dp_spectrogram_get_state (const dp_spectrogram_state_t *s, void *blob);
int dp_spectrogram_set_state (dp_spectrogram_state_t *s, const void *blob);
#ifdef __cplusplus
}
#endif
#endif /* DP_SPECTROGRAM_CORE_H */