#include #include "ruby_whisper.h" extern ID id_to_s; extern VALUE cVADContext; extern VALUE ruby_whisper_vad_detect(VALUE self, VALUE file_path, VALUE params); extern VALUE ruby_whisper_normalize_model_path(VALUE model_path); static size_t ruby_whisper_vad_context_memsize(const void *p) { const ruby_whisper_vad_context *rwvc = p; size_t size = sizeof(rwvc); if (!rwvc) { return 0; } if (rwvc->context) { size += sizeof(rwvc->context); } return size; } static void ruby_whisper_vad_context_free(void *p) { ruby_whisper_vad_context *rwvc = (ruby_whisper_vad_context *)p; if (rwvc->context) { whisper_vad_free(rwvc->context); rwvc->context = NULL; } xfree(rwvc); } const rb_data_type_t ruby_whisper_vad_context_type = { "ruby_whisper_vad_context", {0, ruby_whisper_vad_context_free, ruby_whisper_vad_context_memsize,}, 0, 0, 0 }; static VALUE ruby_whisper_vad_context_s_allocate(VALUE klass) { ruby_whisper_vad_context *rwvc; VALUE obj = TypedData_Make_Struct(klass, ruby_whisper_vad_context, &ruby_whisper_vad_context_type, rwvc); rwvc->context = NULL; return obj; } static VALUE ruby_whisper_vad_context_initialize(VALUE self, VALUE model_path) { ruby_whisper_vad_context *rwvc; struct whisper_vad_context *context; model_path = ruby_whisper_normalize_model_path(model_path); context = whisper_vad_init_from_file_with_params(StringValueCStr(model_path), whisper_vad_default_context_params()); if (context == NULL) { rb_raise(rb_eRuntimeError, "Failed to initialize whisper VAD context"); } TypedData_Get_Struct(self, ruby_whisper_vad_context, &ruby_whisper_vad_context_type, rwvc); rwvc->context = context; return Qnil; } void init_ruby_whisper_vad_context(VALUE *mVAD) { cVADContext = rb_define_class_under(*mVAD, "Context", rb_cObject); rb_define_alloc_func(cVADContext, ruby_whisper_vad_context_s_allocate); rb_define_method(cVADContext, "initialize", ruby_whisper_vad_context_initialize, 1); rb_define_method(cVADContext, "detect", ruby_whisper_vad_detect, 2); }