Loading tests/create_short_testvectors.py +3 −3 Original line number Diff line number Diff line Loading @@ -52,13 +52,13 @@ def create_short_testvectors(): for fs in ['48', '32', '16']: in_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c.wav" cut_gain = "1.0" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut.pcm" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut.wav" cut_samples(in_file, cut_file, NUM_CHANNELS, fs + "000", CUT_FROM, CUT_LEN, cut_gain) cut_gain = "16.0" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.pcm" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.wav" cut_samples(in_file, cut_file, NUM_CHANNELS, fs + "000", CUT_FROM, CUT_LEN, cut_gain) cut_gain = ".004" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.pcm" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.wav" cut_samples(in_file, cut_file, NUM_CHANNELS, fs + "000", CUT_FROM, CUT_LEN, cut_gain) Loading tests/cut_pcm.py +22 −35 Original line number Diff line number Diff line Loading @@ -47,6 +47,13 @@ gain: optional gain value to apply to the copied samples import sys import platform import numpy as np from pathlib import Path HERE = Path(__file__).parent.resolve() SCRIPTS_DIR = str(HERE.joinpath("../scripts").resolve()) sys.path.append(SCRIPTS_DIR) from pyaudio3dtools import audiofile def usage(): Loading @@ -56,7 +63,7 @@ def usage(): def cut_samples(in_file, out_file, num_channels, sample_rate, start, duration, gain="1.0"): """ Function to cut samples from a 16-bit PCM file. Function to cut samples from an audio file (wav or pcm) """ # check for python >= 3.7 Loading @@ -64,45 +71,25 @@ def cut_samples(in_file, out_file, num_channels, sample_rate, start, duration, g sys.exit("This script is written for Python >= 3.7. Found: " + platform.python_version()) # all input parameters are strings - convert some num_ch = int(num_channels) fs = int(sample_rate) start_sec = float(start) dur_sec = float(duration) gain_f = float(gain) with open(in_file, "rb") as fid_in: fid_in.seek(0, 2) num_in_samples = fid_in.tell() / 2 num_in_samples_ch = num_in_samples / num_ch s, fs = audiofile.readfile(in_file, num_channels, fs, outdtype="float") num_in_samples = s.shape[0] num_samples_to_skip = int(start_sec * fs) dur_samples = dur_sec * fs if num_samples_to_skip + dur_samples > num_in_samples_ch: dur_samples = int(dur_sec * fs) if num_samples_to_skip + dur_samples > num_in_samples: sys.exit( f"requested too many samples ({num_samples_to_skip}+{dur_samples})" + f" - input is too short ({num_in_samples_ch})" + f" - input is too short ({num_in_samples})" ) num_bytes_to_skip = num_samples_to_skip * num_ch * 2 num_bytes_to_copy = dur_samples * num_ch * 2 fid_in.seek(num_bytes_to_skip, 0) num_clip = 0 with open(out_file, "wb") as fid_out: bytes_written = 0 while bytes_written < num_bytes_to_copy: data = fid_in.read(2) val = int.from_bytes(data, byteorder="little", signed=True) val = int(val * gain_f) if val > 32767: val = 32767 num_clip += 1 if val < -32768: val = -32768 num_clip += 1 data = val.to_bytes(2, byteorder="little", signed=True) written = fid_out.write(data) assert written == 2, f"Error writing data: {written} != {2}" bytes_written += 2 if num_clip: print(f"{num_clip} output samples have been clipped.") s_out = s[num_samples_to_skip:num_samples_to_skip + dur_samples, :] * gain_f audiofile.writefile(out_file, s_out, fs) def main(argv): Loading Loading
tests/create_short_testvectors.py +3 −3 Original line number Diff line number Diff line Loading @@ -52,13 +52,13 @@ def create_short_testvectors(): for fs in ['48', '32', '16']: in_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c.wav" cut_gain = "1.0" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut.pcm" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut.wav" cut_samples(in_file, cut_file, NUM_CHANNELS, fs + "000", CUT_FROM, CUT_LEN, cut_gain) cut_gain = "16.0" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.pcm" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.wav" cut_samples(in_file, cut_file, NUM_CHANNELS, fs + "000", CUT_FROM, CUT_LEN, cut_gain) cut_gain = ".004" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.pcm" cut_file = f"{TEST_VECTOR_DIR}/stvFOA{fs}c_cut_{cut_gain}.wav" cut_samples(in_file, cut_file, NUM_CHANNELS, fs + "000", CUT_FROM, CUT_LEN, cut_gain) Loading
tests/cut_pcm.py +22 −35 Original line number Diff line number Diff line Loading @@ -47,6 +47,13 @@ gain: optional gain value to apply to the copied samples import sys import platform import numpy as np from pathlib import Path HERE = Path(__file__).parent.resolve() SCRIPTS_DIR = str(HERE.joinpath("../scripts").resolve()) sys.path.append(SCRIPTS_DIR) from pyaudio3dtools import audiofile def usage(): Loading @@ -56,7 +63,7 @@ def usage(): def cut_samples(in_file, out_file, num_channels, sample_rate, start, duration, gain="1.0"): """ Function to cut samples from a 16-bit PCM file. Function to cut samples from an audio file (wav or pcm) """ # check for python >= 3.7 Loading @@ -64,45 +71,25 @@ def cut_samples(in_file, out_file, num_channels, sample_rate, start, duration, g sys.exit("This script is written for Python >= 3.7. Found: " + platform.python_version()) # all input parameters are strings - convert some num_ch = int(num_channels) fs = int(sample_rate) start_sec = float(start) dur_sec = float(duration) gain_f = float(gain) with open(in_file, "rb") as fid_in: fid_in.seek(0, 2) num_in_samples = fid_in.tell() / 2 num_in_samples_ch = num_in_samples / num_ch s, fs = audiofile.readfile(in_file, num_channels, fs, outdtype="float") num_in_samples = s.shape[0] num_samples_to_skip = int(start_sec * fs) dur_samples = dur_sec * fs if num_samples_to_skip + dur_samples > num_in_samples_ch: dur_samples = int(dur_sec * fs) if num_samples_to_skip + dur_samples > num_in_samples: sys.exit( f"requested too many samples ({num_samples_to_skip}+{dur_samples})" + f" - input is too short ({num_in_samples_ch})" + f" - input is too short ({num_in_samples})" ) num_bytes_to_skip = num_samples_to_skip * num_ch * 2 num_bytes_to_copy = dur_samples * num_ch * 2 fid_in.seek(num_bytes_to_skip, 0) num_clip = 0 with open(out_file, "wb") as fid_out: bytes_written = 0 while bytes_written < num_bytes_to_copy: data = fid_in.read(2) val = int.from_bytes(data, byteorder="little", signed=True) val = int(val * gain_f) if val > 32767: val = 32767 num_clip += 1 if val < -32768: val = -32768 num_clip += 1 data = val.to_bytes(2, byteorder="little", signed=True) written = fid_out.write(data) assert written == 2, f"Error writing data: {written} != {2}" bytes_written += 2 if num_clip: print(f"{num_clip} output samples have been clipped.") s_out = s[num_samples_to_skip:num_samples_to_skip + dur_samples, :] * gain_f audiofile.writefile(out_file, s_out, fs) def main(argv): Loading