| import ffmpeg |
| import numpy as np |
|
|
| |
| |
| import os |
| import sys |
|
|
| import random |
|
|
| import csv |
|
|
| platform_stft_mapping = { |
| "linux": "stftpitchshift", |
| "darwin": "stftpitchshift", |
| "win32": "stftpitchshift.exe", |
| } |
|
|
| stft = platform_stft_mapping.get(sys.platform) |
| |
|
|
|
|
| def CSVutil(file, rw, type, *args): |
| if type == "formanting": |
| if rw == "r": |
| with open(file) as fileCSVread: |
| csv_reader = list(csv.reader(fileCSVread)) |
| return ( |
| (csv_reader[0][0], csv_reader[0][1], csv_reader[0][2]) |
| if csv_reader is not None |
| else (lambda: exec('raise ValueError("No data")'))() |
| ) |
| else: |
| if args: |
| doformnt = args[0] |
| else: |
| doformnt = False |
| qfr = args[1] if len(args) > 1 else 1.0 |
| tmb = args[2] if len(args) > 2 else 1.0 |
| with open(file, rw, newline="") as fileCSVwrite: |
| csv_writer = csv.writer(fileCSVwrite, delimiter=",") |
| csv_writer.writerow([doformnt, qfr, tmb]) |
| elif type == "stop": |
| stop = args[0] if args else False |
| with open(file, rw, newline="") as fileCSVwrite: |
| csv_writer = csv.writer(fileCSVwrite, delimiter=",") |
| csv_writer.writerow([stop]) |
|
|
|
|
| def load_audio(file, sr, DoFormant, Quefrency, Timbre): |
| converted = False |
| DoFormant, Quefrency, Timbre = CSVutil("csvdb/formanting.csv", "r", "formanting") |
| try: |
| |
| |
| |
| file = ( |
| file.strip(" ").strip('"').strip("\n").strip('"').strip(" ") |
| ) |
| file_formanted = file.strip(" ").strip('"').strip("\n").strip('"').strip(" ") |
|
|
| |
|
|
| if ( |
| lambda DoFormant: True |
| if DoFormant.lower() == "true" |
| else (False if DoFormant.lower() == "false" else DoFormant) |
| )(DoFormant): |
| numerator = round(random.uniform(1, 4), 4) |
| |
| |
|
|
| if not file.endswith(".wav"): |
| if not os.path.isfile(f"{file_formanted}.wav"): |
| converted = True |
| |
| |
| converting = ( |
| ffmpeg.input(file_formanted, threads=0) |
| .output(f"{file_formanted}.wav") |
| .run( |
| cmd=["ffmpeg", "-nostdin"], |
| capture_stdout=True, |
| capture_stderr=True, |
| ) |
| ) |
| else: |
| pass |
|
|
| file_formanted = ( |
| f"{file_formanted}.wav" |
| if not file_formanted.endswith(".wav") |
| else file_formanted |
| ) |
|
|
| print(f" · Formanting {file_formanted}...\n") |
|
|
| os.system( |
| '%s -i "%s" -q "%s" -t "%s" -o "%sFORMANTED_%s.wav"' |
| % ( |
| stft, |
| file_formanted, |
| Quefrency, |
| Timbre, |
| file_formanted, |
| str(numerator), |
| ) |
| ) |
|
|
| print(f" · Formanted {file_formanted}!\n") |
|
|
| |
| |
| |
|
|
| out, _ = ( |
| ffmpeg.input( |
| "%sFORMANTED_%s.wav" % (file_formanted, str(numerator)), threads=0 |
| ) |
| .output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr) |
| .run( |
| cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True |
| ) |
| ) |
|
|
| try: |
| os.remove("%sFORMANTED_%s.wav" % (file_formanted, str(numerator))) |
| except Exception: |
| pass |
| print("couldn't remove formanted type of file") |
|
|
| 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}") |
|
|
| if converted: |
| try: |
| os.remove(file_formanted) |
| except Exception: |
| pass |
| print("couldn't remove converted type of file") |
| converted = False |
|
|
| return np.frombuffer(out, np.float32).flatten() |
|
|