printf("[listening]\n"); while (1) { std::unique_lock lock(state.lock); while (state.clips.size() == 0) { state.cond.wait(lock); } auto clip = state.clips.front(); state.clips.pop_front(); lock.unlock(); auto t_start = std::chrono::high_resolution_clock::now(); std::vector data; for (auto const &frame : clip) { std::copy(frame.samples.begin(), frame.samples.end(), std::back_inserter(data)); } w2l_emission *emission = w2l_engine_process(engine, &data[0], data.size()); char *text = NULL; // emit text = w2l_emission_text(emission); auto t_emit = std::chrono::high_resolution_clock::now() - t_start; bool emit = false; if (strlen(text) > 0) { printf("[emit] %s\n", text); emit = true; } free(text); // decode t_start = std::chrono::high_resolution_clock::now(); if (decoder) { text = w2l_decoder_decode(decoder, emission); if (strlen(text) > 0) printf("[dec] %s\n", text); free(text); } auto t_decode = std::chrono::high_resolution_clock::now() - t_start; w2l_emission_free(emission); if (emit) { double elapsed_emit = std::chrono::duration(t_emit).count(); double elapsed_decode = std::chrono::duration(t_decode).count(); double elapsed_audio = (double)clip.size() * frame_time * 1000; printf("[audio]=%.3fms [emit]=%.3fms (%.2fx) [decode]=%.3fms (%.2fx) [total]=%.3fms (%.2fx)\n", elapsed_audio, elapsed_emit, elapsed_emit/elapsed_audio, elapsed_decode, elapsed_decode/elapsed_audio, elapsed_emit + elapsed_decode, (elapsed_emit+elapsed_decode)/elapsed_audio ); } lock.lock(); }