@@ -16,15 +16,21 @@ class WhisperContext private constructor(private var ptr: Long) {
16
16
Executors .newSingleThreadExecutor().asCoroutineDispatcher()
17
17
)
18
18
19
- suspend fun transcribeData (data : FloatArray ): String = withContext(scope.coroutineContext) {
19
+ suspend fun transcribeData (data : FloatArray , printTimestamp : Boolean = true ): String = withContext(scope.coroutineContext) {
20
20
require(ptr != 0L )
21
21
val numThreads = WhisperCpuConfig .preferredThreadCount
22
22
Log .d(LOG_TAG , " Selecting $numThreads threads" )
23
23
WhisperLib .fullTranscribe(ptr, numThreads, data)
24
24
val textCount = WhisperLib .getTextSegmentCount(ptr)
25
25
return @withContext buildString {
26
26
for (i in 0 until textCount) {
27
- append(WhisperLib .getTextSegment(ptr, i))
27
+ if (printTimestamp) {
28
+ val textTimestamp = " [${toTimestamp(WhisperLib .getTextSegmentT0(ptr, i))} --> ${toTimestamp(WhisperLib .getTextSegmentT1(ptr, i))} ]"
29
+ val textSegment = WhisperLib .getTextSegment(ptr, i)
30
+ append(" $textTimestamp : $textSegment \n " )
31
+ } else {
32
+ append(WhisperLib .getTextSegment(ptr, i))
33
+ }
28
34
}
29
35
}
30
36
}
@@ -131,12 +137,29 @@ private class WhisperLib {
131
137
external fun fullTranscribe (contextPtr : Long , numThreads : Int , audioData : FloatArray )
132
138
external fun getTextSegmentCount (contextPtr : Long ): Int
133
139
external fun getTextSegment (contextPtr : Long , index : Int ): String
140
+ external fun getTextSegmentT0 (contextPtr : Long , index : Int ): Long
141
+ external fun getTextSegmentT1 (contextPtr : Long , index : Int ): Long
134
142
external fun getSystemInfo (): String
135
143
external fun benchMemcpy (nthread : Int ): String
136
144
external fun benchGgmlMulMat (nthread : Int ): String
137
145
}
138
146
}
139
147
148
+ // 500 -> 00:05.000
149
+ // 6000 -> 01:00.000
150
+ private fun toTimestamp (t : Long , comma : Boolean = false): String {
151
+ var msec = t * 10
152
+ val hr = msec / (1000 * 60 * 60 )
153
+ msec - = hr * (1000 * 60 * 60 )
154
+ val min = msec / (1000 * 60 )
155
+ msec - = min * (1000 * 60 )
156
+ val sec = msec / 1000
157
+ msec - = sec * 1000
158
+
159
+ val delimiter = if (comma) " ," else " ."
160
+ return String .format(" %02d:%02d:%02d%s%03d" , hr, min, sec, delimiter, msec)
161
+ }
162
+
140
163
private fun isArmEabiV7a (): Boolean {
141
164
return Build .SUPPORTED_ABIS [0 ].equals(" armeabi-v7a" )
142
165
}
0 commit comments