Skip to content
Snippets Groups Projects
Commit 552a129e authored by ferrari's avatar ferrari
Browse files

Fix smart mode with two channels

Fix uneven w_size
Fix error for path without extension
Improve dB precision
parent 0a17ce28
No related branches found
No related tags found
No related merge requests found
...@@ -79,7 +79,7 @@ def corr(data, pos, w_size, max_tdoa, decimate=1, mode='prepare', hyper=True, ve ...@@ -79,7 +79,7 @@ def corr(data, pos, w_size, max_tdoa, decimate=1, mode='prepare', hyper=True, ve
mat[k, j - 1] = 1 mat[k, j - 1] = 1
v1[k] = i v1[k] = i
v2[k] = j v2[k] = j
dw_size = w_size // decimate dw_size = (w_size // decimate) & ~1
if mode == 'prepare': if mode == 'prepare':
slices = slicer(-(cc_size // 2), cc_size // 2, (num_channels - 1), 16) slices = slicer(-(cc_size // 2), cc_size // 2, (num_channels - 1), 16)
tausf = [] tausf = []
...@@ -136,7 +136,7 @@ def corr(data, pos, w_size, max_tdoa, decimate=1, mode='prepare', hyper=True, ve ...@@ -136,7 +136,7 @@ def corr(data, pos, w_size, max_tdoa, decimate=1, mode='prepare', hyper=True, ve
cc -= cc.min(-1, keepdims=True) cc -= cc.min(-1, keepdims=True)
maxs = cc.max(1, keepdims=True) maxs = cc.max(1, keepdims=True)
cc /= maxs cc /= maxs
maxs = np.log10(maxs.prod()) maxs = np.log10(maxs).sum()
if mode == 'prepare': if mode == 'prepare':
tdoas[i, :2], index = c_corr.c_corr_at(cc, tausf) tdoas[i, :2], index = c_corr.c_corr_at(cc, tausf)
tdoas[i, 2:] = ((tausf[:, index] + dw_size // 2) % dw_size) - dw_size // 2 tdoas[i, 2:] = ((tausf[:, index] + dw_size // 2) % dw_size) - dw_size // 2
...@@ -183,6 +183,10 @@ def main(args): ...@@ -183,6 +183,10 @@ def main(args):
if sound.shape[1] < 2: if sound.shape[1] < 2:
raise ValueError(f'{BColors.FAIL}{args.infile} with channels {args.channel} has not enough channels' raise ValueError(f'{BColors.FAIL}{args.infile} with channels {args.channel} has not enough channels'
f'{BColors.ENDC}') f'{BColors.ENDC}')
elif sound.shape[1] == 2 and args.mode == 'smart':
print(f'{BColors.WARNING}{args.infile} as only 2 channels which is not supported by mode smart. Switching to '
f'on-the-fly mode.{BColors.ENDC}')
args.mode = 'on-the-fly'
if args.inverse is not None: if args.inverse is not None:
for c in args.inverse: for c in args.inverse:
...@@ -229,7 +233,7 @@ def main(args): ...@@ -229,7 +233,7 @@ def main(args):
result1[:, 0] /= sr result1[:, 0] /= sr
result1[:, 3:] /= sr if args.temporal else sr/args.decimate result1[:, 3:] /= sr if args.temporal else sr/args.decimate
columns = ','.join(['pos', 'db_norm', 'db'] + [f't{i}{j}'for i, j in combinations(range(sound.shape[1]), 2)]) columns = ','.join(['pos', 'db_norm', 'db'] + [f't{i}{j}'for i, j in combinations(range(sound.shape[1]), 2)])
stem, ext = args.outfile.rsplit('.', 1) stem, ext = os.path.splitext(args.outfile)
if ext == 'npy': if ext == 'npy':
np.save(args.outfile, result1) np.save(args.outfile, result1)
if not args.no_hyperres: if not args.no_hyperres:
...@@ -359,9 +363,10 @@ if __name__ == "__main__": ...@@ -359,9 +363,10 @@ if __name__ == "__main__":
sys.exit(main(args)) sys.exit(main(args))
except Exception as e: except Exception as e:
trace = getattr(sys, 'gettrace', None) trace = getattr(sys, 'gettrace', None) # if debug is activated, raise the error
if trace is not None: if trace is not None:
if trace(): if trace():
raise e from None raise e from None
print(f'{BColors.WARNING}{type(e).__name__}: {e}{BColors.ENDC}') print(f'{BColors.WARNING}{type(e).__name__}: {e}\n'
f'Enable Debugger for more info{BColors.ENDC}')
sys.exit(2) sys.exit(2)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment