Cocoa Touch中的音调生成

问题描述:

我需要生成一个可以控制频率和波形的音调。总体目标是创建一架基本的钢琴。有谁知道我能做到这一点?Cocoa Touch中的音调生成

我的开发平台是iPhone 2.x的

退房http://mda.smartelectronix.com/。他们是一系列开源VST插件。看看Piano,ePiano或DX10的来源。这很简单,你会找到。

+0

圣牛。我不知道那些已经开源。太棒了! – Nosredna 2009-08-08 22:17:04

你总是可以从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() {} 
}; 

Apple Developer Forums对此有一个线程( “Audio Synthesis”)可能会提供一些见解。

钢琴很奇怪。罗伯特穆格在1980年3月的“键盘杂志”中写到了它的基本原理(最低频率部分),但每个高次谐波比它本该更明亮(或更“尖锐”或更高音调)并且增加。

第二到第九谐波比基波更响亮。第十到第二十大约如此大声。

基本体积膨胀然后潜水,然后它回来。其他部分具有特征性的上下形状。部分交换能量,因此整体音量按您所期望的那样发挥作用。但它是一群交易能量的部分。我猜如果你得到最低的几个权利和奇怪的不和谐传播正确,你会好的。

您可以在软件频谱分析仪中观看动作并了解您需要知道的内容。添加剂合成可能是我如何处理这个问题。

查看可以播放正弦波的DefaultOutputUnit示例代码。

/开发/例子/ CoreAudio的/ SimpleSDK/DefaultOutputUnit

退房Mobilesynth ...一个开源的合成在App Store:http://code.google.com/p/mobilesynth/