import ffmpeg
import numpy as np

# import praatio
# import praatio.praat_scripts
import os

# from os.path import join

# praatEXE = join('.',os.path.abspath(os.getcwd()) + r"\Praat.exe")


def load_audio(file, sr, DoFormant, Quefrency, Timbre):
    try:
        # https://github.com/openai/whisper/blob/main/whisper/audio.py#L26
        # This launches a subprocess to decode audio while down-mixing and resampling as necessary.
        # Requires the ffmpeg CLI and `ffmpeg-python` package to be installed.
        file = (
            file.strip(" ").strip('"').strip("\n").strip('"').strip(" ")
        )  # 防止小白拷路径头尾带了空格和"和回车
        file_formanted = file.strip(" ").strip('"').strip("\n").strip('"').strip(" ")
        with open("formanting.txt", "r") as fvf:
            content = fvf.readlines()
            if "True" in content[0].split("\n")[0]:
                # print("true")
                DoFormant = True
                Quefrency, Timbre = content[1].split("\n")[0], content[2].split("\n")[0]

            else:
                # print("not true")
                DoFormant = False

        if DoFormant:
            # os.system(f"stftpitchshift -i {file} -q {Quefrency} -t {Timbre} -o {file_formanted}")
            # print('stftpitchshift -i "%s" -p 1.0 --rms -w 128 -v 8 -q %s -t %s -o "%s"' % (file, Quefrency, Timbre, file_formanted))
            print("formanting...")

            os.system(
                'stftpitchshift -i "%s" -q %s -t %s -o "%sFORMANTED"'
                % (file, Quefrency, Timbre, file_formanted)
            )
            print("formanted!")
            # filepraat = (os.path.abspath(os.getcwd()) + '\\' + file).replace('/','\\')
            # file_formantedpraat = ('"' + os.path.abspath(os.getcwd()) + '/' + 'formanted'.join(file_formanted) + '"').replace('/','\\')

            out, _ = (
                ffmpeg.input("%sFORMANTED%s" % (file_formanted, ".wav"), threads=0)
                .output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr)
                .run(
                    cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True
                )
            )

            os.remove("%sFORMANTED%s" % (file_formanted, ".wav"))
        else:
            out, _ = (
                ffmpeg.input(file, threads=0)
                .output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr)
                .run(
                    cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True
                )
            )
    except Exception as e:
        raise RuntimeError(f"Failed to load audio: {e}")

    return np.frombuffer(out, np.float32).flatten()
