Поколение тона в прикосновении какао
Мне нужно создать тон, которым я могу манипулировать частотой и волной. Общая цель - создать базовое пианино. Кто-нибудь знает, как мне этого добиться?
Моя платформа разработки - iPhone 2.x
6 ответов
Вы всегда можете начать с 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() {}
};
Пианино странное. Роберт Муг написал об этом в журнале Keyboard Magazine в марте 1980 года. Фундамент (частичная самая низкая частота) находится в гармонии, но каждая высшая гармоника ярче (или "острее", или выше), чем должна быть, и с возрастающей величиной.
Гармоники со второй по девятую громче основной. Десятый-двадцатый примерно такие же громкие.
Фундаментальный объем увеличивается, а затем погружается, затем возвращается. Другие части имеют характерные формы вверх и вниз. Частицы обмениваются энергией, поэтому общий объем действует так, как вы ожидаете. Но это рой частичной торговли энергией. Я предполагаю, что если у вас есть самые низкие права и странный негармоничный спред, вы бы все сделали хорошо.
Вы можете наблюдать за происходящим в программном анализаторе спектра и узнать, что вам нужно знать. Аддитивный синтез - это, вероятно, то, как я бы взял проблему.
Проверьте Mobilesynth... синтезатор с открытым исходным кодом в магазине приложений: http://code.google.com/p/mobilesynth/
Проверьте http://mda.smartelectronix.com/. Это серия плагинов VST с открытым исходным кодом. Посмотрите на источник для фортепиано, ePiano или DX10. Это так же просто, как вы собираетесь найти.
Посмотрите пример кода DefaultOutputUnit, который воспроизводит синусоидальную волну.
/ разработчик / Примеры /CoreAudio/SimpleSDK/DefaultOutputUnit
На форумах Apple для разработчиков есть тема (" Синтез аудио"), которая может дать некоторое представление.