mirror of
https://github.com/KrisKennaway/ii-sound.git
synced 2024-06-02 01:41:30 +00:00
4090c502a8
faster to do this once when converting an audio file many times.
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""Converts an input file to 1.024MHz wav file used by encode_audio.py"""
|
|
|
|
import argparse
|
|
import librosa
|
|
import numpy
|
|
import soundfile
|
|
|
|
|
|
def preprocess(
|
|
filename: str, target_sample_rate: int, normalize: float = 1.0,
|
|
normalization_percentile: int = 100) -> numpy.ndarray:
|
|
"""Upscale input audio to target sample rate and normalize signal."""
|
|
|
|
data, _ = librosa.load(filename, sr=target_sample_rate, mono=True)
|
|
|
|
max_value = numpy.percentile(data, normalization_percentile)
|
|
data /= max_value
|
|
data *= normalize
|
|
|
|
return data
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--clock", choices=['pal', 'ntsc'],
|
|
help="Whether target machine clock speed is PAL ("
|
|
"1015657Hz) or NTSC (1020484)",
|
|
required=True)
|
|
parser.add_argument("input", type=str, help="input audio file to convert")
|
|
parser.add_argument("output", type=str, help="output audio file")
|
|
args = parser.parse_args()
|
|
|
|
# Effective clock rate, including every-65 cycle "long cycle" that takes
|
|
# 16/14 as long.
|
|
sample_rate = 1015657 if args.clock == 'pal' else 1020484 # NTSC
|
|
|
|
soundfile.write(args.output, preprocess(args.input, sample_rate),
|
|
sample_rate)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|