|
import subprocess |
|
import sys |
|
import os |
|
import time |
|
|
|
def process_audio(wav_file, model_name="base.en"): |
|
""" |
|
Processes an audio file using a specified model and returns the processed string. |
|
|
|
:param wav_file: Path to the WAV file |
|
:param model_name: Name of the model to use |
|
:return: Processed string output from the audio processing |
|
:raises: Exception if an error occurs during processing |
|
""" |
|
|
|
|
|
model = f"{model_name}.bin" |
|
|
|
|
|
if not os.path.exists(model): |
|
raise FileNotFoundError(f"Model file not found: {model} \n\nDownload a model with this command:\n\n> bash ./models/download-ggml-model.sh {model_name}\n\n") |
|
|
|
if not os.path.exists(wav_file): |
|
raise FileNotFoundError(f"WAV file not found: {wav_file}") |
|
|
|
full_command = f"./main -m {model} -f {wav_file} -np -nt" |
|
|
|
start_time = time.time() |
|
|
|
|
|
process = subprocess.Popen(full_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
|
|
|
|
|
|
output, error = process.communicate() |
|
|
|
end_time = time.time() |
|
|
|
|
|
duration = end_time - start_time |
|
print(f"Time taken for CPP request: {duration:.2f} seconds") |
|
|
|
if error: |
|
raise Exception(f"Error processing audio: {error.decode('utf-8')}") |
|
|
|
|
|
decoded_str = output.decode('utf-8').strip() |
|
processed_str = decoded_str.replace('[BLANK_AUDIO]', '').strip() |
|
|
|
return processed_str |
|
|
|
def main(): |
|
|
|
wav_file = sys.argv[1] |
|
model_name = sys.argv[2] if len(sys.argv) == 3 else "base.en" |
|
print("wav_file: ", wav_file) |
|
print("model_name: ", model_name) |
|
|
|
result = process_audio(wav_file, model_name) |
|
print(result) |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
main() |