2008-12-07 19 views
9

Necesito generar un tono que pueda manipular frecuencia y onda. El objetivo general es crear un piano básico. ¿Alguien sabe cómo puedo lograr esto?Generación de tonos en Cocoa Touch

Mi plataforma de desarrollo es el iPhone 2.x

Respuesta

2

Salida http://mda.smartelectronix.com/. Son una serie de plugins VST de código abierto. Mira la fuente de Piano, ePiano o DX10. Es tan simple como lo que vas a encontrar.

+0

vaca Santo. No sabía que esos habían sido fuente abierta. ¡Fantástico! – Nosredna

8

Siempre puede comenzar con sin waves. :-)

#include <cmath> 

typedef double Sample; 
typedef double Time; 

class MonoNote { 
protected: 
    Time start, duration; 
    virtual void internalRender(double now, Sample *mono) = 0; 
public: 
    MonoNote(Time s, Time d) : start(s), duration(d) {} 
    virtual ~MonoNote() {} 
    void render(double now, Sample *mono) { 
     if (start <= now && now < start + duration) { 
      internalRender(now, mono); 
     } 
    } 
}; 

class MonoSinNote : public MonoNote { 
    Time freq; 
    Sample amplitude; 
protected: 
    void internalRender(double now, Sample *mono) { 
     const double v = sin(2*M_PI*(now - start) * freq); 
     *mono += amplitude*v; 
    } 
public: 
    MonoSinNote(Time s, Time d, Time f, Sample a) : MonoNote(s, d), freq(f), amplitude(a) {} 
    ~MonoSinNote() {} 
}; 
7

Piano es extraño. Robert Moog escribió sobre esto en Keyboard Magazine en marzo de 1980. El fundamental (frecuencia más baja parcial) está en sintonía, pero cada armónico superior es más brillante (o "más agudo" o más agudo) de lo que debería ser, y en una cantidad creciente.

El segundo a noveno armónicos son más fuertes que el fundamental. Del décimo al vigésimo son casi tan ruidosos.

El elemento fundamental se hincha en volumen y luego se sumerge, luego vuelve. Los otros parciales tienen formas ascendentes y descendentes características. Los parciales intercambian energía por lo que el volumen general actúa como era de esperar. Pero es un enjambre de parciales que comercian energía. Supongo que si obtuvieras los pocos más bajos a la derecha y la extraña dispersión inarmónica, lo harías bien.

Puede ver la acción en un analizador de espectro de software y aprender lo que necesita saber. La síntesis aditiva es probablemente la forma en que asumiría el problema.

2

Consulte el código de ejemplo DefaultOutputUnit que reproduce una onda sinusoidal.

/desarrollador/Ejemplos/CoreAudio/SimpleSDK/DefaultOutputUnit

Cuestiones relacionadas