I would like to generate RMS values for hundreds of sound files for a research project. I hope there is a way to do so - otherwise I have to open each one, select the whole track, generate the RMS value, then transcribe the value to a spreadsheet.
Have you considered using Python?
Thanks Steve, It is likely a great suggestion. I am not familiar with Python. I think I need to find a research collaborator who does! Jim
It could also be done with Audacity’s built-in scripting language “Nyquist”, but it is just as easy with Python, and I’d expect that it’ll be easier to find a collaborator that knows a bit of Python. A Python solution will also be more flexible, and probably a lot quicker / more efficient.
If your sound files are in WAV format, then a Python solution is even easier as Python has the built-in ability to read WAV files (using the wave
module).
Here’s the basic approach that I would take for measuring the RMS of 16-bit mono WAV files:
import wave
import numpy as np
def calculate_rms(file_path):
"""Return RMS of a mono WAV file."""
with wave.open(file_path, 'rb') as wav_file:
samples = wav_file.getnframes()
audio_data = wav_file.readframes(samples)
# Convert the audio data to a NumPy array
audio_array = np.frombuffer(audio_data, dtype=np.int16) / 2 ** 15
return np.sqrt(np.mean(np.square(audio_array)))
# Example usage.
# (You will probably want to iterate through a
# list of files rather than one by one.)
file = "/path/to/mono_file.wav" # Replace with actual path.
rms_value = calculate_rms(file)
# You will probably want to write to a file rather than just
# printing the value.
print(f'RMS value: {rms_value} linear, {20 * np.log10(rms_value)} dB.')
This topic was automatically closed after 30 days. New replies are no longer allowed.