alphacep_vosk-api/ruby/example/test_simple.rb
Vladimir Ulianitsky 9adbd76c77
Add Ruby gem (#2022)
* Init gem

* WIP

* WIP

* WIP: Gemify

* WIP

* Try ffi_gen

* Revert "Try ffi_gen"

This reverts commit a54e56b35a1bdc079dbe122aff47d79038d4e52f.

* Vibecode 1

* Vibecode 2

* rework progressbar

* Some ref + test_captcha

* Return deleted by Claude

* Draft precompiled packaging

* Review and refactor C bindings

* ref OwnedString

* Rename methods and add notes

* rubocop

* Fix progressbar, add examples

* Ref spec

* Ref spec - final

* Final ver

* Add srt, other fixes

* Move to ruby dir

---------

Co-authored-by: Nickolay V. Shmyrev <nshmyrev@gmail.com>
2026-02-22 11:51:10 +03:00

38 lines
988 B
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
require "vosk"
require "wavefile"
# You can set log level to -1 to disable debug messages
Vosk.log_level = 0
WaveFile::Reader.new(ARGV[0]) do |reader|
reader_format = reader.format
unless reader_format.channels == 1 && reader_format.bits_per_sample == 16 && reader_format.sample_format == :pcm
puts("Audio file must be WAV format mono PCM.")
exit(1)
end
model = Vosk::Model.new(lang: "en-us")
# You can also init model by name or with a folder path
# model = Model(model_name: "vosk-model-en-us-0.21")
# model = Model(model_path: "models/en")
rec = Vosk::KaldiRecognizer.new(model, reader_format.sample_rate)
rec.words = true
rec.partial_words = true
reader.each_buffer(4000) do |buffer|
data = buffer.samples.pack(WaveFile::PACK_CODES.dig(:pcm, 16))
if rec.accept_waveform(data).nonzero?
puts rec.result
else
puts rec.partial_result
end
end
puts rec.final_result
end