Cocoa Touch中的音调生成

amc*_*oud 9 iphone signal-processing objective-c core-audio piano

我需要产生一种可以操纵频率和波动的音调.总体目标是创建一个基本的钢琴.有谁知道我怎么能做到这一点?

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

Fra*_*ger 8

你总是可以从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() {}
};
Run Code Online (Sandbox Code Playgroud)


Nos*_*dna 7

钢琴很奇怪.罗伯特穆格于1980年3月在键盘杂志上写过它.基本(最低频率部分)是合理的,但每个高次谐波都比它应该更亮(或"更尖锐"或更高音调),并且增加量.

第二到第九次谐波比基波更响亮.第十到第二十的声音大致相同.

基本体积膨胀然后潜水,然后它又回来了.其他部分具有特有的上下形状.部分交换能量,因此总体积可以按预期运行.但这是一大堆部分交易能量.我想如果你得到最低的几个正确和奇怪的不和谐传播你就行了.

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


Rol*_*ien 2

查看http://mda.smartelectronix.com/。它们是一系列开源 VST 插件。查看 Piano、ePiano 或 DX10 的源代码。这就像您会发现的一样简单。