Necesito generar color a partir de un tono de audio en Objective-C para una aplicación. ¿Cómo lo hago?

En esencia, se trata de alinear dos escalas numéricas. Afortunadamente, tanto el tono como el color son cosas que tienen escalas numéricas existentes, por lo que el resto (en su mayor parte) es una cuestión de cálculo numérico.

Aquí hay una tabla que traza los tonos musicales (es decir, las Notas) para sus frecuencias. Asumiendo que puede adquirir la frecuencia de un tono, tiene la primera pieza de datos digitales que necesita para realizar una conversión ordenada.

Pitch (música)

El color se vuelve un poco más complicado de digitalizar. Si bien el tono se puede articular con una sola variable (Frecuencia), el color se compone de tres: rojo, verde y azul.

Captura de pantalla del selector de color RGB de Adobe Illustrator CC 2014

Hay transiciones que existen en múltiples dimensiones debido a los tres colores variables utilizados en las pantallas. Gran parte de su decisión sobre la transición que elija mostrar se basará en su capacidad para modelar su espectro ideal.

Para su primer swing, le recomiendo que use la escala de color HSV , que combina Tono, Saturación y Valor o Brillo. Esta escala es importante porque el espectro completo de color está en una sola escala deslizante. Hue, en este caso, se representa en grados, 0-259. Al fijar Saturación y Valor, tiene una escala única que se puede convertir de un lado a otro a la frecuencia de tono.

HSL y HSV

El único problema con HSV es que no es realmente un esquema de color nativo de la mayoría de las computadoras, pero afortunadamente, muchos antes de nosotros han escrito tales conversiones, lo que permite que HSV se traduzca con precisión desde y hacia colores RGB / Hexidecimal. Aquí hay uno en Stack Exchange.

Por ejemplo, Javascript convierte el color HSB / HSV a RGB con precisión

Más allá de eso, la naturaleza multivariable del color se puede aprovechar para hazañas gloriosas, limitadas por su creatividad matemática. Por ejemplo, RGB son tres variables independientes 1-255, o su representación hexadecimal 0-FF. Combinado con las diversas variables de sonido (Din, Volumen, etc.), se podrían crear algunas cosas realmente geniales.

Es posible que desee utilizar una transformación rápida de Fourier para identificar el conjunto de frecuencias de la muestra de audio.
Escribí una aplicación que hizo esto.