primocode 8.19.0 → 8.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,107 @@
1
+ /* ==========================================================================
2
+ sfx.js — efeitos sonoros do Corte, sintetizados na hora.
3
+
4
+ Nenhum arquivo, nenhuma licença: whoosh é ruído filtrado com varredura,
5
+ impacto é um seno grave despencando, click é um blip curto. Tudo entra no
6
+ mesmo grafo da trilha (via `destino`), então a gravação MP4 captura os
7
+ efeitos junto — sem depender de "compartilhar áudio da aba".
8
+
9
+ Uso:
10
+ var sfx = criarSfx(ctx, destino); // destino: nó do grafo (compressor)
11
+ sfx.whoosh(); // transição de cena
12
+ sfx.impacto(); // ênfase (flash, número grande)
13
+ sfx.click(); // entrada de elemento, feedback discreto
14
+
15
+ O volume de cada efeito já vem calibrado para sentar SOB a narração.
16
+ ========================================================================== */
17
+
18
+ function criarSfx(ctx, destino) {
19
+ "use strict";
20
+ if (!ctx || !destino) return null;
21
+
22
+ var saida = ctx.createGain();
23
+ saida.gain.value = 1;
24
+ saida.connect(destino);
25
+
26
+ var ruido = null;
27
+ function bufferRuido() {
28
+ if (ruido) return ruido;
29
+ ruido = ctx.createBuffer(1, ctx.sampleRate * 1.2, ctx.sampleRate);
30
+ var d = ruido.getChannelData(0);
31
+ for (var i = 0; i < d.length; i++) d[i] = Math.random() * 2 - 1;
32
+ return ruido;
33
+ }
34
+
35
+ /* Varredura de ruído — o "passar de página" do vídeo. `variacao` muda o
36
+ miolo da varredura para os whooshes não saírem todos idênticos. */
37
+ function whoosh(variacao) {
38
+ var agora = ctx.currentTime;
39
+ var v = (variacao == null ? Math.random() : variacao) % 1;
40
+ var s = ctx.createBufferSource(), g = ctx.createGain(), f = ctx.createBiquadFilter();
41
+ s.buffer = bufferRuido();
42
+ f.type = "bandpass";
43
+ f.Q.value = 1.1;
44
+ f.frequency.setValueAtTime(300 + v * 300, agora);
45
+ f.frequency.exponentialRampToValueAtTime(2200 + v * 1400, agora + 0.16);
46
+ f.frequency.exponentialRampToValueAtTime(500, agora + 0.42);
47
+ g.gain.setValueAtTime(0.0001, agora);
48
+ g.gain.exponentialRampToValueAtTime(0.11, agora + 0.10);
49
+ g.gain.exponentialRampToValueAtTime(0.0001, agora + 0.45);
50
+ s.connect(f); f.connect(g); g.connect(saida);
51
+ s.start(agora); s.stop(agora + 0.5);
52
+ }
53
+
54
+ /* Seno grave despencando + um sopro de ruído no ataque. */
55
+ function impacto() {
56
+ var agora = ctx.currentTime;
57
+ var o = ctx.createOscillator(), g = ctx.createGain();
58
+ o.type = "sine";
59
+ o.frequency.setValueAtTime(120, agora);
60
+ o.frequency.exponentialRampToValueAtTime(36, agora + 0.5);
61
+ g.gain.setValueAtTime(0.30, agora);
62
+ g.gain.exponentialRampToValueAtTime(0.0001, agora + 0.9);
63
+ o.connect(g); g.connect(saida);
64
+ o.start(agora); o.stop(agora + 1.0);
65
+
66
+ var s = ctx.createBufferSource(), gr = ctx.createGain(), f = ctx.createBiquadFilter();
67
+ s.buffer = bufferRuido();
68
+ f.type = "lowpass";
69
+ f.frequency.value = 900;
70
+ gr.gain.setValueAtTime(0.09, agora);
71
+ gr.gain.exponentialRampToValueAtTime(0.0001, agora + 0.22);
72
+ s.connect(f); f.connect(gr); gr.connect(saida);
73
+ s.start(agora); s.stop(agora + 0.3);
74
+ }
75
+
76
+ /* Blip de interface: curto, agudo, discreto. */
77
+ function click() {
78
+ var agora = ctx.currentTime;
79
+ var o = ctx.createOscillator(), g = ctx.createGain();
80
+ o.type = "sine";
81
+ o.frequency.setValueAtTime(2100, agora);
82
+ g.gain.setValueAtTime(0.06, agora);
83
+ g.gain.exponentialRampToValueAtTime(0.0001, agora + 0.05);
84
+ o.connect(g); g.connect(saida);
85
+ o.start(agora); o.stop(agora + 0.07);
86
+ }
87
+
88
+ /* O efeito certo para a ENTRADA de uma cena, pela transição dela.
89
+ flash e zoom pedem peso; corte seco não pede nada. */
90
+ function transicao(tipo, indice) {
91
+ if (tipo === "corte") return;
92
+ if (tipo === "flash" || tipo === "zoom") return impacto();
93
+ whoosh(((indice || 0) * 0.37) % 1);
94
+ }
95
+
96
+ return {
97
+ whoosh: whoosh,
98
+ impacto: impacto,
99
+ click: click,
100
+ transicao: transicao,
101
+ volume: function (v) { saida.gain.value = v; },
102
+ };
103
+ }
104
+
105
+ if (typeof module !== "undefined" && module.exports) {
106
+ module.exports = { criarSfx: criarSfx };
107
+ }
@@ -67,6 +67,7 @@
67
67
  document.getElementById("btn-baixar").innerHTML = svgIcone("baixar");
