{"id":18,"date":"2007-05-24T15:30:22","date_gmt":"2007-05-24T14:30:22","guid":{"rendered":"http:\/\/slack.codemaniacs.com\/blog\/2007\/05\/24\/sintesis-musical-para-mi-o-para-torpes-en-general-iii\/"},"modified":"2023-05-07T06:42:03","modified_gmt":"2023-05-07T05:42:03","slug":"sintesis-musical-para-mi-o-para-torpes-en-general-iii","status":"publish","type":"post","link":"https:\/\/slack.codemaniacs.com\/blog\/2007\/05\/24\/sintesis-musical-para-mi-o-para-torpes-en-general-iii\/","title":{"rendered":"S\u00ed\u00adntesis musical para m\u00ed\u00ad (o para torpes en general :) III"},"content":{"rendered":"<p><strong>3) M\u00e1s ondas b\u00e1sicas<\/strong><\/p>\n<p>No solo de senos vive el hombre (salvo que nos pongamos a hacer s\u00edntesis aditiva), as\u00ed que vamos a ver unas cuantas ondas m\u00e1s que podemos utilizar como base para construir sonidos.<\/p>\n<ul>\n<li><b><a href=\"http:\/\/en.wikipedia.org\/wiki\/Square_wave\">Onda cuadrada<\/a>:<\/b><script type=\"text\/javascript\" src=\"https:\/\/media.dreamhost.com\/ufo.js\"><\/script>\n<p id=\"square.mp3\"><a href=\"http:\/\/www.macromedia.com\/go\/getflashplayer\">Get the Flash Player<\/a> to see this player.<\/p>\n<p><script type=\"text\/javascript\"><br \/>\n  var FO = { movie:\"https:\/\/media.dreamhost.com\/mediaplayer.swf\",width:\"200\",height:\"20\",majorversion:\"7\",build:\"0\",bgcolor:\"#FFFFFF\",<br \/>\nflashvars:\"file=http:\/\/slack.codemaniacs.com\/misc\/tutorial_sintesis\/square.mp3&amp;showdigits=true&amp;autostart=false\" };<br \/>\nUFO.create(FO,\"square.mp3\");<br \/>\n<\/script><\/p>\n<p>Se obtiene alternando dos valores (en nuestro caso +1 y -1) con la frecuencia deseada. Expresado en c\u00f3digo, podr\u00eda ser algo como esto:<\/p>\n<blockquote>\n<pre>\/\/ Generacion del i-esimo sample de una onda cuadrada \n\/\/ de frecuencia f\nfloat t = i\/sampling_rate; \/\/ instante i en segundos\nfloat periodo = 1.0f \/ f; \/\/ periodo de la onda en segundos\nif (fmodf(t,periodo) &lt; periodo\/2.0f)\n    y[i] = 1.0f;\nelse\n    y[i] = -1.0f;\n<\/pre>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"http:\/\/slack.codemaniacs.com\/images\/tutorial_sintesis\/square.png\" alt=\"Onda cuadrada.\" \/><\/p>\n<p>Otra posibilidad es hacer que las zonas a +1 y -1 no tengan la misma longitud (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Pulse_width_modulation\">pulse width modulation<\/a>)<\/li>\n<li><b><a href=\"http:\/\/en.wikipedia.org\/wiki\/Sawtooth_wave\">Onda de diente de sierra<\/a>:<\/b>\n<p id=\"sawtooth.mp3\"><a href=\"http:\/\/www.macromedia.com\/go\/getflashplayer\">Get the Flash Player<\/a> to see this player.<\/p>\n<p><script type=\"text\/javascript\"><br \/>\n  var FO = { movie:\"https:\/\/media.dreamhost.com\/mediaplayer.swf\",width:\"200\",height:\"20\",majorversion:\"7\",build:\"0\",bgcolor:\"#FFFFFF\",<br \/>\nflashvars:\"file=http:\/\/slack.codemaniacs.com\/misc\/tutorial_sintesis\/sawtooth.mp3&amp;showdigits=true&amp;autostart=false\" };<br \/>\nUFO.create(FO,\"sawtooth.mp3\");<br \/>\n<\/script><\/p>\n<p>En cada periodo, aumenta linealmente desde -1 a 1, cayendo bruscamente a -1 en el comienzo del siguiente periodo. Dicho en C viene a ser:<\/p>\n<blockquote>\n<pre>\/\/ Sample i-esimo, frecuencia f\nfloat t = i\/sampling_rate;\nfloat periodo = 1.0f \/ f;\ny[i] = 2.0f*(fmodf(t, periodo)\/periodo)-1.0f;\n<\/pre>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"http:\/\/slack.codemaniacs.com\/images\/tutorial_sintesis\/sawtooth.png\" alt=\"Onda de diente de sierra.\" \/><\/li>\n<li><b><a href=\"http:\/\/en.wikipedia.org\/wiki\/Triangle_wave\">Onda triangular<\/a>:<\/b>\n<p id=\"triangle.mp3\"><a href=\"http:\/\/www.macromedia.com\/go\/getflashplayer\">Get the Flash Player<\/a> to see this player.<\/p>\n<p><script type=\"text\/javascript\"><br \/>\n  var FO = { movie:\"https:\/\/media.dreamhost.com\/mediaplayer.swf\",width:\"200\",height:\"20\",majorversion:\"7\",build:\"0\",bgcolor:\"#FFFFFF\",<br \/>\nflashvars:\"file=http:\/\/slack.codemaniacs.com\/misc\/tutorial_sintesis\/triangle.mp3&amp;showdigits=true&amp;autostart=false\" };<br \/>\nUFO.create(FO,\"triangle.mp3\");<br \/>\n<\/script><\/p>\n<p>Es parecida a la anterior, pero durante la mitad del periodo crece linealmente de -1 a 1, y durante la otra mitad decrece linealmente volviendo a -1, sin discontinuidad.<\/p>\n<blockquote>\n<pre>\/\/ Sample i-esimo, frecuencia f\nfloat t = i\/sampling_rate;\nfloat periodo = 1.0 \/ f;\nfloat semiperiodo = periodo\/2.0f;\nif (fmodf(t,periodo) &lt; periodo\/2.0f)\n    y[i] = 2.0f*(fmodf(t,semiperiodo)\/semiperiodo)-1.0f;\nelse\n    y[i] = 1.0f-2.0f*fmod(t,semiperiodo)\/semiperiodo;\n<\/pre>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"http:\/\/slack.codemaniacs.com\/images\/tutorial_sintesis\/triangle.png\" alt=\"Onda triangular.\" \/><\/li>\n<\/ul>\n<p>En el <a href=\"http:\/\/slack.codemaniacs.com\/misc\/tutorial_sintesis\/sintesis03_ondas.zip\"> programa de ejemplo<\/a> de este cap\u00ed\u00adtulo (ahora con un 100% m\u00e1s de Makefile) est\u00e1 todo esto en forma compilable para poder probarlo f\u00e1cilmente. Por cierto, ninguno de los ejemplos est\u00e1 optimizado porque pretenden ser lo m\u00e1s claros posible, si alguien tiene sugerencias sobre como implementar mejor cualquier cosa nos lo podemos pasar muy bien coment\u00e1ndolas :)<\/p>\n<p>En fin, esto es todo por hoy. En el pr\u00f3ximo post, cosillas sobre espectros de frecuencias y aliasing (supongo que la pereza me obligar\u00e1 a dejarme los filtros para dentro de dos posts :)<\/p>\n<p><strong>EDIT:<\/strong> A peticion de pplux, ahi van los enlaces a los posts anteriores:<\/p>\n<ul>\n<li><a href=\"https:\/\/slack.codemaniacs.com\/blog\/2007\/04\/22\/sintesis-musical-para-mi-o-para-torpes-en-general-ii\/\">Parte II: Senos!!!<\/a><\/li>\n<li><a href=\"https:\/\/slack.codemaniacs.com\/blog\/2007\/04\/17\/sintesis-de-audio-para-mi-o-para-torpes-en-general\/\">Parte I: Haciendo ruido<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>3) M\u00e1s ondas b\u00e1sicas No solo de senos vive el hombre (salvo que nos pongamos a hacer s\u00edntesis aditiva), as\u00ed que vamos a ver unas cuantas ondas m\u00e1s que podemos utilizar como base para construir sonidos. Onda cuadrada: Get the Flash Player to see this player. Se obtiene alternando dos valores (en nuestro caso +1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,4,6,3],"tags":[],"_links":{"self":[{"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/posts\/18"}],"collection":[{"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":2,"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":97,"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/posts\/18\/revisions\/97"}],"wp:attachment":[{"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/media?parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/categories?post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/slack.codemaniacs.com\/blog\/wp-json\/wp\/v2\/tags?post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}