Skip to content

Commit b92c090

Browse files
cloudmarkrobot-ci-heartexnikitabelonogovbmartelmakseq
authored
feat: FIT-173: Audio spectrograms (#7400)
Co-authored-by: robot-ci-heartex <[email protected]> Co-authored-by: Nikita Belonogov <[email protected]> Co-authored-by: Brandon Martel <[email protected]> Co-authored-by: makseq <[email protected]> Co-authored-by: bmartel <[email protected]>
1 parent 2c2efea commit b92c090

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+5807
-1484
lines changed

web/libs/editor/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@
3939
"sanitize-html": "^2.12.1",
4040
"strman": "^2.0.1",
4141
"wavesurfer.js": "^6.0.1",
42-
"xpath-range": "^1.1.1"
42+
"xpath-range": "^1.1.1",
43+
"colormap": "^2.3.2",
44+
"webfft": "^1.0.3"
4345
},
4446
"main": "src/index.js"
4547
}

web/libs/editor/src/components/Timeline/Controls.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ export const Controls: FC<TimelineControlsProps> = memo(
120120
<ConfigControl
121121
onSetModal={onSetConfigModal}
122122
onAmpChange={props.onAmpChange}
123+
onSpectrogramFftSamplesChange={props.onSpectrogramFftSamplesChange}
124+
onNumberOfMelBandsChange={props.onNumberOfMelBandsChange}
125+
onSpectrogramWindowingFunctionChange={props.onSpectrogramWindowingFunctionChange}
126+
onSpectrogramColorSchemeChange={props.onSpectrogramColorSchemeChange}
123127
configModal={configModal}
124128
onSpeedChange={(speed: number) => onSpeedChange?.(speed)}
125129
speed={props.speed || 0}

web/libs/editor/src/components/Timeline/Controls/ConfigControl.scss

Lines changed: 98 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,97 @@
22
position: relative;
33

44
&__modal {
5-
left: 0;
6-
top: 36px;
7-
position: absolute;
8-
width: 260px;
5+
position: fixed;
6+
width: 360px;
7+
max-height: 500px;
98
background: var(--color-neutral-background);
109
box-shadow: 0 4px 10px 0 rgba(var(--color-neutral-shadow-raw) / 30%);
1110
border-radius: 4px;
12-
padding: 12px 0 0;
13-
z-index: 10;
11+
padding: 0;
12+
z-index: 102;
13+
display: flex;
14+
flex-direction: column;
15+
opacity: 1;
16+
transition: opacity 0.15s ease-in-out;
17+
18+
&__toggle {
19+
padding-block: var(--spacing-tight);
20+
margin-bottom: 5px;
21+
}
22+
23+
.audio-config__slider-container {
24+
padding: 28px 16px 0;
25+
26+
.ant-slider {
27+
margin-left: 10px;
28+
margin-right: 20px;
29+
margin-bottom: 5px;
30+
31+
.ant-slider-mark {
32+
.ant-slider-mark-text {
33+
top: auto;
34+
bottom: 20px;
35+
font-size: 12px;
36+
transform: none;
37+
color: var(--color-neutral-content);
38+
}
39+
}
40+
}
41+
42+
.audio-config__control {
43+
display: flex;
44+
align-items: center;
45+
justify-content: space-between;
46+
margin-top: 8px;
47+
48+
.audio-config__input {
49+
width: 40px;
50+
height: 24px;
51+
border-radius: 2px;
52+
background: var(--color-neutral-surface);
53+
border: 1px solid var(--color-neutral-border);
54+
line-height: 24px;
55+
padding: 0;
56+
text-align: center;
57+
outline: none;
58+
margin-left: 10px;
59+
60+
&--error {
61+
color: var(--color-negative-content);
62+
border: 1px solid var(--color-negative-border);
63+
}
64+
}
65+
}
66+
}
1467
}
1568

16-
&__toggle {
17-
padding: 8px 16px;
18-
font-size: 12px;
69+
&__range-handle {
70+
&::before {
71+
width: 14px !important;
72+
height: 14px !important;
73+
box-shadow: none;
74+
}
1975
}
2076

21-
&__range {
22-
margin: 0 20px;
23-
width: calc(100% - 40px);
77+
&__scroll-content {
78+
flex-grow: 1;
79+
overflow-y: auto;
2480
padding: 0;
81+
82+
>.audio-config__slider-container,
83+
>.audio-config__toggle {
84+
padding: 8px 16px;
85+
}
2586
}
2687

2788
&__buttons {
28-
margin-top: 10px;
89+
margin-top: 0;
2990
padding: 2px 0;
3091
border-top: 1px solid var(--color-neutral-border);
3192
font-size: 14px;
3293
cursor: pointer;
94+
flex-shrink: 0;
95+
background: var(--color-neutral-background);
3396
}
3497

3598
&__menu-button {
@@ -42,4 +105,26 @@
42105
background: var(--color-primary-emphasis-subtle);
43106
}
44107
}
108+
109+
110+
&__section-header {
111+
position: sticky;
112+
top: 0;
113+
z-index: 1;
114+
background-color: var(--color-neutral-background);
115+
color: var(--color-neutral-content-subtler);
116+
font-size: 11px;
117+
font-weight: 500;
118+
text-transform: uppercase;
119+
padding: 6px 16px;
120+
border-top: 1px solid var(--color-neutral-border);
121+
border-bottom: 1px solid var(--color-neutral-border);
122+
margin: 0 0 8px;
123+
124+
&:first-child {
125+
border-top: none;
126+
border-top-left-radius: 4px;
127+
border-top-right-radius: 4px;
128+
}
129+
}
45130
}

0 commit comments

Comments
 (0)