Generador de tonos puros iOS 6.0

Hola de nuevo, esta vez les traigo los fragmentos mas importantes de mi proyecto final de residencias bajo el cargo del Dr. Luis Alberto Morales Rosales (fuzzycausalorder.org). Dare a conocer a grandes rasgos las actividades de este proyecto para que se den una idea de que fué; con gusto liberaré el cod. fuente para darles la base de proyectos futuros.

Objetivo: Desarrollar una aplicación móvil que ayude a las personas a conocer la calidad auditiva en la que se encuentran actualmente, sin necesidad de someterse a exámenes audiométricos para diagnosticarse, además de que la persona puede conocer el grado de hipoacusia que va sufriendo en el transcurso del tiempo, y tener un resultado preciso para prevenirse si el grado de severidad de la hipoacusia así lo indica.

Hipoacusia es sordera pero dicho mas de caché y la aplicación de la que hablo en el objetivo es una simple y a vez compleja app para iOS ;) . La cual tendrá un generador de tonos constante a diferentes frecuencias y decibeles según lo programemos es lo que veremos en los primeros capítulos de este post, después veremos algo menos gay y al final pueden correr este proyecto en su hackintosh para que se den gusto y deleite para programar a su gusto quien pueda y quiera, recuerda que objective-c es el lenguaje mejor pagado después de cobol :p

Suficiente choro para mi, vamos a cosa de hombres:

Primero antes que todo, me anime a escribir este post porque no hay mucha información realmente útil acerca de estos temas… en español absolutamente nada, así que para no perder el objetivo de este post pondré solo los capítulos en inglés para que todo tipo de usuarios puedan aprovechar este post escribiendo en google international, así que si ven partes en inglés y no saben, no se espanten solo estoy ‘resumiendo’ para los que sí.

Requisitos:

1. xCode 4.5.2 (con integración de cocoa touch)

2. iOS SDK 6.0 (muy recomendable el 6.0, aunque también soporta 4.0 y superiores)

3. MAC OS 10.7.4 (como mínimo para el soporte de iOS 4.0) o

MAC OS 10.8 (para soporte total del xCode y iOS SDK recomendados)

4. Amor, tiempo y cerebro.

Chapter 1: Change of pitch in a tone using AudioUnits for iOS  

La aplicación en general es muy simple para este primer capítulo, es solo un UISlider con un rango de 0 a 4000 que representarán los Hz del tono generado y un UIButton para comenzar y detener la reproducción de este tono, la interfaz gráfica quedaría así:

The tone is generated continuously while you change the frequency so you can play with the tone generator like a slide whistle for hours of neighbour-annoying fun.

Lo mas importante de este post es la API de AudioUnits, gracias a la cual es posible la renderización de un tono continuamente puro (al decir puro me refiero a ondas senoidales constantes en frecuencias y amplitudes). Y tu dirás : “ooo shit pero renderización es solo para imágenes no?” pues no!, debido a que la renderización de un objeto no es hacer mas bonita una imagen, en sonidos se podría definir como un… “contra atenuación”, trato de decir que evitamos que el tono se deforme o pierda calidad con respecto al tiempo.

 

Audio Units

AudioUnits son APIs que generan sonido a bajo nivel en iOS usando recursos mínimos de hardware en una MAC. An AudioUnit generates these samples in its render function. The render function is invoked to generate samples on a dedicated audio thread. 

En un esfuerzo por mantener el código lo mas simple posible acerca de AudioUnits. Mostrare como crear solo un AudioUnit y usarlo.

We have to use AudioUnits API, for more information about what this mean?, you can visit the next link. AudioUnit Documentation for iOS developers

 

Generating your own audio samples

Generando ejemplos de audio significa calcular los valores de una onda de audio. Nuestro tono generado es una onda básica (un tono puro). El valor de la onda está determinada por la siguiente ecuación:

f(n) = a sin ( θ(n) )

Donde n es el sample rate, a es la amplitud en volts y θ(n) es el angulo actual de la onda, determinada por:

θ(n) = 2πƒ n / r

donde ƒ es la frecuencia de el tono que queremos generar y r es el sample rate del audio que estamos generando, dar una definición correcta de sample rate me tomará varios párrafos, así que solo digamos que tiene que ver con la calidad del sonido, es de buen uso cuando miras la onda en un osciloscopio analógico con fines de estudio.

Creo que me estoy excediendo en el choro pero es por si quieren documentar lo que hicieron. Implementando esto en nuestra función de reproducción del AudioUnit, nos da una función como la siguiente:

 

Escribiendo…

Post is being written yet…

Descarga: Pedes descargar el módulo del capítulo uno, en caso de que obtengas unos warning en tu xCode es debido a que NSAsset ya no es mas soportado por el sdk 6.0 para iOS, actualmente estamos en iOS 6.1 pero las dejo para que puedas ver en el Log los eventos ocurridos en caso de un error.

NOTA: Procura no cambiar la variable llamada amplitude = 0.25; ya que un valor arriba de 1.5 puede dañar el hardware de tu computadora (lo digo por experiencia cuando olvide poner el punto).

Generador de tonos chapter 1.

 

 

 

 

 

  • teseium

    podrías continuar tu post, esta muy interesante y quisiera saber mas de tu trabajo, de antemano gracias (y)

  • José Ibáñez

    Suena bastante interesante el proyecto y de la mano del Dr. Morales, siempre se esperan cosas tremendas.