Поколение тона в прикосновении какао

Мне нужно создать тон, которым я могу манипулировать частотой и волной. Общая цель - создать базовое пианино. Кто-нибудь знает, как мне этого добиться?

Моя платформа разработки - 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 для разработчиков есть тема (" Синтез аудио"), которая может дать некоторое представление.

Другие вопросы по тегам