@@ -296,6 +296,26 @@ static VALUE ruby_whisper_initialize(int argc, VALUE *argv, VALUE self) {
296296 return self;
297297}
298298
299+ static void register_callbacks (ruby_whisper_params * rwp, VALUE * self) {
300+ if (!NIL_P (rwp->new_segment_callback_container ->callback ) || 0 != RARRAY_LEN (rwp->new_segment_callback_container ->callbacks )) {
301+ rwp->new_segment_callback_container ->context = self;
302+ rwp->params .new_segment_callback = new_segment_callback;
303+ rwp->params .new_segment_callback_user_data = rwp->new_segment_callback_container ;
304+ }
305+
306+ if (!NIL_P (rwp->progress_callback_container ->callback ) || 0 != RARRAY_LEN (rwp->progress_callback_container ->callbacks )) {
307+ rwp->progress_callback_container ->context = self;
308+ rwp->params .progress_callback = progress_callback;
309+ rwp->params .progress_callback_user_data = rwp->progress_callback_container ;
310+ }
311+
312+ if (!NIL_P (rwp->abort_callback_container ->callback ) || 0 != RARRAY_LEN (rwp->abort_callback_container ->callbacks )) {
313+ rwp->abort_callback_container ->context = self;
314+ rwp->params .abort_callback = abort_callback;
315+ rwp->params .abort_callback_user_data = rwp->abort_callback_container ;
316+ }
317+ }
318+
299319/*
300320 * transcribe a single file
301321 * can emit to a block results
@@ -416,23 +436,7 @@ static VALUE ruby_whisper_transcribe(int argc, VALUE *argv, VALUE self) {
416436 rwp->params .encoder_begin_callback_user_data = &is_aborted;
417437 }
418438
419- if (!NIL_P (rwp->new_segment_callback_container ->callback ) || 0 != RARRAY_LEN (rwp->new_segment_callback_container ->callbacks )) {
420- rwp->new_segment_callback_container ->context = &self;
421- rwp->params .new_segment_callback = new_segment_callback;
422- rwp->params .new_segment_callback_user_data = rwp->new_segment_callback_container ;
423- }
424-
425- if (!NIL_P (rwp->progress_callback_container ->callback ) || 0 != RARRAY_LEN (rwp->progress_callback_container ->callbacks )) {
426- rwp->progress_callback_container ->context = &self;
427- rwp->params .progress_callback = progress_callback;
428- rwp->params .progress_callback_user_data = rwp->progress_callback_container ;
429- }
430-
431- if (!NIL_P (rwp->abort_callback_container ->callback ) || 0 != RARRAY_LEN (rwp->abort_callback_container ->callbacks )) {
432- rwp->abort_callback_container ->context = &self;
433- rwp->params .abort_callback = abort_callback;
434- rwp->params .abort_callback_user_data = rwp->abort_callback_container ;
435- }
439+ register_callbacks (rwp, &self);
436440
437441 if (whisper_full_parallel (rw->context , rwp->params , pcmf32.data (), pcmf32.size (), 1 ) != 0 ) {
438442 fprintf (stderr, " failed to process audio\n " );
0 commit comments