annotate multispectro/assemble_images.py @ 2449:4bab5bbce195

show-specific changes
author drewp@bigasterisk.com
date Mon, 03 Jun 2024 22:59:28 -0700
parents af83aeef8b0a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2445
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
1 # #!/bin/zsh
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
2
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
3 import os
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
4 import subprocess
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
5
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
6 import cv2
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
7 import numpy as np
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
8
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
9 for songname in [
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
10 '01-guest',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
11 '02_dancing_happy',
2449
4bab5bbce195 show-specific changes
drewp@bigasterisk.com
parents: 2445
diff changeset
12 '03-bear-trim2',
2445
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
13 '03-bear',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
14 '04-disneyswing',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
15 '05-encanto',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
16 '06-frozen',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
17 '07-onejump',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
18 '08-lionking',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
19 '09-pianoman-mix',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
20 '10-disneytap',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
21 '11-club',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
22 '12-sunnyside2',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
23 '13-supercali',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
24 '14-groove',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
25 '15-mermaid',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
26 '16-all',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
27 '17-parade-mix',
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
28 ]:
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
29
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
30 WAV_DIR = f"/tmp/htdemucs/{songname}"
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
31 instruments = [
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
32 ("vocals", "3k", (1, .3, 0)),
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
33 ("other", "3k", (1, .8, .5)),
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
34 ("drums", "1k", (1, .9, 1)),
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
35 ("bass", "400", (0, .4, 1)),
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
36 ]
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
37
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
38 def generate_spectrogram(input_file, output_file, rate):
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
39 command = ["sox", input_file, "-n", "remix", "1", "rate", rate, "spectrogram", "-X", "50", "-y", "100", "-z", "80", "-m", "-r", "-o", output_file]
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
40 subprocess.check_call(command)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
41
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
42 def tint_image(img, tint):
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
43 img = img.astype(np.float32) / 255
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
44 tint_img = np.full((img.shape[0], img.shape[1], 3), tint[::-1], dtype=np.float32)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
45 return cv2.multiply(img, tint_img)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
46
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
47 stack = []
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
48 for name, rate, tint in instruments:
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
49 input_file = f"{WAV_DIR}/{name}.wav"
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
50 spectro_file = f"/tmp/spectro_{name}.png"
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
51 generate_spectrogram(input_file, spectro_file, rate)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
52 img = cv2.imread(spectro_file)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
53 tinted_img = tint_image(img, tint)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
54 stack.append(tinted_img)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
55
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
56 out = np.concatenate(stack, axis=0)
af83aeef8b0a fancier spectrograms
drewp@bigasterisk.com
parents:
diff changeset
57 cv2.imwrite(os.path.expandvars(f"$LIGHT9_SHOW/spectrogram/{songname}.png"), out * 255)