Exemple #1
0
def response_audio_with_audio(name: str = Form(...), file: UploadFile = File(...)):
    """
    Receive blob(wav) file, store it to disk
    :param name: Name field in formdata, refers to file name
    :param file: File field in formdata, refers to the blob file
    :return: responses in dict
    """
    # file name of wav file received from network
    filename = f"./data/{name}.wav"

    # output full path of speech synthesis
    wav_output_dir = os.path.join(os.getcwd(), "data")

    # Save the wav file from network
    with open(filename, "wb") as f:
        f.write(file.file.read())

    # Down sampling
    down_sample(filename, 16000)

    # convert wav to text, and get text response
    converted_str = wav_file_to_str(name)
    responses = get_rasa_response(converted_str)

    # for every returned response, if contains text, convert it into base64 encoded audio and add it
    for i, response in enumerate(responses):
        if "text" in response.keys():
            str_to_wav_file(response['text'], wav_output_dir)
            with open(os.path.join(wav_output_dir, "out.wav"), "rb") as f:
                wav_encoded = base64.b64encode(f.read())
                response["audio"] = wav_encoded

    return responses
Exemple #2
0
def response_wav_with_wav_bin(wav_data: bytes = File(...)):
    converted_str = wav_bin_to_str(wav_data)
    responses = get_rasa_response(converted_str, "nano")

    zip_container = io.BytesIO()
    zf = zipfile.ZipFile(zip_container, "w")

    for response in responses:
        if "text" in response.keys():
            text = response['text']

            wav = str_to_wav_bin(text)
            zf.writestr(text, wav)

    zf.close()
    zip_container.seek(0)

    return StreamingResponse(zip_container, media_type="application/x-zip-compressed")
Exemple #3
0
def response_message_with_audio(message: Message):
    """
    Temp method, receive message, send audio response
    :param message:
    :return:
    """
    wav_output_dir = os.path.join(os.getcwd(), "data")

    text = message.message

    responses = get_rasa_response(text)
    for index, response in enumerate(responses):
        if "text" in response.keys():
            str_to_wav_file(response['text'], wav_output_dir)
            with open(os.path.join(wav_output_dir, "out.wav"), "rb") as f:
                wav_encoded = base64.b64encode(f.read())
                response["audio"] = wav_encoded

    return responses
Exemple #4
0
def response_message_with_message(message: Message):
    """
    Receive text message, simply forward it to rasa server
    :return: Response from rasa
    """
    return get_rasa_response(message.message, message.sender)