forked from cgvr/DeltaVR
52 lines
1.2 KiB
Python
52 lines
1.2 KiB
Python
import os
|
|
import librosa
|
|
import numpy as np
|
|
|
|
# === CONFIG ===
|
|
FRAME_DURATION = 0.02 # 20 ms windows
|
|
GAIN = 1.0 # multiply RMS values (set to e.g. 30.0 if you want larger values)
|
|
EXTENSION = ".txt" # output file extension
|
|
|
|
|
|
def process_wav(filepath):
|
|
print(f"Processing: {filepath}")
|
|
|
|
# Load audio
|
|
audio, sr = librosa.load(filepath, mono=True)
|
|
|
|
# Frame size in samples
|
|
frame_len = int(FRAME_DURATION * sr)
|
|
hop_len = frame_len
|
|
|
|
# Compute RMS
|
|
rms = librosa.feature.rms(
|
|
y=audio,
|
|
frame_length=frame_len,
|
|
hop_length=hop_len
|
|
)[0]
|
|
|
|
# Apply optional gain
|
|
rms = rms * GAIN
|
|
|
|
# Save to .txt
|
|
out_path = os.path.splitext(filepath)[0] + EXTENSION
|
|
np.savetxt(out_path, rms, fmt="%.8f")
|
|
|
|
print(f"Saved RMS → {out_path}")
|
|
|
|
|
|
def process_folder(folder_path):
|
|
print(f"Scanning folder: {folder_path}")
|
|
|
|
for filename in os.listdir(folder_path):
|
|
if filename.lower().endswith(".wav"):
|
|
filepath = os.path.join(folder_path, filename)
|
|
process_wav(filepath)
|
|
|
|
print("Done!")
|
|
|
|
|
|
# === Run script ===
|
|
if __name__ == "__main__":
|
|
folder = input("Enter folder path: ").strip()
|
|
process_folder(folder) |