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()
|