package Ġpl p . hub . v ad Ċ Ċ import ĠV ad Ċ import ĠV ad Service Grpc Kt Ċ import Ġcom . google . protobuf . ByteString Ċ import Ġpl p . common . GLOBAL _ CONFIG Ċ import Ġpl p . common . rpc . client . Grpc Channel Choice Ċ import Ġpl p . hub . database . Registered Recording Ċ import Ġpl p . logging . Kotlin Logging Ċ import Ġkotlin . io . path . Experimental Path Api Ċ import Ġkotlin . io . path . inputStream Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġa Ġclient Ġfor Ġthe ĠV ad Ġservice , Ġwhich Ġdetermines Ġwhether Ġor Ġnot Ġan Ġaudio Ġclip Ġhas Ġspeech Ġin Ġit . Ċ Ġ*/ Ċ @ Experimental Path Api Ċ class ĠV ad Client ( grpc Channel Choice : ĠGr pc Channel Choice ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġstub : ĠV ad Service Grpc Kt . V ad Service Coroutine Stub Ġ= ĊĠĠĠĠĠĠĠ ĠV ad Service Grpc Kt . V ad Service Coroutine Stub ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrpc Channel Choice . make Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLOBAL _ CONFIG . v ad Service . host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLOBAL _ CONFIG . v ad Service . port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġsuspend Ġfun Ġrecording Has Speech ( recording : ĠRegistered Recording ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" checking Ġ$ recording Ġfor Ġspeech " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Contents Ġ= ĠByte String . read From ( recording . path . inputStream ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠV ad . V ad Request . newBuilder (). setId ( recording . id . toInt ()). set Audio ( file Contents ). build () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġstub . check Audio For Speech ( request ) ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" v ad Ġrespon ded , Ġsaying Ġrecording Ġ${ request . id } Ġis Ġ${ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Speech ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" NOT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġspeech " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . is Speech ĊĠĠĠ Ġ} Ċ } Ċ