chore: import upstream snapshot with attribution
This commit is contained in:
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../python/example/test.wav
|
||||
Executable
+37
@@ -0,0 +1,37 @@
|
||||
#!/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
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "vosk"
|
||||
|
||||
SAMPLE_RATE = 16_000
|
||||
|
||||
Vosk.log_level = -1
|
||||
|
||||
model = Vosk::Model.new(lang: "en-us")
|
||||
rec = Vosk::KaldiRecognizer.new(model, SAMPLE_RATE)
|
||||
rec.words = true
|
||||
|
||||
IO.popen(["ffmpeg", "-loglevel", "quiet", "-i", "audio.mp4",
|
||||
"-ar", SAMPLE_RATE.to_s, "-ac", "1", "-f", "s16le", "-",]) do |stream|
|
||||
puts rec.srt_result(stream)
|
||||
end
|
||||
Executable
+34
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "vosk"
|
||||
require "wavefile"
|
||||
|
||||
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 specify the possible word or phrase list as JSON list,
|
||||
# the order doesn't have to be strict
|
||||
rec = Vosk::KaldiRecognizer.new(
|
||||
model, reader_format.sample_rate,
|
||||
'["oh one two three", "four five six", "seven eight nine zero", "[unk]"]',
|
||||
)
|
||||
|
||||
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
|
||||
rec.grammar = '["one zero one two three oh", "four five six", "seven eight nine zero", "[unk]"]'
|
||||
else
|
||||
puts rec.partial_result
|
||||
end
|
||||
end
|
||||
puts rec.final_result
|
||||
end
|
||||
Reference in New Issue
Block a user