9

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

我的开发平台是 iPhone 2.x

4

6 回答 6

7

钢琴很奇怪。罗伯特·穆格在 1980 年 3 月的《键盘杂志》上对此进行了报道。基频(最低频率部分)是一致的,但每个高次谐波都比应有的更亮(或“更锐利”或更高音调),而且数量越来越多。

二次到九次谐波比基频更响亮。第十到第二十的声音也差不多。

基本面在数量上膨胀然后下潜,然后又回来了。其他部分具有特有的上下形状。部分交换能量,因此整体体积如您所料。但这是一群交易能量的部分。我猜如果你得到了最低的几个,并且奇怪的不和谐传播正确,你会做得很好。

您可以在软件频谱分析仪中观看操作并了解您需要了解的内容。加法合成可能是我解决这个问题的方式。

于 2009-08-08T22:16:02.193 回答
7

你总是可以从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() {}
};
于 2008-12-08T09:56:07.600 回答
3

查看 Mobilesynth...应用商店中的开源合成器:http ://code.google.com/p/mobilesynth/

于 2009-09-28T07:03:51.637 回答
2

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

于 2008-12-07T15:08:23.333 回答
2

Apple 开发者论坛对此有一个主题(“音频合成”),可能会提供一些见解。

于 2008-12-08T10:22:18.777 回答
2

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

/Developer/Examples/CoreAudio/SimpleSDK/DefaultOutputUnit

于 2009-08-09T10:54:19.443 回答