68
68
  </script>
69
69
  <script src="/js/audio.js"></script>
70
+ <script src="/js/sfx.js"></script>
70
71
  <script src="/js/voz-neural.js"></script>
71
72
  <script src="/js/narracao.js"></script>
72
73
  <script src="/js/midia.js"></script>
@@ -17,6 +17,7 @@
17
17
  <script src="/js/render-prosa.js"></script>
18
18
  <script src="/js/render-grade.js"></script>
19
19
  <script src="/js/audio.js"></script>
20
+ <script src="/js/sfx.js"></script>
20
21
  <script src="/js/voz-neural.js"></script>
21
22
  <script src="/js/narracao.js"></script>
22
23
  <script src="/js/player.js"></script>
@@ -1,150 +0,0 @@
1
- {
2
- "id": "corte-estatico-corte-a5bab",
3
- "ferramenta": "corte",
4
- "titulo": "estatico-corte",
5
- "doc": {
6
- "tema": "brasa",
7
- "largura": 1080,
8
- "altura": 1920,
9
- "acabamento": "grao",
10
- "trilha": {
11
- "tipo": "gerada",
12
- "estilo": "pulso",
13
- "volume": 0.7
14
- },
15
- "cenas": [
16
- {
17
- "layout": "centro",
18
- "duracao": 3,
19
- "fundo": "aurora",
20
- "transicao": "flash",
21
- "elementos": [
22
- {
23
- "tipo": "texto",
24
- "papel": "titulo",
25
- "texto": "Sua conta subiu\nde novo.",
26
- "tamanho": 124,
27
- "estilo": "gradiente",
28
- "anim": "nenhuma"
29
- }
30
- ]
31
- },
32
- {
33
- "layout": "centro",
34
- "duracao": 3,
35
- "fundo": "vinheta",
36
- "transicao": "limpar",
37
- "elementos": [
38
- {
39
- "tipo": "texto",
40
- "papel": "titulo",
41
- "texto": "E não foi o seu chuveiro.",
42
- "tamanho": 78,
43
- "estilo": "marcador",
44
- "anim": "nenhuma"
45
- }
46
- ]
47
- },
48
- {
49
- "layout": "centro",
50
- "duracao": 4,
51
- "transicao": "zoom",
52
- "acabamento": "vinheta",
53
- "fundo": {
54
- "imagem": "/midia/torre.jpg",
55
- "escurecer": 0.5
56
- },
57
- "elementos": [
58
- {
59
- "tipo": "numeros",
60
- "contar": true,
61
- "anim": "nenhuma",
62
- "tamanho": 180,
63
- "itens": [
64
- "+38% | bandeira tarifária em 12 meses"
65
- ]
66
- }
67
- ]
68
- },
69
- {
70
- "layout": "livre",
71
- "duracao": 4,
72
- "transicao": "deslizar",
73
- "elementos": [
74
- {
75
- "tipo": "imagem",
76
- "src": "/midia/campo.jpg",
77
- "x": 0,
78
- "y": 0,
79
- "l": 1080,
80
- "a": 1920,
81
- "raio": 0,
82
- "movimento": "aproximar",
83
- "filtro": "contraste",
84
- "anim": "nenhuma"
85
- },
86
- {
87
- "tipo": "forma",
88
- "forma": "retangulo",
89
- "x": 0,
90
- "y": 1180,
91
- "l": 1080,
92
- "a": 740,
93
- "preenchimento": "rgba(10,5,6,.72)",
94
- "anim": "nenhuma"
95
- },
96
- {
97
- "tipo": "texto",
98
- "x": 90,
99
- "y": 1320,
100
- "l": 900,
101
- "a": 420,
102
- "texto": "O custo está\nna transmissão",
103
- "tamanho": 104,
104
- "peso": 750,
105
- "estilo": "sombra",
106
- "anim": "nenhuma"
107
- }
108
- ]
109
- },
110
- {
111
- "layout": "centro",
112
- "duracao": 5,
113
- "fundo": "raios",
114
- "transicao": "subir",
115
- "elementos": [
116
- {
117
- "tipo": "lista",
118
- "revelar": true,
119
- "tamanho": 52,
120
- "intervalo": 0.9,
121
- "itens": [
122
- "Linhas saturadas no Nordeste",
123
- "Usina gerando sem escoar",
124
- "A conta chega em quem consome"
125
- ],
126
- "anim": "nenhuma"
127
- }
128
- ]
129
- },
130
- {
131
- "layout": "centro",
132
- "duracao": 3,
133
- "fundo": "brilho",
134
- "transicao": "fade",
135
- "acabamento": "luz",
136
- "elementos": [
137
- {
138
- "tipo": "texto",
139
- "papel": "titulo",
140
- "texto": "Segue para\nentender a próxima.",
141
- "tamanho": 96,
142
- "estilo": "contorno-tom",
143
- "anim": "nenhuma"
144
- }
145
- ]
146
- }
147
- ]
148
- },
149
- "atualizado": "2026-08-16T15:08:28+00:00"
150
- }
@@ -1,65 +0,0 @@
1
- {
2
- "id": "corte-founders-ai-teste-do-player-2de1d",
3
- "ferramenta": "corte",
4
- "titulo": "Founders AI — teste do player",
5
- "doc": {
6
- "tema": "brasa",
7
- "largura": 1080,
8
- "altura": 1920,
9
- "acabamento": "grao",
10
- "trilha": {
11
- "tipo": "gerada",
12
- "estilo": "pulso",
13
- "volume": 0.7
14
- },
15
- "cenas": [
16
- {
17
- "layout": "centro",
18
- "duracao": 3,
19
- "fundo": "aurora",
20
- "transicao": "flash",
21
- "elementos": [
22
- {
23
- "tipo": "texto",
24
- "papel": "titulo",
25
- "texto": "Imersão\nFounders AI",
26
- "tamanho": 124,
27
- "estilo": "gradiente",
28
- "anim": "desfoque"
29
- }
30
- ]
31
- },
32
- {
33
- "layout": "centro",
34
- "duracao": 3,
35
- "fundo": "vinheta",
36
- "elementos": [
37
- {
38
- "tipo": "texto",
39
- "papel": "titulo",
40
- "texto": "Paris Group · Chapecó",
41
- "tamanho": 78,
42
- "estilo": "marcador",
43
- "anim": "palavra"
44
- }
45
- ]
46
- },
47
- {
48
- "layout": "centro",
49
- "duracao": 4,
50
- "fundo": "raios",
51
- "elementos": [
52
- {
53
- "tipo": "numeros",
54
- "contar": true,
55
- "tamanho": 180,
56
- "itens": [
57
- "20 | empresários por turma"
58
- ]
59
- }
60
- ]
61
- }
62
- ]
63
- },
64
- "atualizado": "2026-08-16T14:55:24+00:00"
65
- }
@@ -1 +0,0 @@
1
- {"id": "corte-legado-teste", "ferramenta": "corte", "titulo": "legado", "doc": {"tema": "meia-noite", "largura": 1080, "altura": 1920, "cenas": [{"duracao": "4s", "fundo": "aurora", "elementos": [{"tipo": "titulo", "texto": "Imersão Founders AI"}, {"tipo": "subtitulo", "conteudo": "Paris Group · Chapecó"}]}]}}
@@ -1 +0,0 @@
1
- {"id": "corte-legado2", "ferramenta": "corte", "titulo": "legado2", "doc": {"tema": "meia-noite", "largura": 1080, "altura": 1920, "cenas": [{"duracao": "4s", "fundo": "aurora", "elementos": [{"tipo": "titulo", "texto": "Imersão Founders AI", "anim": "nenhuma"}, {"tipo": "subtitulo", "conteudo": "Paris Group · Chapecó", "anim": "nenhuma"}]}]}}
@@ -1,24 +0,0 @@
1
- {
2
- "id": "corte-minimo-2a829",
3
- "ferramenta": "corte",
4
- "titulo": "minimo",
5
- "doc": {
6
- "tema": "claro",
7
- "largura": 1080,
8
- "altura": 1920,
9
- "cenas": [
10
- {
11
- "layout": "centro",
12
- "duracao": 5,
13
- "elementos": [
14
- {
15
- "tipo": "texto",
16
- "texto": "TESTE VISIVEL",
17
- "tamanho": 120
18
- }
19
- ]
20
- }
21
- ]
22
- },
23
- "atualizado": "2026-08-16T14:57:24+00:00"
24
- }
@@ -1,18 +0,0 @@
1
- {
2
- "id": "corte-ok-00a3b",
3
- "ferramenta": "corte",
4
- "titulo": "ok",
5
- "doc": {
6
- "cenas": [
7
- {
8
- "elementos": [
9
- {
10
- "tipo": "texto",
11
- "texto": "oi"
12
- }
13
- ]
14
- }
15
- ]
16
- },
17
- "atualizado": "2026-08-16T15:05:32+00:00"
18
- }
@@ -1,22 +0,0 @@
1
- {
2
- "id": "corte-ok-1270e",
3
- "ferramenta": "corte",
4
- "titulo": "ok",
5
- "doc": {
6
- "tema": "brasa",
7
- "cenas": [
8
- {
9
- "duracao": 3,
10
- "elementos": [
11
- {
12
- "tipo": "texto",
13
- "papel": "titulo",
14
- "texto": "Founders AI",
15
- "anim": "nenhuma"
16
- }
17
- ]
18
- }
19
- ]
20
- },
21
- "atualizado": "2026-08-16T17:50:21+00:00"
22
- }
@@ -1,147 +0,0 @@
1
- {
2
- "id": "corte-sweep-corte-cfb29",
3
- "ferramenta": "corte",
4
- "titulo": "sweep-corte",
5
- "doc": {
6
- "tema": "brasa",
7
- "largura": 1080,
8
- "altura": 1920,
9
- "acabamento": "grao",
10
- "trilha": {
11
- "tipo": "gerada",
12
- "estilo": "pulso",
13
- "volume": 0.7
14
- },
15
- "cenas": [
16
- {
17
- "layout": "centro",
18
- "duracao": 3,
19
- "fundo": "aurora",
20
- "transicao": "flash",
21
- "elementos": [
22
- {
23
- "tipo": "texto",
24
- "papel": "titulo",
25
- "texto": "Sua conta subiu\nde novo.",
26
- "tamanho": 124,
27
- "estilo": "gradiente",
28
- "anim": "desfoque"
29
- }
30
- ]
31
- },
32
- {
33
- "layout": "centro",
34
- "duracao": 3,
35
- "fundo": "vinheta",
36
- "transicao": "limpar",
37
- "elementos": [
38
- {
39
- "tipo": "texto",
40
- "papel": "titulo",
41
- "texto": "E não foi o seu chuveiro.",
42
- "tamanho": 78,
43
- "estilo": "marcador",
44
- "anim": "palavra"
45
- }
46
- ]
47
- },
48
- {
49
- "layout": "centro",
50
- "duracao": 4,
51
- "transicao": "zoom",
52
- "acabamento": "vinheta",
53
- "fundo": {
54
- "imagem": "/midia/torre.jpg",
55
- "escurecer": 0.5
56
- },
57
- "elementos": [
58
- {
59
- "tipo": "numeros",
60
- "contar": true,
61
- "anim": "saltar",
62
- "tamanho": 180,
63
- "itens": [
64
- "+38% | bandeira tarifária em 12 meses"
65
- ]
66
- }
67
- ]
68
- },
69
- {
70
- "layout": "livre",
71
- "duracao": 4,
72
- "transicao": "deslizar",
73
- "elementos": [
74
- {
75
- "tipo": "imagem",
76
- "src": "/midia/campo.jpg",
77
- "x": 0,
78
- "y": 0,
79
- "l": 1080,
80
- "a": 1920,
81
- "raio": 0,
82
- "movimento": "aproximar",
83
- "filtro": "contraste"
84
- },
85
- {
86
- "tipo": "forma",
87
- "forma": "retangulo",
88
- "x": 0,
89
- "y": 1180,
90
- "l": 1080,
91
- "a": 740,
92
- "preenchimento": "rgba(10,5,6,.72)"
93
- },
94
- {
95
- "tipo": "texto",
96
- "x": 90,
97
- "y": 1320,
98
- "l": 900,
99
- "a": 420,
100
- "texto": "O custo está\nna transmissão",
101
- "tamanho": 104,
102
- "peso": 750,
103
- "estilo": "sombra",
104
- "anim": "cortina"
105
- }
106
- ]
107
- },
108
- {
109
- "layout": "centro",
110
- "duracao": 5,
111
- "fundo": "raios",
112
- "transicao": "subir",
113
- "elementos": [
114
- {
115
- "tipo": "lista",
116
- "revelar": true,
117
- "tamanho": 52,
118
- "intervalo": 0.9,
119
- "itens": [
120
- "Linhas saturadas no Nordeste",
121
- "Usina gerando sem escoar",
122
- "A conta chega em quem consome"
123
- ]
124
- }
125
- ]
126
- },
127
- {
128
- "layout": "centro",
129
- "duracao": 3,
130
- "fundo": "brilho",
131
- "transicao": "fade",
132
- "acabamento": "luz",
133
- "elementos": [
134
- {
135
- "tipo": "texto",
136
- "papel": "titulo",
137
- "texto": "Segue para\nentender a próxima.",
138
- "tamanho": 96,
139
- "estilo": "contorno-tom",
140
- "anim": "elastico"
141
- }
142
- ]
143
- }
144
- ]
145
- },
146
- "atualizado": "2026-08-16T15:07:33+00:00"
147
- }
@@ -1,35 +0,0 @@
1
- {
2
- "id": "corte-visual-completo-78f50",
3
- "ferramenta": "corte",
4
- "titulo": "visual completo",
5
- "doc": {
6
- "tema": "brasa",
7
- "largura": 1080,
8
- "altura": 1920,
9
- "acabamento": "grao",
10
- "cenas": [
11
- {
12
- "layout": "centro",
13
- "duracao": 4,
14
- "fundo": "aurora",
15
- "elementos": [
16
- {
17
- "tipo": "texto",
18
- "papel": "titulo",
19
- "texto": "Imersão\nFounders AI",
20
- "tamanho": 124,
21
- "estilo": "gradiente",
22
- "anim": "nenhuma"
23
- },
24
- {
25
- "tipo": "texto",
26
- "texto": "Paris Group · Chapecó",
27
- "tamanho": 48,
28
- "anim": "nenhuma"
29
- }
30
- ]
31
- }
32
- ]
33
- },
34
- "atualizado": "2026-08-16T15:02:56+00:00"
35
- }