Генерация тона в Cocoa Touch

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

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


person amccloud    schedule 07.12.2008    source источник


Ответы (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() {}
};
person Frank Krueger    schedule 08.12.2008

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

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

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

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

person Nosredna    schedule 08.08.2009

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

person face    schedule 28.09.2009

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

person Roland Rabien    schedule 07.12.2008
comment
Святая корова. Я не знал, что они стали открытым исходным кодом. Фантастический! - person Nosredna; 09.08.2009

На Форумы разработчиков Apple есть тема по этому вопросу ("Audio Synthesis"), который может дать некоторую информацию.

person Alex Reynolds    schedule 08.12.2008

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

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

person Peter N Lewis    schedule 09.08.2009