Cocoa Touch中的音调生成
答
你总是可以从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() {}
};
答
钢琴很奇怪。罗伯特穆格在1980年3月的“键盘杂志”中写到了它的基本原理(最低频率部分),但每个高次谐波比它本该更明亮(或更“尖锐”或更高音调)并且增加。
第二到第九谐波比基波更响亮。第十到第二十大约如此大声。
基本体积膨胀然后潜水,然后它回来。其他部分具有特征性的上下形状。部分交换能量,因此整体音量按您所期望的那样发挥作用。但它是一群交易能量的部分。我猜如果你得到最低的几个权利和奇怪的不和谐传播正确,你会好的。
您可以在软件频谱分析仪中观看动作并了解您需要知道的内容。添加剂合成可能是我如何处理这个问题。
答
查看可以播放正弦波的DefaultOutputUnit示例代码。
/开发/例子/ CoreAudio的/ SimpleSDK/DefaultOutputUnit
圣牛。我不知道那些已经开源。太棒了! – Nosredna 2009-08-08 22:17:04