{"id":889,"date":"2026-02-07T07:48:43","date_gmt":"2026-02-07T07:48:43","guid":{"rendered":"https:\/\/aprecisa.com\/ga\/?p=889"},"modified":"2026-02-07T08:10:24","modified_gmt":"2026-02-07T08:10:24","slug":"889","status":"publish","type":"post","link":"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/","title":{"rendered":""},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"pt-PT\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n    <title>Sintetizador Vetorial | Melodia Edition<\/title>\n    <style>\n        \/* ==========================================================================\n           DESIGN SYSTEM: \"AEROSPACE & MUSIC\"\n           ========================================================================== *\/\n        :root {\n            --bg-color: #050a10;\n            --panel-bg: rgba(20, 30, 40, 0.85);\n            --vec-result: #00f2ff; \/* Ciano *\/\n            --vec-x: #00ff9d;      \/* Verde *\/\n            --vec-y: #ff0055;      \/* Magenta *\/\n            --target-note: #ffd700; \/* Dourado para a nota alvo *\/\n            --font-stack: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n        }\n\n        body, html {\n            margin: 0; padding: 0; width: 100%; height: 100%;\n            background-color: var(--bg-color);\n            color: #fff; font-family: var(--font-stack);\n            overflow: hidden; user-select: none;\n        }\n\n        \/* HEADER *\/\n        header {\n            position: absolute; top: 0; left: 0; width: 100%;\n            padding: 20px; box-sizing: border-box; pointer-events: none;\n            display: flex; justify-content: space-between; z-index: 10;\n            background: linear-gradient(to bottom, rgba(0,0,0,0.9), transparent);\n        }\n        .brand h1 { margin: 0; font-size: 1.2rem; letter-spacing: 1px; text-transform: uppercase; color: var(--vec-result); }\n        .song-info { text-align: right; }\n        .song-title { color: var(--target-note); font-weight: bold; font-size: 1.1rem; }\n        .instruction { font-size: 0.8rem; color: #aaa; }\n\n        \/* CANVAS *\/\n        canvas { display: block; width: 100%; height: 100%; cursor: crosshair; }\n\n        \/* ETIQUETA FLUTUANTE (TOOLTIP) *\/\n        .tooltip {\n            position: absolute;\n            background: rgba(0, 0, 0, 0.9);\n            border: 1px solid var(--vec-result);\n            padding: 8px 12px;\n            border-radius: 4px;\n            pointer-events: none;\n            font-family: 'Courier New', monospace;\n            font-size: 0.9rem;\n            white-space: nowrap;\n            display: none; \/* Escondido por defeito *\/\n            z-index: 20;\n            box-shadow: 0 0 15px rgba(0, 242, 255, 0.3);\n        }\n        .tooltip span { font-weight: bold; }\n\n        \/* MENSAGEM DE SUCESSO *\/\n        #hit-feedback {\n            position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);\n            font-size: 3rem; color: var(--target-note); font-weight: bold;\n            text-shadow: 0 0 30px var(--target-note);\n            opacity: 0; transition: opacity 0.2s; pointer-events: none;\n        }\n        #hit-feedback.show { opacity: 1; }\n\n        \/* OVERLAY INICIAL *\/\n        #boot-screen {\n            position: absolute; top: 0; left: 0; width: 100%; height: 100%;\n            background: var(--bg-color);\n            display: flex; flex-direction: column; justify-content: center; align-items: center;\n            z-index: 999;\n        }\n        .btn-primary {\n            background: transparent; color: var(--vec-result);\n            border: 1px solid var(--vec-result);\n            padding: 15px 40px; font-size: 1rem; letter-spacing: 2px;\n            text-transform: uppercase; cursor: pointer; margin-top: 20px;\n            font-weight: bold; transition: all 0.3s;\n        }\n        .btn-primary:hover { background: var(--vec-result); color: #000; box-shadow: 0 0 20px var(--vec-result); }\n\n    <\/style>\n<\/head>\n<body>\n\n    <div id=\"boot-screen\">\n        <h1 style=\"font-weight: 300; letter-spacing: 2px;\">SISTEMA MUSICAL <strong style=\"color:var(--vec-result)\">VETORIAL<\/strong><\/h1>\n        <p style=\"color:#888;\">Eng. Gaspar do Amaral | Edi\u00e7\u00e3o Melodia<\/p>\n        <button class=\"btn-primary\" id=\"btn-init\">CARREGAR &#8220;HINO DA ALEGRIA&#8221;<\/button>\n    <\/div>\n\n    <header>\n        <div class=\"brand\">\n            <h1>Laborat\u00f3rio Vetorial<\/h1>\n            <div style=\"font-size: 0.8rem; color: #aaa\">Visualiza\u00e7\u00e3o em Tempo Real<\/div>\n        <\/div>\n        <div class=\"song-info\">\n            <div class=\"song-title\">\u266b HINO DA ALEGRIA<\/div>\n            <div class=\"instruction\">Alinhe o Vetor Verde com a Linha Dourada<\/div>\n        <\/div>\n    <\/header>\n\n    <div id=\"hit-feedback\">ACERTOU!<\/div>\n    \n    <div id=\"cursor-tooltip\" class=\"tooltip\">\n        P( <span id=\"tt-freq\" style=\"color:var(--vec-x)\">0<\/span> Hz , <span id=\"tt-amp\" style=\"color:var(--vec-y)\">0.0<\/span> )\n    <\/div>\n\n    <canvas id=\"canvas\"><\/canvas>\n\n    <script>\n        \/**\n         * ============================================================\n         * DADOS DA MELODIA (Hino da Alegria \/ Ode to Joy)\n         * Frequ\u00eancias exatas para o aluno encontrar.\n         * ============================================================\n         *\/\n        const MELODY = [\n            { note: \"MI (E4)\", freq: 329.63 },\n            { note: \"MI (E4)\", freq: 329.63 },\n            { note: \"F\u00c1 (F4)\", freq: 349.23 },\n            { note: \"SOL (G4)\", freq: 392.00 },\n            { note: \"SOL (G4)\", freq: 392.00 },\n            { note: \"F\u00c1 (F4)\", freq: 349.23 },\n            { note: \"MI (E4)\", freq: 329.63 },\n            { note: \"R\u00c9 (D4)\", freq: 293.66 },\n            { note: \"D\u00d3 (C4)\", freq: 261.63 },\n            { note: \"D\u00d3 (C4)\", freq: 261.63 },\n            { note: \"R\u00c9 (D4)\", freq: 293.66 },\n            { note: \"MI (E4)\", freq: 329.63 },\n            { note: \"MI (E4)\", freq: 329.63 }, \/\/ Dotted\n            { note: \"R\u00c9 (D4)\", freq: 293.66 }\n        ];\n\n        class App {\n            constructor() {\n                this.canvas = document.getElementById('canvas');\n                this.ctx = this.canvas.getContext('2d');\n                this.width = window.innerWidth;\n                this.height = window.innerHeight;\n                \n                this.audioCtx = null;\n                this.osc = null;\n                this.gain = null;\n                this.filter = null;\n                this.analyser = null;\n                \n                this.state = {\n                    isPlaying: false,\n                    x: 0, y: 0,\n                    freq: 0, amp: 0,\n                    currentNoteIndex: 0,\n                    lastHitTime: 0\n                };\n\n                \/\/ Configura\u00e7\u00e3o F\u00edsica\n                this.minFreq = 200; \/\/ Come\u00e7a um pouco antes do D\u00f3 central\n                this.maxFreq = 600; \/\/ Vai at\u00e9 agudos razo\u00e1veis\n                \n                this.resize();\n                window.addEventListener('resize', () => this.resize());\n                this.bindEvents();\n                this.loop();\n            }\n\n            resize() {\n                this.width = window.innerWidth;\n                this.height = window.innerHeight;\n                this.canvas.width = this.width;\n                this.canvas.height = this.height;\n            }\n\n            async initAudio() {\n                if (!this.audioCtx) {\n                    this.audioCtx = new (window.AudioContext || window.webkitAudioContext)();\n                    this.analyser = this.audioCtx.createAnalyser();\n                    this.analyser.connect(this.audioCtx.destination);\n                }\n                if (this.audioCtx.state === 'suspended') await this.audioCtx.resume();\n                \n                document.getElementById('boot-screen').style.display = 'none';\n            }\n\n            startSound(x, y) {\n                if (!this.audioCtx) return;\n                if (this.osc) { this.osc.stop(); this.osc.disconnect(); }\n\n                this.osc = this.audioCtx.createOscillator();\n                this.osc.type = 'sawtooth';\n                this.filter = this.audioCtx.createBiquadFilter();\n                this.filter.type = 'lowpass';\n                this.filter.Q.value = 8;\n                this.gain = this.audioCtx.createGain();\n\n                this.osc.connect(this.filter);\n                this.filter.connect(this.gain);\n                this.gain.connect(this.analyser);\n\n                this.updatePhysics(x, y);\n                this.gain.gain.setValueAtTime(0, this.audioCtx.currentTime);\n                this.gain.gain.linearRampToValueAtTime(this.state.amp, this.audioCtx.currentTime + 0.05);\n                \n                this.osc.start();\n                this.state.isPlaying = true;\n                \n                \/\/ Mostrar Tooltip\n                document.getElementById('cursor-tooltip').style.display = 'block';\n            }\n\n            updatePhysics(x, y) {\n                this.state.x = x;\n                this.state.y = y;\n\n                \/\/ Mapeamento Vetorial\n                const pctX = x \/ this.width;\n                const freq = this.minFreq + (pctX * (this.maxFreq - this.minFreq));\n                \n                const pctY = 1 - (y \/ this.height);\n                const amp = Math.max(0, pctY);\n                const cutoff = 100 + (Math.pow(pctY, 2) * 8000);\n\n                this.state.freq = freq;\n                this.state.amp = amp;\n\n                if (this.state.isPlaying) {\n                    this.osc.frequency.setTargetAtTime(freq, this.audioCtx.currentTime, 0.02);\n                    this.gain.gain.setTargetAtTime(amp, this.audioCtx.currentTime, 0.05);\n                    this.filter.frequency.setTargetAtTime(cutoff, this.audioCtx.currentTime, 0.05);\n                }\n\n                \/\/ Atualizar Tooltip\n                this.updateTooltip(x, y, freq, amp);\n                \n                \/\/ Verificar se acertou na nota da m\u00fasica\n                this.checkMelodyHit(freq);\n            }\n\n            checkMelodyHit(currentFreq) {\n                if (this.state.currentNoteIndex >= MELODY.length) return; \/\/ M\u00fasica acabou\n\n                const target = MELODY[this.state.currentNoteIndex];\n                const tolerance = 5; \/\/ Hz de margem de erro\n                const diff = Math.abs(currentFreq - target.freq);\n\n                \/\/ Debounce para n\u00e3o saltar notas muito r\u00e1pido\n                const now = Date.now();\n                if (diff < tolerance &#038;&#038; (now - this.state.lastHitTime > 500)) {\n                    this.advanceNote();\n                }\n            }\n\n            advanceNote() {\n                this.state.lastHitTime = Date.now();\n                this.state.currentNoteIndex++;\n                \n                \/\/ Feedback Visual\n                const fb = document.getElementById('hit-feedback');\n                fb.classList.add('show');\n                setTimeout(() => fb.classList.remove('show'), 500);\n\n                if (this.state.currentNoteIndex >= MELODY.length) {\n                    setTimeout(() => {\n                        this.state.currentNoteIndex = 0; \/\/ Reiniciar loop\n                    }, 2000);\n                }\n            }\n\n            stopSound() {\n                if (!this.state.isPlaying) return;\n                const t = this.audioCtx.currentTime;\n                this.gain.gain.cancelScheduledValues(t);\n                this.gain.gain.setValueAtTime(this.gain.gain.value, t);\n                this.gain.gain.exponentialRampToValueAtTime(0.001, t + 0.5);\n                this.osc.stop(t + 0.6);\n                this.state.isPlaying = false;\n                \n                \/\/ Esconder Tooltip\n                document.getElementById('cursor-tooltip').style.display = 'none';\n            }\n\n            updateTooltip(x, y, freq, amp) {\n                const tt = document.getElementById('cursor-tooltip');\n                \/\/ Posicionar a etiqueta um pouco acima e \u00e0 direita do dedo\n                tt.style.left = (x + 20) + 'px';\n                tt.style.top = (y - 50) + 'px';\n                \n                document.getElementById('tt-freq').innerText = freq.toFixed(0);\n                document.getElementById('tt-amp').innerText = amp.toFixed(2);\n            }\n\n            bindEvents() {\n                const hStart = (e) => { e.preventDefault(); const t = e.touches ? e.touches[0] : e; this.startSound(t.clientX, t.clientY); };\n                const hMove = (e) => { e.preventDefault(); if(this.state.isPlaying) { const t = e.touches ? e.touches[0] : e; this.updatePhysics(t.clientX, t.clientY); }};\n                const hEnd = (e) => { e.preventDefault(); this.stopSound(); };\n\n                this.canvas.addEventListener('mousedown', hStart);\n                this.canvas.addEventListener('mousemove', hMove);\n                this.canvas.addEventListener('mouseup', hEnd);\n                this.canvas.addEventListener('mouseleave', hEnd);\n                \n                this.canvas.addEventListener('touchstart', hStart, {passive:false});\n                this.canvas.addEventListener('touchmove', hMove, {passive:false});\n                this.canvas.addEventListener('touchend', hEnd);\n\n                document.getElementById('btn-init').addEventListener('click', () => this.initAudio());\n            }\n\n            loop() {\n                requestAnimationFrame(() => this.loop());\n                this.ctx.fillStyle = '#050a10';\n                this.ctx.fillRect(0, 0, this.width, this.height);\n\n                this.drawGrid();\n                if (this.state.isPlaying) this.drawVector();\n                this.drawMelodyGuide(); \/\/ Desenha a \"pauta\" vetorial\n            }\n\n            drawGrid() {\n                const ox = 40, oy = this.height - 40;\n                this.ctx.strokeStyle = 'rgba(255,255,255,0.1)';\n                this.ctx.lineWidth = 1;\n\n                \/\/ Eixos\n                this.ctx.beginPath(); this.ctx.moveTo(ox, 0); this.ctx.lineTo(ox, oy); this.ctx.lineTo(this.width, oy); this.ctx.stroke();\n\n                \/\/ Zero\n                this.ctx.fillStyle = '#fff';\n                this.ctx.font = '10px Arial';\n                this.ctx.fillText(\"0,0\", ox - 10, oy + 20);\n            }\n\n            drawVector() {\n                const ox = 40, oy = this.height - 40;\n                const x = Math.max(ox, this.state.x);\n                const y = Math.min(oy, this.state.y);\n\n                \/\/ Vetor X (Verde)\n                this.drawArrow(ox, oy, x, oy, '#00ff9d', 4);\n                \/\/ Vetor Y (Magenta)\n                this.drawArrow(ox, oy, ox, y, '#ff0055', 4);\n                \/\/ Resultante (Ciano)\n                this.drawArrow(ox, oy, x, y, '#00f2ff', 2);\n                \n                \/\/ Proje\u00e7\u00f5es\n                this.ctx.setLineDash([4,4]);\n                this.ctx.strokeStyle = 'rgba(255,255,255,0.3)';\n                this.ctx.beginPath(); this.ctx.moveTo(x, oy); this.ctx.lineTo(x, y); this.ctx.lineTo(ox, y); this.ctx.stroke();\n                this.ctx.setLineDash([]);\n            }\n\n            drawArrow(fx, fy, tx, ty, color, w) {\n                const angle = Math.atan2(ty - fy, tx - fx);\n                this.ctx.beginPath(); this.ctx.moveTo(fx, fy); this.ctx.lineTo(tx, ty);\n                this.ctx.strokeStyle = color; this.ctx.lineWidth = w; this.ctx.stroke();\n                \n                \/\/ Seta\n                const head = 10;\n                this.ctx.beginPath();\n                this.ctx.moveTo(tx, ty);\n                this.ctx.lineTo(tx - head * Math.cos(angle - Math.PI\/6), ty - head * Math.sin(angle - Math.PI\/6));\n                this.ctx.lineTo(tx - head * Math.cos(angle + Math.PI\/6), ty - head * Math.sin(angle + Math.PI\/6));\n                this.ctx.fillStyle = color; this.ctx.fill();\n            }\n\n            drawMelodyGuide() {\n                \/\/ Desenha a linha alvo da nota atual\n                if (this.state.currentNoteIndex >= MELODY.length) return;\n\n                const note = MELODY[this.state.currentNoteIndex];\n                \n                \/\/ Converter freq da nota para posi\u00e7\u00e3o X no ecr\u00e3\n                \/\/ x = (freq - min) \/ (max - min) * width\n                const percent = (note.freq - this.minFreq) \/ (this.maxFreq - this.minFreq);\n                const targetX = percent * this.width;\n\n                \/\/ Desenha a linha \"Alvo\"\n                this.ctx.save();\n                this.ctx.shadowBlur = 20;\n                this.ctx.shadowColor = '#ffd700';\n                this.ctx.strokeStyle = '#ffd700';\n                this.ctx.lineWidth = 2;\n                \n                \/\/ Linha vertical pulsante\n                this.ctx.globalAlpha = 0.5 + Math.sin(Date.now() \/ 200) * 0.2;\n                this.ctx.beginPath();\n                this.ctx.moveTo(targetX, 0);\n                this.ctx.lineTo(targetX, this.height);\n                this.ctx.stroke();\n\n                \/\/ Nome da Nota\n                this.ctx.globalAlpha = 1;\n                this.ctx.fillStyle = '#ffd700';\n                this.ctx.font = 'bold 20px Arial';\n                this.ctx.fillText(`ALVO: ${note.note}`, targetX + 10, this.height \/ 2);\n                this.ctx.font = '14px Courier New';\n                this.ctx.fillText(`${note.freq} Hz`, targetX + 10, (this.height \/ 2) + 20);\n\n                \/\/ Pr\u00f3ximas notas (Ghost)\n                const nextNote = MELODY[this.state.currentNoteIndex + 1];\n                if (nextNote) {\n                    const p2 = (nextNote.freq - this.minFreq) \/ (this.maxFreq - this.minFreq);\n                    const tx2 = p2 * this.width;\n                    this.ctx.fillStyle = 'rgba(255, 255, 255, 0.3)';\n                    this.ctx.fillText(`(Pr\u00f3x: ${nextNote.note})`, tx2 + 5, this.height \/ 2 + 50);\n                    this.ctx.strokeStyle = 'rgba(255, 255, 255, 0.1)';\n                    this.ctx.beginPath(); this.ctx.moveTo(tx2, 0); this.ctx.lineTo(tx2, this.height); this.ctx.stroke();\n                }\n\n                this.ctx.restore();\n            }\n        }\n\n        const app = new App();\n\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Sintetizador Vetorial | Melodia Edition SISTEMA MUSICAL VETORIAL Eng. Gaspar do Amaral | Edi\u00e7\u00e3o Melodia CARREGAR &#8220;HINO DA ALEGRIA&#8221; Laborat\u00f3rio Vetorial Visualiza\u00e7\u00e3o em Tempo Real \u266b HINO DA ALEGRIA Alinhe o Vetor Verde com a Linha Dourada ACERTOU! P( 0 Hz , 0.0 )<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-889","post","type-post","status-publish","format-standard","hentry","category-sem-categoria"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>- Gaspar do Amaral<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"- Gaspar do Amaral\" \/>\n<meta property=\"og:description\" content=\"Sintetizador Vetorial | Melodia Edition SISTEMA MUSICAL VETORIAL Eng. Gaspar do Amaral | Edi\u00e7\u00e3o Melodia CARREGAR &#8220;HINO DA ALEGRIA&#8221; Laborat\u00f3rio Vetorial Visualiza\u00e7\u00e3o em Tempo Real \u266b HINO DA ALEGRIA Alinhe o Vetor Verde com a Linha Dourada ACERTOU! P( 0 Hz , 0.0 )\" \/>\n<meta property=\"og:url\" content=\"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/\" \/>\n<meta property=\"og:site_name\" content=\"Gaspar do Amaral\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-07T07:48:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-07T08:10:24+00:00\" \/>\n<meta name=\"author\" content=\"Gaspar do Amaral\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gaspar do Amaral\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/\",\"url\":\"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/\",\"name\":\"- Gaspar do Amaral\",\"isPartOf\":{\"@id\":\"https:\/\/aprecisa.com\/ga\/#website\"},\"datePublished\":\"2026-02-07T07:48:43+00:00\",\"dateModified\":\"2026-02-07T08:10:24+00:00\",\"author\":{\"@id\":\"https:\/\/aprecisa.com\/ga\/#\/schema\/person\/3298af74205836a51d551e9c4811c5cb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/aprecisa.com\/ga\/#website\",\"url\":\"https:\/\/aprecisa.com\/ga\/\",\"name\":\"Gaspar do Amaral\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/aprecisa.com\/ga\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/aprecisa.com\/ga\/#\/schema\/person\/3298af74205836a51d551e9c4811c5cb\",\"name\":\"Gaspar do Amaral\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/aprecisa.com\/ga\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d855b7a60a0e4e2bcee386f1026a4f1f2468b5af96de8da6c917ef20de272e9d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d855b7a60a0e4e2bcee386f1026a4f1f2468b5af96de8da6c917ef20de272e9d?s=96&d=mm&r=g\",\"caption\":\"Gaspar do Amaral\"},\"sameAs\":[\"https:\/\/aprecisa.com\/\"],\"url\":\"https:\/\/aprecisa.com\/ga\/author\/gaamaral\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"- Gaspar do Amaral","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/","og_locale":"pt_PT","og_type":"article","og_title":"- Gaspar do Amaral","og_description":"Sintetizador Vetorial | Melodia Edition SISTEMA MUSICAL VETORIAL Eng. Gaspar do Amaral | Edi\u00e7\u00e3o Melodia CARREGAR &#8220;HINO DA ALEGRIA&#8221; Laborat\u00f3rio Vetorial Visualiza\u00e7\u00e3o em Tempo Real \u266b HINO DA ALEGRIA Alinhe o Vetor Verde com a Linha Dourada ACERTOU! P( 0 Hz , 0.0 )","og_url":"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/","og_site_name":"Gaspar do Amaral","article_published_time":"2026-02-07T07:48:43+00:00","article_modified_time":"2026-02-07T08:10:24+00:00","author":"Gaspar do Amaral","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Gaspar do Amaral","Tempo estimado de leitura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/","url":"https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/","name":"- Gaspar do Amaral","isPartOf":{"@id":"https:\/\/aprecisa.com\/ga\/#website"},"datePublished":"2026-02-07T07:48:43+00:00","dateModified":"2026-02-07T08:10:24+00:00","author":{"@id":"https:\/\/aprecisa.com\/ga\/#\/schema\/person\/3298af74205836a51d551e9c4811c5cb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/aprecisa.com\/ga\/2026\/02\/07\/889\/"]}]},{"@type":"WebSite","@id":"https:\/\/aprecisa.com\/ga\/#website","url":"https:\/\/aprecisa.com\/ga\/","name":"Gaspar do Amaral","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/aprecisa.com\/ga\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Person","@id":"https:\/\/aprecisa.com\/ga\/#\/schema\/person\/3298af74205836a51d551e9c4811c5cb","name":"Gaspar do Amaral","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/aprecisa.com\/ga\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d855b7a60a0e4e2bcee386f1026a4f1f2468b5af96de8da6c917ef20de272e9d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d855b7a60a0e4e2bcee386f1026a4f1f2468b5af96de8da6c917ef20de272e9d?s=96&d=mm&r=g","caption":"Gaspar do Amaral"},"sameAs":["https:\/\/aprecisa.com\/"],"url":"https:\/\/aprecisa.com\/ga\/author\/gaamaral\/"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/posts\/889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/comments?post=889"}],"version-history":[{"count":4,"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/posts\/889\/revisions"}],"predecessor-version":[{"id":896,"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/posts\/889\/revisions\/896"}],"wp:attachment":[{"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/media?parent=889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/categories?post=889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aprecisa.com\/ga\/wp-json\/wp\/v2\/tags?post=889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}