yum-archive/TaSTT-Whisper
High-performance GPGPU inference of OpenAI's Whisper automatic speech recognition (ASR) model
git clone https://git.yummers.dev/yum-archive/TaSTT-Whisper
3f3a9a1
master
1#include "stdafx.h" 2#include "logger.h" 3#include "miscUtils.h" 4 5namespace 6{ 7using namespace Whisper ; 8 9// Terminal color map. 10 colors grouped in ranges [0.0, 0.1, ..., 0.9] 10// Lowest is red, middle is yellow, highest is green. 11static const std::array < const char * ,10 > k_colors = 12 { 13"\033[38;5;196m" ,"\033[38;5;202m" ,"\033[38;5;208m" ,"\033[38;5;214m" ,"\033[38;5;220m" , 14"\033[38;5;226m" ,"\033[38;5;190m" ,"\033[38;5;154m" ,"\033[38;5;118m" ,"\033[38;5;82m" , 15 }; 16 17static int colorIndex (const sToken & tok ) 18 { 19const float p = tok .probability ; 20const float p3 = p * p * p ; 21int col = (int )(p3 * float (k_colors .size () ) ); 22col = std::max (0 , std::min ( (int )k_colors .size ()- 1 ,col ) ); 23return col ; 24 } 25} 26 27void printTime (CStringA & rdi ,Whisper ::sTimeSpan time ,bool comma ) 28{ 29Whisper ::sTimeSpanFields fields = time ; 30const uint32_t hours = fields .days * 24 + fields .hours ; 31const char separator = comma ?',' :'.' ; 32rdi .AppendFormat ("%02d:%02d:%02d%c%03d" , 33 (int )hours , 34 (int )fields .minutes , 35 (int )fields .seconds , 36separator , 37fields .ticks /10'000 ); 38} 39 40HRESULT logNewSegments (const iTranscribeResult * results ,size_t newSegments ,bool printSpecial ) 41{ 42sTranscribeLength length ; 43CHECK (results -> getSize (length ) ); 44 45const size_t len = length .countSegments ; 46size_t i = len - newSegments ; 47 48const sSegment * const segments = results -> getSegments (); 49const sToken * const tokens = results -> getTokens (); 50 51CStringA str ; 52for ( ;i < len ;i ++ ) 53 { 54const sSegment & seg = segments [i ]; 55str = "[" ; 56printTime (str ,seg .time .begin ); 57str += " --> " ; 58printTime (str ,seg .time .end ); 59str += "] " ; 60 61for (uint32_t j = 0 ;j < seg .countTokens ;j ++ ) 62 { 63const sToken & tok = tokens [seg .firstToken + j ]; 64if ( !printSpecial && (tok .flags & eTokenFlags::Special ) ) 65continue ; 66str += k_colors [colorIndex (tok ) ]; 67str += tok .text ; 68str += "\033[0m" ; 69 } 70logInfo (u8"%s" ,cstr (str ) ); 71 } 72 73return S_OK ; 74}