2008-12-07 29 views
9

Potrzebuję wygenerować sygnał, który pozwoli mi manipulować częstotliwością i falami. Ogólnym celem jest stworzenie podstawowego fortepianu. Czy ktoś wie, jak mogę to osiągnąć?Generacja dźwięków w kakao Touch

Moja platforma rozwoju jest 2.x iPhone

Odpowiedz

2

odjazdu http://mda.smartelectronix.com/. Są serią open source'owych wtyczek VST. Spójrz na źródło Piano, ePiano lub DX10. To jest tak proste, jak się znajdziesz.

+0

Holy cow. Nie wiedziałem, że zostały otwarte źródła. Fantastyczny! – Nosredna

8

Zawsze można rozpocząć od fal sin. :-)

#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

Fortepian jest dziwny. Robert Moog napisał o tym w "Keyboard Magazine" w marcu 1980 roku. Podstawowy (częściowa najniższa częstotliwość) jest dostrojony, ale każda wyższa harmoniczna jest jaśniejsza (lub "ostrzejsza" lub wyższa), niż powinna być, i coraz większa.

Druga do dziewiątej harmoniczna jest głośniejsza niż podstawowa. Dziesiątą do dwudziestej jest tak głośno.

Fundament puchnie, a następnie nurkuje, po czym wraca. Pozostałe części mają charakterystyczne kształty w górę iw dół. Energia częściowa wymienia energię, więc całkowita objętość działa tak, jak można się spodziewać. Buts to rój częściowych transakcji handlowych. Zgaduję, że jeśli masz najniższe kilka prawych i dziwne, nieharmoniczne rozprzestrzenianie się, zrobisz to dobrze.

Można oglądać akcję w analizatorze spektrum oprogramowania i dowiedzieć się, co należy wiedzieć. Synteza addycyjna jest prawdopodobnie tym, w jaki sposób podjąłem ten problem.

2

Sprawdź kod przykładowy DefaultOutputUnit, który odtwarza falę sinusoidalną.

/Developer/Przykłady/CoreAudio/SimpleSDK/DefaultOutputUnit