audiotools icon indicating copy to clipboard operation
audiotools copied to clipboard

`UnboundLocalError` when calling signal.windows() with `preprocess=False`

Open hugofloresgarcia opened this issue 11 months ago • 1 comments

Traceback (most recent call last):
  File "/home/hugo/descript/vampnet-v0/scripts/utils/split_long_audio_file.py", line 31, in <module>
    split_long_audio_file()
  File "/home/hugo/miniconda3/envs/vampnet/lib/python3.9/site-packages/argbind/argbind.py", line 159, in cmd_func
    return func(*cmd_args, **kwargs)
  File "/home/hugo/descript/vampnet-v0/scripts/utils/split_long_audio_file.py", line 20, in split_long_audio_file
    for sig in tqdm.tqdm(sig.windows(window_duration=max_chunk_size_s, hop_duration=max_chunk_size_s/2, preprocess=False)):
  File "/home/hugo/miniconda3/envs/vampnet/lib/python3.9/site-packages/tqdm/std.py", line 1182, in __iter__
    for obj in iterable:
  File "/home/hugo/miniconda3/envs/vampnet/lib/python3.9/site-packages/audiotools/core/dsp.py", line 61, in windows
    start_idx = i * hop_length
UnboundLocalError: local variable 'hop_length' referenced before assignment

here's a script to repro:

from pathlib import Path
import argbind

import audiotools as at
import tqdm


@argbind.bind(without_prefix=True)
def split_long_audio_file(
    file: str = None, 
    max_chunk_size_s: int = 60*10
):
    file = Path(file)
    output_dir = file.parent / file.stem
    output_dir.mkdir()
    
    sig = at.AudioSignal(file)

    # split into chunks
    for i, sig in tqdm.tqdm(enumerate(sig.windows(
        window_duration=max_chunk_size_s, hop_duration=max_chunk_size_s/2, 
        preprocess=True))
    ):
        sig.write(output_dir / f"{i}.wav")

    print(f"wrote {len(list(output_dir.glob('*.wav')))} files to {output_dir}")
    
    return output_dir

if __name__ == "__main__":
    args = argbind.parse_args()

    with argbind.scope(args):
        split_long_audio_file()

hugofloresgarcia avatar Aug 14 '23 19:08 hugofloresgarcia