{"id":197,"date":"2026-01-19T14:09:43","date_gmt":"2026-01-19T19:09:43","guid":{"rendered":"https:\/\/juansebastianmendez.com\/?p=197"},"modified":"2026-03-23T11:55:57","modified_gmt":"2026-03-23T16:55:57","slug":"dirsim","status":"publish","type":"post","link":"https:\/\/juansebastianmendez.com\/en\/dirsim\/","title":{"rendered":"DirSim"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"197\" class=\"elementor elementor-197\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6e7529c9 e-con-full e-flex e-con e-parent\" data-id=\"6e7529c9\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14f0ab26 elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"14f0ab26\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">DIRSIM<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44c63a72 elementor-widget elementor-widget-heading\" data-id=\"44c63a72\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">A\u00f1o : 2023<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4a4b9d90 e-flex e-con-boxed e-con e-parent\" data-id=\"4a4b9d90\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ab1241b elementor-widget elementor-widget-spacer\" data-id=\"4ab1241b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7d505861 e-con-full e-flex e-con e-parent\" data-id=\"7d505861\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-31337b27 e-con-full e-flex e-con e-child\" data-id=\"31337b27\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2fc5e52a elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"2fc5e52a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>DirSim (<i>Director Simulator<\/i>) es un ecosistema integral de control y visualizaci\u00f3n musical. DirSim permite a un usuario dirigir una orquesta virtual utilizando gestos de sus manos en tiempo real. El sistema integra seguimiento biom\u00e9trico por visi\u00f3n computacional, conversi\u00f3n din\u00e1mica de protocolos (MIDI a OSC) y retroalimentaci\u00f3n visual inmersiva para una experiencia de conducci\u00f3n musical total.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-67c1cf79 e-con-full e-flex e-con e-child\" data-id=\"67c1cf79\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-20c0dd79 elementor-widget elementor-widget-heading\" data-id=\"20c0dd79\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Tecnolog\u00edas usadas:<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36b78384 elementor-icon-list--layout-inline elementor-widget-tablet__width-inherit elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"36b78384\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items elementor-inline-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-python\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Python<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-js-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Processing - P5.js<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-music\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">MIDI<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4e32380 e-flex e-con-boxed e-con e-parent\" data-id=\"4e32380\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d4f4477 elementor-widget elementor-widget-spacer\" data-id=\"d4f4477\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2e3cc330 e-con-full e-flex e-con e-parent\" data-id=\"2e3cc330\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1de0a0e e-flex e-con-boxed e-con e-child\" data-id=\"1de0a0e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8eeda0d elementor-widget elementor-widget-heading\" data-id=\"8eeda0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Arquitectura del sistema<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2bce32d elementor-widget elementor-widget-text-editor\" data-id=\"2bce32d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-path-to-node=\"11,1,1,0\">DirSim no es un solo programa, sino una red de tres m\u00f3dulos independientes comunic\u00e1ndose en tiempo real. Inicialmente se hace la <b data-path-to-node=\"11,1,1,1,0,0\" data-index-in-node=\"0\">extracci\u00f3n de los datos <\/b>del movimiento f\u00edsico de las manos, capturados en video y eventualmente traducido a coordenadas espaciales. Seguido a esto, se hace la <b data-path-to-node=\"11,1,1,1,1,0\" data-index-in-node=\"0\">traducci\u00f3n de protocolos<\/b>, con un servidor puente que recibe las se\u00f1ales y las rutea hacia Reaper, una estaci\u00f3n de trabajo de audio digital (<em>DWA<\/em>). Finalmente, se\u00a0 hace la <b data-path-to-node=\"11,1,1,1,2,0\" data-index-in-node=\"0\">renderizaci\u00f3n <\/b>de las se\u00f1ales procesadas que activan los est\u00edmulos visuales sincronizados con el motor de audio.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4ef618b8 e-con-full fixed-card e-flex e-con e-child\" data-id=\"4ef618b8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-51ec9b58 elementor-widget elementor-widget-image\" data-id=\"51ec9b58\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1863\" height=\"676\" src=\"https:\/\/juansebastianmendez.com\/wp-content\/uploads\/2026\/01\/DirSim_Diagrama.png\" class=\"attachment-full size-full wp-image-870\" alt=\"\" srcset=\"https:\/\/juansebastianmendez.com\/wp-content\/uploads\/2026\/01\/DirSim_Diagrama.png 1863w, https:\/\/juansebastianmendez.com\/wp-content\/uploads\/2026\/01\/DirSim_Diagrama-300x109.png 300w, https:\/\/juansebastianmendez.com\/wp-content\/uploads\/2026\/01\/DirSim_Diagrama-1024x372.png 1024w, https:\/\/juansebastianmendez.com\/wp-content\/uploads\/2026\/01\/DirSim_Diagrama-768x279.png 768w, https:\/\/juansebastianmendez.com\/wp-content\/uploads\/2026\/01\/DirSim_Diagrama-1536x557.png 1536w, https:\/\/juansebastianmendez.com\/wp-content\/uploads\/2026\/01\/DirSim_Diagrama-18x7.png 18w\" sizes=\"(max-width: 1863px) 100vw, 1863px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5bd9f37 e-con-full e-flex e-con e-child\" data-id=\"5bd9f37\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-a3eab09 e-con-full e-flex e-con e-child\" data-id=\"a3eab09\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b63234f elementor-widget elementor-widget-heading\" data-id=\"b63234f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Controlador<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12142b7 elementor-widget elementor-widget-text-editor\" data-id=\"12142b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Desarrollado en Python, utiliza Machine Learning (<code data-path-to-node=\"18,2,1,0\" data-index-in-node=\"50\">cvzone<\/code>) para el <b data-path-to-node=\"18,2,1,0\" data-index-in-node=\"66\">seguimiento de manos<\/b> m\u00faltiple. Extrae puntos clave (<em>landmarks<\/em>) de las manos para calcular el BPM a trav\u00e9s de dos algoritmos: <i data-path-to-node=\"18,2,1,0\" data-index-in-node=\"184\">Hand Speed Mode<\/i> y <i data-path-to-node=\"18,2,1,0\" data-index-in-node=\"202\">Pattern Mode<\/i>. Cuenta con una interfaz gr\u00e1fica en PyQt5 y env\u00eda comandos de reproducci\u00f3n v\u00eda <b data-path-to-node=\"18,2,1,0\" data-index-in-node=\"294\">Open Sound Control (OSC)<\/b>. Tambi\u00e9n incluye un sistema de \u00abDual Slider\u00bb controlado por la posici\u00f3n de los dedos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-299323e e-con-full e-flex e-con e-child\" data-id=\"299323e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2e5c1a2 elementor-widget elementor-widget-heading\" data-id=\"2e5c1a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Puerto<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-121b6cb elementor-widget elementor-widget-text-editor\" data-id=\"121b6cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Act\u00faa como el software intermedieaario del sistema. Utilizando <code data-path-to-node=\"20,2,1,0\" data-index-in-node=\"49\">python-rtmidi<\/code> y <code data-path-to-node=\"20,2,1,0\" data-index-in-node=\"65\">python-osc<\/code>, este m\u00f3dulo intercepta los mensajes de hardware MIDI entrantes y los empaqueta en formato OSC. Su interfaz din\u00e1mica permite reconfigurar sobre la marcha los puertos del servidor y el enrutamiento hacia Reaper, asegurando un flujo de datos sin p\u00e9rdida de paquetes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1e3b759 e-con-full e-flex e-con e-child\" data-id=\"1e3b759\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9f12257 elementor-widget elementor-widget-heading\" data-id=\"9f12257\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Visualizador<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bde3147 elementor-widget elementor-widget-text-editor\" data-id=\"bde3147\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>El motor de renderizado construido en <b data-path-to-node=\"22,2,1,0\" data-index-in-node=\"38\">Processing<\/b>. Genera una representaci\u00f3n geom\u00e9trica de una disposici\u00f3n orquestal cl\u00e1sica. Escucha activamente el flujo de datos y reacciona iluminando las familias de instrumentos (Cuerdas, Maderas, Metales, Percusi\u00f3n) con una intensidad proporcional a la velocidad (Velocity) del evento musical, creando un entorno inmersivo responsivo.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f6c7d8c e-flex e-con-boxed e-con e-parent\" data-id=\"f6c7d8c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ae95e1c elementor-widget elementor-widget-spacer\" data-id=\"ae95e1c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5059ea4 e-flex e-con-boxed e-con e-parent\" data-id=\"5059ea4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-681524a elementor-widget elementor-widget-button\" data-id=\"681524a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/github.com\/StefFriend\/DirSim\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Repositorio<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-21587bc8 e-flex e-con-boxed e-con e-parent\" data-id=\"21587bc8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-65fb508d elementor-widget elementor-widget-html\" data-id=\"65fb508d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/p5.js\/1.4.0\/p5.min.js\"><\/script>\n\n<style>\n  #aurora-final-canvas {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    pointer-events: none;\n  }\n  \n.fixed-card {\n    background: rgba(15, 20, 35, 0) !important; \n    backdrop-filter: blur(2px) !important; \n    -webkit-backdrop-filter: blur(12px); \n    border: 1px solid rgba(255, 255, 255, 0.1) !important; \n    border-radius: 12px !important; \n    transition: transform 0.3s ease, border-color 0.3s ease !important;\n}\n\n\n<\/style>\n\n<script>\n\/\/ --- VARIABLES GLOBALES ---\nlet t = 0; \nlet stars = []; \nlet shootingStars = [];\n\nfunction setup() {\n  let canvas = createCanvas(windowWidth, windowHeight);\n  canvas.id('aurora-final-canvas');\n  \n  \/\/ Inicializar estrellas est\u00e1ticas\n  for (let i = 0; i < 200; i++) {\n    stars.push({\n      x: random(width),\n      y: random(height),\n      size: random(0.5, 3), \n      baseAlpha: random(50, 200) \n    });\n  }\n}\n\nfunction draw() {\n  \/\/ 1. LIMPIEZA DEL FONDO (Modo BLEND para que limpie bien el frame anterior)\n  blendMode(BLEND); \n  background(11, 12, 21); \n\n  \/\/ 2. ACTIVAR MODO NE\u00d3N (Para que las luces brillen)\n  blendMode(ADD);\n\n  \/\/ ==========================================\n  \/\/ CAPA 1: ESTRELLAS\n  \/\/ ==========================================\n  noStroke(); \n  \n  for (let s of stars) {\n    let flicker = noise(s.x * 0.01, t * 2) * 50; \n    fill(255, 255, 255, s.baseAlpha - flicker);\n    ellipse(s.x, s.y, s.size);\n  }\n\n  \/\/ Estrellas Fugaces\n  if (random(1) < 0.01) { \n    shootingStars.push(createShootingStar());\n  }\n\n  for (let i = shootingStars.length - 1; i >= 0; i--) {\n    let ss = shootingStars[i];\n    ss.x += ss.vx;\n    ss.y += ss.vy;\n    ss.life -= 4; \n\n    if (ss.life > 0) {\n      let tailLength = 60;\n      \n      strokeWeight(2);\n      stroke(255); \n      \n      let gradient = drawingContext.createLinearGradient(ss.x, ss.y, ss.x - ss.vx*tailLength, ss.y - ss.vy*tailLength);\n      gradient.addColorStop(0, `rgba(255, 255, 255, ${ss.life\/255})`);\n      gradient.addColorStop(1, 'rgba(255, 255, 255, 0)');\n      \n      drawingContext.strokeStyle = gradient;\n      line(ss.x, ss.y, ss.x - ss.vx*tailLength, ss.y - ss.vy*tailLength);\n      \n      noStroke(); \n      \n    } else {\n      shootingStars.splice(i, 1); \n    }\n  }\n}\n\nfunction createShootingStar() {\n  return {\n    x: random(width),\n    y: random(-50, height\/3),\n    vx: random(10, 25),\n    vy: random(5, 10),\n    life: 150\n  };\n}\n\nfunction windowResized() {\n  resizeCanvas(windowWidth, windowHeight);\n  stars = [];\n  setup();\n}\n\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>DIRSIM A\u00f1o : 2023 DirSim (Director Simulator) es un ecosistema integral de control y visualizaci\u00f3n musical. DirSim permite a un usuario dirigir una orquesta virtual utilizando gestos de sus manos en tiempo real. El sistema integra seguimiento biom\u00e9trico por visi\u00f3n computacional, conversi\u00f3n din\u00e1mica de protocolos (MIDI a OSC) y retroalimentaci\u00f3n visual inmersiva para una experiencia [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-197","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/posts\/197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/comments?post=197"}],"version-history":[{"count":54,"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/posts\/197\/revisions"}],"predecessor-version":[{"id":1142,"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/posts\/197\/revisions\/1142"}],"wp:attachment":[{"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/media?parent=197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/categories?post=197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/juansebastianmendez.com\/en\/wp-json\/wp\/v2\/tags?post=197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}