Поколение тона в прикосновении какао - PullRequest
9 голосов
/ 07 декабря 2008

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

Моя платформа для разработки - iPhone 2.x

Ответы [ 6 ]

8 голосов
/ 08 декабря 2008

Вы всегда можете начать с 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() {}
};
7 голосов
/ 09 августа 2009

Пианино странное. Роберт Муг написал об этом в журнале «Клавиатура» в марте 1980 года. Фундамент (самая низкая частичная часть) настроен, но каждая высшая гармоника ярче (или «острее», или выше), чем и должна быть, и на все большее количество.

Гармоники со второй по девятую громче основной. Десятый-двадцатый примерно такие же громкие.

Фундаментальный объем увеличивается, затем погружается, затем возвращается. Другие части имеют характерные формы вверх и вниз. Частицы обмениваются энергией, поэтому общий объем действует так, как вы ожидаете. Но это рой частичной торговли энергией. Я предполагаю, что если у вас есть самые низкие права и странный негармоничный спрэд, то все будет хорошо.

Вы можете посмотреть действие в программном анализаторе спектра и узнать, что вам нужно знать. Аддитивный синтез - это, вероятно, то, как я бы решил эту проблему.

3 голосов
/ 28 сентября 2009

Проверьте Mobilesynth ... синтезатор с открытым исходным кодом в магазине приложений: http://code.google.com/p/mobilesynth/

2 голосов
/ 09 августа 2009

Посмотрите пример кода DefaultOutputUnit, который воспроизводит синусоидальную волну.

/ Разработчик / Примеры / CoreAudio / SimpleSDK / DefaultOutputUnit

2 голосов
/ 08 декабря 2008

Форумы разработчиков Apple имеет тему на эту тему (" Синтез аудио "), которая может дать некоторое представление.

2 голосов
/ 07 декабря 2008

Check http://mda.smartelectronix.com/. Это серия VST плагинов с открытым исходным кодом Посмотрите на источник для фортепиано, ePiano или DX10. Это так же просто, как вы собираетесь найти.

...