<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nullable Blog [Ignoranto.Info] &#187; Console</title>
	<atom:link href="http://ignoranto.info/tags/console/feed/" rel="self" type="application/rss+xml" />
	<link>http://ignoranto.info</link>
	<description>grbr.says(&#34;a little bit of everything and a lot of nothing&#34;);</description>
	<lastBuildDate>Sat, 24 Jul 2010 01:42:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>C Sharp Morse Code Console.Beep()</title>
		<link>http://ignoranto.info/ricercando/csharp-morse-code-console-beep/</link>
		<comments>http://ignoranto.info/ricercando/csharp-morse-code-console-beep/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 14:04:45 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Beep]]></category>
		<category><![CDATA[Codigo Morse]]></category>
		<category><![CDATA[Console]]></category>

		<guid isPermaLink="false">http://ignoranto.info/?p=589</guid>
		<description><![CDATA[Hola! En este post explicaré como crear un pequeño programita en C# (c Sharp) para convertir un texto cualquiera  a código morse y también para &#8220;pitar&#8221; el beep del ordenador con dicho código! Primero&#8230; ¿Qué es el codigo Morse? El Codigo Morse son la representación de nuestro alfabeto en &#8220;puntos y rayas&#8220;, ello permite la [...]]]></description>
			<content:encoded><![CDATA[<p>Hola! En este post explicaré como crear un pequeño programita en <strong>C# (c Sharp)</strong> para <strong>convertir un texto</strong> cualquiera  a <strong>código morse</strong> y también para &#8220;pitar&#8221; el <strong>beep del ordenador</strong> con dicho código!</p>
<div class="wp-caption aligncenter" style="width: 300px"><a href="http://wpcontent.answers.com/wikipedia/commons/thumb/b/b5/International_Morse_Code.svg/290px-International_Morse_Code.svg.png"><img title="Codigo Morse" src="http://wpcontent.answers.com/wikipedia/commons/thumb/b/b5/International_Morse_Code.svg/290px-International_Morse_Code.svg.png" alt="" width="290" height="374" /></a><p class="wp-caption-text">Codigo Morse</p></div>
<p style="text-align: center;">
<h3>Primero&#8230; ¿Qué es el codigo Morse?</h3>
<p>El <strong>Codigo Morse </strong>son la representación de nuestro alfabeto en &#8220;<strong>puntos y rayas</strong>&#8220;, ello permite la trasmisión de mensaje a través de dispositivos capaces de emitir sonidos o imprimir puntos y rayas (como el telégrafo), si quieres una explicación mas profunda podemos recurrir a la wikipedia: <a href="http://es.wikipedia.org/wiki/C%C3%B3digo_Morse">Código Morse</a></p>
<p>¿Como funciona?</p>
<p>Lo que haremos con nuestro pequeño programa es reconocer <strong>cada caracter de una cadena de texto</strong>, luego enviaremos cada caracter a un método (funcion/procedimiento) y éste nos retornará su representación en código morse (nos retorna un <strong>string</strong>), la funcion recibe como parámetros una variable de tipo char (solo un caracter) y retorna un string (cadena de texto, en este caso una cadena de<strong> puntos y rayas</strong>)</p>
<pre>static string morseCode(char txt)
{
 string morse = "" ;
 switch (txt)
 {
 case 'a': morse = "·-"; break;
 case 'b': morse = "-···"; break;
 case 'c': morse = "-·-·"; break;
 case 'd': morse = "-··"; break;
 case 'e': morse = "·"; break;
 case 'f': morse = "··-·"; break;
 case 'g': morse = "--·"; break;
 case 'h': morse = "····"; break;
 case 'i': morse = "··"; break;
 case 'j': morse = "·---"; break;
 case 'k': morse = "-·-"; break;
 case 'l': morse = "·-··"; break;
 case 'm': morse = "--"; break;
 case 'n': morse = "-·"; break;
 case 'ñ': morse = "--·--"; break;
 case 'o': morse = "---"; break;
 case 'p': morse = "·--·"; break;
 case 'q': morse = "--·-"; break;
 case 'r': morse = "·-·"; break;
 case 's': morse = "···"; break;
 case 't': morse = "-"; break;
 case 'u': morse = "··-"; break;
 case 'v': morse = "···-"; break;
 case 'w': morse = "·--"; break;
 case 'x': morse = "-··-"; break;
 case 'y': morse = "-·--"; break;
 case 'z': morse = "--··"; break;
 case ' ': morse = " "; break;
 case '0': morse = "-----"; break;
 case '1': morse = "·----"; break;
 case '2': morse = "··---"; break;
 case '3': morse = "···--"; break;
 case '4': morse = "····-"; break;
 case '5': morse = "·····"; break;
 case '6': morse = "-····"; break;
 case '7': morse = "--···"; break;
 case '8': morse = "---··"; break;
 case '9': morse = "----·"; break;
 case '.': morse = "·-·-·-"; break;
 case ',': morse = "--··--"; break;
 case '?': morse = "··--··"; break;
 case '\"': morse = "·-··-·"; break;
 default: morse = ""; break;
 }
 return morse;
}</pre>
<p>Eso viene a ser practicamente todo, ahora solo nos queda pedir la cadena, extraer cada caracter y enviarlo a la función anterior:</p>
<p>Para leer una cadena ingresada por teclado usamos el método <strong>Console.ReadLine();</strong> si queremos algo mas &#8220;bonito&#8221; entonces lo ideal sería solicitar la cadena de texto con un mensaje:</p>
<p><strong>Console.Write(</strong>&#8220;Escriba aqui su texto a convertir : &#8220;<strong>)</strong>;<br />
string txt = <strong>Console.ReadLine()</strong>;</p>
<p>Como nuestra funcion <strong>morseCode()</strong> solo trabaja con caracteres en minúscula, entonces necesitamos convertir a minúscula todos los caracteres de nuestra cadena, para ello usamos el método <strong>ToLower()</strong>;</p>
<p>txt = txt.ToLower();</p>
<p>Ahora recorreremos nuestra cadena de texto con un bucle y extraeremos cada caracter, al mismo tiempo enviaremos el caracter extraido a nuestra funcion <strong>morseCode()</strong> e imprimiremos la respuesta de la función:</p>
<pre>char tmp; int p;
for (p = 0; p &lt; txt.Length; p++)
{
 tmp = char.Parse(txt.Substring(p, 1));
 Console.Write("{0} ", morseCode (tmp));
}</pre>
<p>Creamos las variables TMP y P, haciendo uso del bucle FOR (para) recorremos toda la cadena mientras P sea menor que la longitud de la cadena (txt.Length), TMP tomará el valor de la cadena en la posicion P y convertimos la salida a tipo Char (char.Parse), luego imprimimos en pantalla la salida de morseCode(tmp)&#8230;</p>
<p>Ahora construiremos nuestra funcion para pitar el altavoz del sistema (beep)</p>
<p>Las normas del código Morse nos dice que&#8230;</p>
<ol>
<li>Un guión es igual a tres puntos</li>
<li>El espacio entre las partes de la misma letra es igual a un punto</li>
<li>El espacio entre dos letras es igual a tres puntos</li>
<li>El espacio entre dos palabras es igual a siete puntos</li>
</ol>
<pre>static void beepMorseCode(string morse)
{
 int f = 600; //frecuencia en hz del pitido
 int dot = 50; //duracion del pitido PUNTO
 int x = 0;
 char t = ' ';
 while (x &lt; morse.Length)
 {
  t = char.Parse(morse.Substring(x, 1));
  if (t == '·')
  {
   Console.Beep(f, dot); //tono punto
   Thread.Sleep(dot); //separacion entre partes de la letra
  }
  else if (t == '-')
  {
   Console.Beep(f, dot * 3); //tono raya 3 puntos
   Thread.Sleep(dot); //separacion entre partes
  }
  else
  {
   //genera una pausa de 6 puntos
   Thread.Sleep(dot * 6); //en total 7 contando las pausas anteriores
  }
  x++;
 }
 //pausa de 3 puntos, equivale a separacion de frase
 Thread.Sleep(dot * 2);
}</pre>
<p>En nuestro método beepMorsCode recibimos una variable de tipo string, al comienzo declaramos la frecuencia de cada pitido y la duración del mismo, tambien declaramos la duración de cada silencio.<br />
Iniciamos un bucle diciendo: &#8220;mientras X sea menor que la longitud de la variable MORSE&#8221;; iniciamos condiciones, si T (el char &#8220;actual&#8221;) es un PUNTO entonces pitamos F con duración L, si es RAYA pitamos F con el doble de L y si es un ESPACIO hacemos PAUSA (con Thread.Sleep();), incrementamos X;</p>
<p>Para usar la opción SLEEP debemos colocar &#8220;using System.Threading;&#8221; en las primeras lineas de nuestro codigo!</p>
<p>Ahora nuestro pequeño programa ya puede reproducir sonidos según el <strong>codigo morse</strong>, para llamar al método <strong>beepMorseCode()</strong> solo hace falta enviarle el string generado por <strong>morseCode()</strong>, nuestro método beepMorseCode se encargará de generar la secuencia de beeps y pausas adecuadas!</p>
<p>Eso es todo, aquí tienen el código fuente de: <a href="http://develop.ignoranto.info/csharp/beepMorseCode.cs">Console.Beep Morse Code</a> listo para compilar y probar! <img src='http://ignoranto.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/csharp-morse-code-console-beep/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Bach&#039;s Gavotte in Console.Beep();</title>
		<link>http://ignoranto.info/ricercando/bach-gavotte-in-console-beep/</link>
		<comments>http://ignoranto.info/ricercando/bach-gavotte-in-console-beep/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 19:19:59 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Bach]]></category>
		<category><![CDATA[Beep]]></category>
		<category><![CDATA[Console]]></category>

		<guid isPermaLink="false">http://ignoranto.info/?p=567</guid>
		<description><![CDATA[Hoy disponía de tiempo (casi siempre dispongo de tiempo) y como Johann Sebastian Bach es mi compositor favorito decidí escribir una de sus composiciones que tanto me gusta usando frecuencias, tiempos y  el método Beep() de la clase Console en CSharp! Bach es barroco por ello he implementado métodos como trino() y mordente() para darle [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">
<div id="attachment_575" class="wp-caption aligncenter" style="width: 370px"><a href="http://ignoranto.info/wp-content/uploads/clavjsb.jpg"><img class="size-full wp-image-575 " title="Supuesto Clavecín de Bach" src="http://ignoranto.info/wp-content/uploads/clavjsb.jpg" alt="Supuesto Clavecín de Bach" width="360" height="354" /></a><p class="wp-caption-text">Supuesto Clavecín de Bach</p></div>
<p style="text-align: justify;">Hoy disponía de tiempo (casi siempre dispongo de tiempo) y como <strong>Johann Sebastian Bach</strong> es <a href="http://ignoranto.info/ricercando/js-bach-y-yo/">mi compositor favorito</a> decidí escribir una de sus composiciones que tanto me gusta usando frecuencias, tiempos y  el método <strong>Beep()</strong> de la clase Console en CSharp! Bach es barroco por ello he implementado métodos como trino() y mordente() para darle estilo barroco a la melodía <img src='http://ignoranto.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>La obra en sí es la <strong>Gavotta BWV 808</strong> de la <strong>Suite Inglesa No3</strong></p>
<p>Para escuchar la melodía:</p>
<ol>
<li>Descargar el codigo fuente desde<a href="http://develop.ignoranto.info/"> el código ignoranto</a> o haciendo clic <a href="http://develop.ignoranto.info/csharp/Bach-SuiteInglesaNo3-Gavotte.cs">aquí</a>, <a href="http://develop.ignoranto.info/csharp/Bach-SuiteInglesaNo3-Gavotte.cs">Gavotte BWV808</a></li>
<li>Compilar el código fuente con MonoDevelop, Visual Studio, Sharp Develop o directamente con algun compilador de C#</li>
<li>Ejecutar el binario y escuchar (debemos tener un BEEP en nuestra placa, de lo contrario no podremos escuchar</li>
</ol>
<p>Eso es todo, pronto estaré escribiendo el Preludio Op23 Nro5 de Sergei Rachmaninov!</p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/bach-gavotte-in-console-beep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Array Frecuencias Musicales Console.Beep();</title>
		<link>http://ignoranto.info/ricercando/array-frecuencias-musicales-console-beep/</link>
		<comments>http://ignoranto.info/ricercando/array-frecuencias-musicales-console-beep/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 15:12:19 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[Gerber [Ignoranto]]]></category>
		<category><![CDATA[Beep]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Frecuencias Notas Musicales]]></category>

		<guid isPermaLink="false">http://ignoranto.info/?p=565</guid>
		<description><![CDATA[Hola! Necesitaba escribir música en consola y se me ocurrió crear arreglos (arrays) con las frecuencias musicales según octavas, cada arreglo contiene 8 elementos (todas las octavas), a continuación el código en c# (c sharp): int[] ut = new int[8]  { 65, 130, 261, 523, 1046, 2093, 4168, 8372 }; int[] uts = new int[8] [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">
<div class="wp-caption aligncenter" style="width: 422px"><a href="http://mentiraconfortable.files.wordpress.com/2008/07/piano1.jpg"><img class=" " title="Teclas Piano" src="http://mentiraconfortable.files.wordpress.com/2008/07/piano1.jpg" alt="Teclado del Piano" width="412" height="315" /></a><p class="wp-caption-text">Teclado del Piano</p></div>
<p>Hola! Necesitaba escribir música en consola y se me ocurrió crear arreglos (arrays) con las frecuencias musicales según octavas, cada arreglo contiene 8 elementos (todas las octavas), a continuación el código en c# (c sharp):</p>
<pre> int[] ut = new int[8]  { 65, 130, 261, 523, 1046, 2093, 4168, 8372 };
 int[] uts = new int[8] { 69, 138, 277, 554, 1108, 2217, 4434, 8869 };
 int[] re = new int[8]{ 73, 146, 293, 587, 1174, 2349, 4698, 9397  };
 int[] res = new int[8] { 77, 155, 311, 622, 1244, 2489, 4978, 9956 };
 int[] mi = new int[8] { 82, 164, 329, 659, 1318, 2637, 5274, 10548 };
 int[] fa = new int[8] { 87, 174, 349, 698, 1396, 2793, 5587 , 11175};
 int[] fas = new int[8] { 92, 184, 370, 740, 1480, 2959, 5919, 11839 };
 int[] sol = new int[8] { 97, 195, 391, 784, 1568, 3136, 6271, 12543 };
 int[] sols = new int[8] { 103, 207, 415, 830, 1661, 3322, 6644, 13298 };
 int[] la = new int[8] { 110, 220, 440, 880, 1760, 3520, 7040, 14080 };
 int[] las = new int[8] { 116, 233, 466, 932, 1864, 3729, 7458, 14917 };
 int[] si = new int[8] { 123, 246,  493, 987, 1975, 3951, 7902, 15804 };</pre>
<p>¿Cómo funciona?</p>
<p>Pues es sencillo, cada arreglo contiene 8 elementos, siendo cada elemento la <strong>frecuencia de una nota</strong> en una <strong>determinada octava</strong>, muchas de las notas estan redondeadas y otras expresadas en su máximo entero debido a que Console.Beep() solo admite variables de tipo entero. Para invocar a la nota basta con escribir el nombre del arreglo (ut, uts, re, res) y entre corchetes [] la octava deseada menos 1 (debido a que las posiciones del array comienzan desde 0);</p>
<p>Ejemplo:</p>
<p>Si queremos interpretar Do en su 3ra octava escribiríamos lo siguiente:</p>
<p><strong>Console.Beep(ut[2],100);</strong></p>
<h4 style="text-align: center;">¿Por que UT y no DO?</h4>
<p>&#8220;do&#8221; es una palabra reservada, por ello consideré el nombre de UT para reemplazar a &#8220;do&#8221;, recordemos que <strong>Do</strong> en un principio tenia el nombre de <strong>UT</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/array-frecuencias-musicales-console-beep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Imperial March Console.Beep()</title>
		<link>http://ignoranto.info/ricercando/darth-vader-imperial-march-console-beep/</link>
		<comments>http://ignoranto.info/ricercando/darth-vader-imperial-march-console-beep/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 19:54:15 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Experimentos!]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Beep]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Imperial March]]></category>
		<category><![CDATA[Star Wars]]></category>

		<guid isPermaLink="false">http://gerber.ignoranto.info/?p=505</guid>
		<description><![CDATA[Hola! Aquí Star Wars Console.Beep(); escribí como componer la música de StarWars usando Console.Beep(), ahora veremos la famosísima Marcha Imperial (Imperial March) en Console.Beep(); Actualización 28/10/2009: ¿Usas GNU/Linux? Ahora podras escuchar, ejecutar, leer y modificar la marcha imperial desde tu terminal! Solo necesitas tener instalado el comando beep y claro también un beep en la [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hola! Aquí <a href="http://ignoranto.info/ricercando/starwars-console-beep-csharp/">Star Wars Console.Beep();</a> escribí como componer la música de <strong>StarWars</strong> usando <strong>Console.Beep()</strong>, ahora veremos la famosísima <strong>Marcha Imperial</strong> (Imperial March) en Console.Beep();</p>
<h4 style="text-align: justify;">Actualización 28/10/2009:</h4>
<p style="text-align: justify;"><strong>¿Usas GNU/Linux?</strong> Ahora podras escuchar, ejecutar, leer y modificar la <strong>marcha imperial</strong> desde tu terminal! Solo necesitas tener instalado el comando <strong>beep</strong> y claro también un beep en la mainboard de tu PC Lee este post <a href="http://ignoranto.info/ricercando/imperial-march-bash-beep/">Imperial March Bash Beep</a> y descarga el <a href="http://develop.ignoranto.info/bash/imperialMarchBashBeep.sh">script aquí</a>!</p>
<div class="wp-caption aligncenter" style="width: 310px"><img title="Darth Vader" src="http://pub.tv2.no/multimedia/na/archive/00191/Darth_Vader__kostym_191646a.jpg" alt="" width="300" height="309" /><p class="wp-caption-text">Darth Vader</p></div>
<p style="text-align: center;">
<p style="text-align: justify;">No explicaré a detalle ya que son <span style="text-decoration: underline;">333 líneas de código</span> y jamás terminaría de escribir esta entrada, así que solo mostraré uno que otro detallito! La partitura la conseguí de por ahi y la pongo a <a href="http://ignoranto.info/paraDescargar/StarWars-ImperialMarch.pdf">disposición aquí</a> es un arreglo para piano, el código <strong>C Sharp</strong> de esta melodía esta publicada en <a href="http://develop.ignoranto.info/csharp/beep_imperialMarch.cs">develop.ignoranto.info (haz clic para descargar)</a> y el binario ya compilado (y libre de virus) se <a href="http://ignoranto.info/paraDescargar/ImperialMarch.exe">encuentra aqui (haz clic para descargar y escuchar)</a> para escucharlo necesitas el <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=en">framework dotnet</a>.</p>
<p style="text-align: justify;"><strong>¿Que de especial tiene ésta melodía?</strong></p>
<ul>
<li>Esta formada por más de 20 métodos</li>
<li>Existe la función tremolo(); con esta función podemos dar el efecto de trémolo a las notas musicales</li>
</ul>
<p>El método trémolo es el siguiente:</p>
<pre>static void tremolo(int frecuenciaPAR, int duracion)
{
 for (int x = 0; x &lt; 8; x++)
 {
  if (x % 2 == 0)
   Console.Beep(frecuenciaPAR, duracion / 8);
  else
   Console.Beep(frecuenciaPAR / 2, duracion / 8);
 }
}</pre>
<p style="text-align: justify;">Una pequeña explicación de éste método<br />
Cuando queremos hacer o dar el efecto de trémolo tenemos varias alternativas, una de las que se usa en el piano es alternar entre octavas, es decir (ejemplo), si tocamos un Re entonces tenemos que tocar luego un Re superior (una octava arriba) y alternamos entre el Re y el Re más agudo, así es como funciona este método trémolo, divide el tiempo entre 8 y con un bucle repite la operación 8 veces, para alternar entre octavas pregunta si &#8220;el número de veces (numero de veces que tenee que repetir el bucle)&#8221; que está procesando es par (módulo = 0) entonces ejecutará la nota correspondiente, si es impar una nota mas grave (una octava abajo); como ejemplo tenemos a LA, si queremos hacer un trémolo de LA, durante 600 milésimas de segundo escribiríamos asi:</p>
<pre>tremolo(440, 600);</pre>
<p>Esto produciría un trémolo de 600 milésimas de segundo de duración de la nota LA.</p>
<p>Pronto escribiré esta melodia en BASH <img src='http://ignoranto.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  asi podremos ejecutarla en nuestro terminal en GNU/Linux, cuando disponga de tiempo lo escribiré en <strong>userRPN</strong> para las calculadoras <strong>HP 50G!</strong></p>
<p>Puedes encontrar más información sobre el uso beel aquí &gt; <a href="http://ignoranto.info/ricercando/sobrecargas-console-beep/">Metodo System.Console.Beep()</a></p>
<p>¿Conoces a Johann Sebastian Bach? Bach es mi ídolo, admiro bastante a este compositor, por ello escribí la <a href="http://develop.ignoranto.info/csharp/Bach-SuiteInglesaNo3-Gavotte.cs">Gavotte de la Suite Inglesa 3</a> de Johann Sebastian Bach en Console.Beep();</p>
<p style="text-align: right;"><a href="http://develop.ignoranto.info/csharp/beep_imperialMarch.cs">Descarga, lee y compila el código!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/darth-vader-imperial-march-console-beep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>StarWars Console.Beep()</title>
		<link>http://ignoranto.info/ricercando/starwars-console-beep-csharp/</link>
		<comments>http://ignoranto.info/ricercando/starwars-console-beep-csharp/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 05:30:10 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Experimentos!]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Beep]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Star Wars]]></category>

		<guid isPermaLink="false">http://gerber.ignoranto.info/?p=499</guid>
		<description><![CDATA[Hola, aquí explicaré como componer la melodía de StarWars usando Console.Beep() Actualización 28/10/2009 ¿Usas GNU/Linux? ¿Mono ejecuta el binario pero no suena la bocina de tu PC? La solución esta en éste post: Imperial March Bash Beep, un script en BASH con las frecuencias de la Marcha Imperial de StarWars listo para ejecutar, incluye control [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">Hola, aquí explicaré como componer la melodía de<strong> StarWars</strong> usando <strong>Console.Beep()</strong></p>
<div id="attachment_500" class="wp-caption aligncenter" style="width: 387px"><a href="http://ignoranto.info/wp-content/uploads/Darth_Vader_Programando.jpg"><img class="size-full wp-image-500       " title="Darth Vader Programando" src="http://ignoranto.info/wp-content/uploads/Darth_Vader_Programando.jpg" alt="Darth Vader Programando" width="377" height="253" /></a><p class="wp-caption-text">Darth Vader aprendiendo a programar!</p></div>
<p style="text-align: center;">
<h3 style="text-align: justify;">Actualización 28/10/2009</h3>
<p style="text-align: justify;"><strong>¿Usas GNU/Linux?</strong> ¿Mono  ejecuta el binario pero no suena la bocina de tu PC? La solución esta en éste post: <a href="http://ignoranto.info/ricercando/imperial-march-bash-beep/">Imperial March Bash Beep</a>, un <strong>script en BASH</strong> con las frecuencias de la Marcha Imperial de StarWars listo para ejecutar, incluye control de tempo para ejecutarlo al tempo (bpm, negras por minuto) que más gustes!</p>
<p style="text-align: justify;">Continuando con el post &#8230;</p>
<p style="text-align: justify;">Anteriormente <a href="http://ignoranto.info/ricercando/bach-en-bash-beep-en-consola/">escribí aquí</a> como hacer crear pequeñas melodías usando una <strong>consola en GNU</strong>, ahora le tocó el turno a <strong>Microsoft Windows</strong>; usaremos <strong>Microsoft Visual Studio</strong> y programaremos en Do Sostenido (C#, <strong>C Sharp</strong>) la melodía de <strong>StarWars</strong>.</p>
<p>En este <span style="text-decoration: line-through;">pseudo</span>tutorial haremos uso del método Console.Beep() de la clase System en C Sharp, si quieres conocer más a fondo como funciona éste método puedes leer &gt;&gt; <a href="http://ignoranto.info/ricercando/sobrecargas-console-beep/">Sobrecargas en Console.Beep();</a></p>
<p><strong>Gerber dice:</strong></p>
<blockquote><p>No me hago responsable por el uso inadecuado de <strong>Console.Beep();</strong> si exageras escribiendo <span style="text-decoration: underline;">frecuencias muy altas</span> puedes llegar a dañar TUS OIDOS y probablemente también dañar el hardware de tu ordenador!</p></blockquote>
<p><strong>Requisitos:</strong></p>
<ol>
<li>Conocimientos básicos de programación en C Sharp<br />
<span style="text-decoration: underline;">Métodos</span> y <span style="text-decoration: underline;">Bucles</span></li>
<li>Paciencia y Muchas ganas de programar</li>
<li>Amor por la música</li>
</ol>
<p>Comenzemos&#8230;</p>
<div id="attachment_574" class="wp-caption alignright" style="width: 220px"><a href="http://ignoranto.info/wp-content/uploads/star_wars.jpg"><img class="size-medium wp-image-574 " title="Arreglo de la Partitura de Star Wars" src="http://ignoranto.info/wp-content/uploads/star_wars-262x300.jpg" alt="Arreglo de la Partitura de Star Wars" width="210" height="240" /></a><p class="wp-caption-text">Arreglo de la Partitura de Star Wars</p></div>
<p>Programar toda la melodía escribiendo &#8220;nota por nota&#8221; nos llevaría dias, meses (y quizá años); para ello crearemos (e implementaremos) métodos y haremos uso de <strong>bucles FOR</strong> para llamar (o repetir) &#8220;ciertas secuencias musicales&#8221; las veces que sean necesarias durante la melodía!</p>
<p><strong>Console.Beep(int frecuencia, int duración_sonido);</strong><br />
Este método de la clase consola necesita 2 parámetros, el primero es la frecuencia de tipo ENTERO (no double, no float) y la duración del sonido expresado en milésimas de segundo, ejemplo si quisieramos hacer sonar una LA (frecuencia = 440hertz) durante 3 segundos (3000 milésimas de segundo) escribiríamos asi:</p>
<pre>Console.Beep(440, 3000) // laaaaaaaaaaaaaaaaa</pre>
<p>Aquí tenemos una <a href="http://latecladeescape.com/w0/recetas-algoritmicas/frecuencia-de-las-notas-musicales/tabla-de-frecuencias.html">tabla de frecuencias</a> de las notas musicales, sería bueno que echemos un vistazo para conocer las frecuencias, es necesario redondearlas (o expresar su máximo entero) para usar la frecuencia en Beep();</p>
<p>Se ha dividido el tema en 3 partes, cada parte es un método (método = función, procedimiento) y cada método ejecuta una secuencia de notas diferentes (estas notas están asociadas en otros métodos), los métodos son: partI_starwars(); partII_starwars(); y final();</p>
<div id="attachment_501" class="wp-caption aligncenter" style="width: 437px"><a href="http://gerber.ignoranto.info/wp-content/uploads/PrimeraParte.jpg"><img class="size-full wp-image-501 " title="Primera Parte" src="http://ignoranto.info/wp-content/uploads/PrimeraParte.jpg" alt="Primera Parte" width="427" height="88" /></a><p class="wp-caption-text">El método partI_starwars(); ejecuta este fragmento!</p></div>
<p>La primera parte esta formada por 3 métodos:</p>
<ul>
<li>rerere(); ejecuta un tresillo (tres notas en una corchea) de la nota RE</li>
<li>dosila(); ejecuta un tresillo con las notas Do Si La</li>
<li>dosido(); ejecuta un tresillo con las notas Do Si Do</li>
</ul>
<p>A continuación el código de cada método (rerere, dosila, dosido)</p>
<pre>//tresillo re re re
static void rerere(int d)
{
 //un bucle FOR repite 3 veces el Beep
 for (int x = 0; x &lt; 3; x++) {
   Console.Beep(523, d); //re
 }
}

//tresillo do si la
static void dosila(int d)
{
 Console.Beep(1046, d); //do
 Console.Beep(987, d); //si
 Console.Beep(880, d);//la
}

//tresillo do si do
static void dosido(int d)
{
 Console.Beep(1046, d);
 Console.Beep(987, d);
 Console.Beep(1046, d);
}</pre>
<p>Cada tresillo recibe un parámetro, en esta melodía he tomado <span style="text-decoration: underline;">1200 milésimas de segundo</span> como <strong>duración de una negra</strong>, como sabemos (si es que sabemos) los tresillos se ejecutan en el lapso de una corchea, entonces nuestra corchea vale 600 (la mitad de la negra), y cada tresillo valdría 200, es por eso que el parámetro (int d) recibirá un 200; también se ha usado un bucle para que se repita el primer tresillo (rerere), ahora veremos cómo esta compuesto nuestro método partI_starwars();</p>
<pre>static void partI_starwars()
{
 rerere(200); // llamamos a la funcion rerere()
 Console.Beep(783, 1200); //sol
 Console.Beep(1174, 1200);//re2
 dosila(200); //funcion dosila()
 Console.Beep(1567, 1200); //sol2
 Console.Beep(1174, 600); //re2
 dosila(200); //nuevamente funcion dosila()
 Console.Beep(1567, 1200); //sol2
 Console.Beep(1174, 600); //re2
 dosido(200); //ahora dosido()
 Console.Beep(880, 1200); //la
}</pre>
<div id="attachment_502" class="wp-caption aligncenter" style="width: 437px"><a href="http://ignoranto.info/wp-content/uploads/SegundaParte.jpg"><img class="size-full wp-image-502  " title="Segunda Parte" src="http://ignoranto.info/wp-content/uploads/SegundaParte.jpg" alt="SegundaParte" width="427" height="174" /></a><p class="wp-caption-text">El método partII_starwars();</p></div>
<p>La segunda parte está formada por los métodos:</p>
<ul>
<li>reremimi(); Como verán existe un puntillo, re &#8230; re mi&#8230; mi</li>
<li>frase000(); Una larga melodía</li>
<li>frase001(); Otra larga melodía</li>
<li>frase002(); Y La última casi larga melodía</li>
</ul>
<p>Estos métodos no reciben parámetros, y se ejecutan de modo secuencial, aquí el código de los métodos (reremimi, frase001&#8230;)</p>
<pre>static void reremimi()
{
 Console.Beep(523, 400); //re
 Console.Beep(523, 200); //re
 Console.Beep(659, 900); //mi
 Console.Beep(659, 300); //mi
}

static void frase000()
{
 Console.Beep(1046,300);//do
 Console.Beep(987, 300);//si
 Console.Beep(880, 300);//la
 Console.Beep(783, 300);//sol

 Console.Beep(783, 300);//sol
 Console.Beep(880, 150);//la
 Console.Beep(987, 150);//si
 Console.Beep(880, 300);//la
 Console.Beep(659, 300); //mi
 Console.Beep(733, 600); //fa#
}

static void frase001()
{
 Console.Beep(1046, 300);//do
 Console.Beep(987, 300);//si
 Console.Beep(880, 300);//la
 Console.Beep(783, 300);//sol

 Console.Beep(1174, 900);//re2
 Console.Beep(880, 300);//la
 Console.Beep(880, 600);//la
}

static void frase002()
{
 Console.Beep(1174, 400); //re2
 Console.Beep(1174, 200); //re2
 Console.Beep(1567, 400); //sol2
 Console.Beep(1396, 200); //sol2
 Console.Beep(1244, 400); //mib
 Console.Beep(1174, 200); //re
 Console.Beep(1046, 400); //do
 Console.Beep(923, 200);  //sib
 Console.Beep(880, 400);  //la
 Console.Beep(783, 200);  //sol
 Console.Beep(1174, 600);//re2
 for (int x = 0; x &lt; 3; x++)
 {
  Console.Beep(880, 200);  //la
 }
 Console.Beep(880, 600);  //la
}</pre>
<p>Luego tendremos que asociar éstos métodos en el método principal que es partII_starwars(); solo haremos una llamada a cada método y éstos iran ejecutando sus partes!</p>
<pre>static void partII_starwars()
{
 reremimi();frase000();
 reremimi();frase001();
 reremimi();frase000();
 frase002();
}</pre>
<p>La parte final</p>
<div id="attachment_503" class="wp-caption aligncenter" style="width: 383px"><a href="http://ignoranto.info/wp-content/uploads/TerceraParte.jpg"><img class="size-full wp-image-503 " title="final()" src="http://ignoranto.info/wp-content/uploads/TerceraParte.jpg" alt="Final de la melodía de StarWars" width="373" height="54" /></a><p class="wp-caption-text">Final de la melodía de StarWars</p></div>
<p>Ahora solo nos queda el método final(); es tan simple y está formado por 2 bucles y 2 largas notas</p>
<pre>static void final()
{
 for (int x = 0; x &lt; 3; x++)
 {
  Console.Beep(1174, 200); //re2
 }
Console.Beep(1567, 1800); //sol2

for (int x = 0; x &lt; 3; x++)
 {
  Console.Beep(783, 200); //re2
 }
 Console.Beep(783, 1800);  //sol
}</pre>
<p>Los bucles ejecutan los tresillos y las largas notas son las Blancas (equivalen a 2 negras) pero son blancas con puntillo (el puntillo equivale a la mitad de su propia duración) eso quiere decir que equivale a 1800 milésimas de segundo (1200 = blanca, 600 = mitad de blanca =&gt; 1200+600 = 1800).</p>
<p>Ahora solo nos queda armar el Main(), el cual se encargará de ejecutar la primera, segunda parte y la parte final, su código es:</p>
<pre>static void Main()
{
 //repetimos la primera parte 2 veces
 //asi esta en la partitura <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
 for (int x = 0; x &lt; 2; x++) {partI_starwars();}
 //ejecutamos la segunda parte 1 sola vez
 partII_starwars();
 //nuevamente la primera parte vuelve a ejecutarse
 //2 veces
 for (int x = 0; x &lt; 2; x++) { partI_starwars(); }
 //ejecutamos el final de la melodia
 final();
}</pre>
<p style="text-align: justify;">El código de ésta melodía la encuentras aquí &gt; <a href="http://develop.ignoranto.info/csharp/beep_starwars.cs">starwars beep.cs</a>, si quieres escuchar la melodía (sin necesidad de compilar el código) puedes descargarte el binario (libre de virus) <a href="http://ignoranto.info/paraDescargar/beep_starwars.exe">starwars_beep.exe</a>; para ejecutar necesitas el <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=en">framework.net</a></p>
<p style="text-align: right;">¿Encontraste algún fallo? Puedes escribirme a <strong>gerber@ignoranto.info</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/starwars-console-beep-csharp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
