in src/data.py [0:0]
def dump_to_folder(self, output: Path, norm_db=False):
for file_path in tqdm.tqdm(self.file_paths):
output_file_path = output / file_path.relative_to(self.path).with_suffix('.h5')
output_file_path.parent.mkdir(parents=True, exist_ok=True)
with NamedTemporaryFile(suffix='.wav') as output_wav_file, \
NamedTemporaryFile(suffix='.wav') as norm_file_path, \
NamedTemporaryFile(suffix='.wav') as wav_convert_file:
if norm_db:
logger.debug(f'Converting {file_path} to {wav_convert_file.name}')
subprocess.run(['ffmpeg',
'-y',
'-i', file_path,
wav_convert_file.name],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
logger.debug(f'Companding {wav_convert_file.name} to {norm_file_path.name}')
subprocess.run(['sox',
'-G',
wav_convert_file.name,
norm_file_path.name,
'compand',
'0.3,1',
'6:-70,-60,-20',
'-5',
'-90',
'0.2'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
input_file_path = norm_file_path.name
else:
input_file_path = file_path
logger.debug(f'Converting {input_file_path} to {output_wav_file.name}')
subprocess.run(['ffmpeg',
'-v', 'quiet',
'-y', # overwrite
'-i', input_file_path,
# '-af', 'dynaudnorm',
'-f', 'wav',
'-ar', str(self.WAV_FREQ), # audio rate
'-ac', '1', # audio channels,
output_wav_file.name
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
try:
rate, wav_data = wavfile.read(output_wav_file.name)
except ValueError:
logger.info(f'Cannot read {file_path} wav conversion')
raise
# raise
assert wav_data.dtype == np.int16
wav = wav_data.astype('float')
with h5py.File(output_file_path, 'w') as output_file:
chunk_shape = (min(10000, len(wav)),)
wav_dset = output_file.create_dataset('wav', wav.shape, dtype=wav.dtype,
chunks=chunk_shape)
wav_dset[...] = wav
logger.debug(f'Saved input {file_path} to {output_file_path}. '
f'Wav length: {wav.shape}')