2016-11-21 1 views
0

Я начинаю все это. Моя цель - создать файл обработки, который при загрузке будет воспроизводить мелодию в течение 30 секунд. Мелодия должна несколько раз меняться по последовательности.Циклы и увеличение громкости для аудио в процессе обработки

Я ищу, чтобы накинуть свой outplaynotes на 30 секунд. Также есть ли способ увеличить объем этих заметок? Я хочу воспроизвести звуковые образцы поверх playnotes, но образцы намного громче, чем playnotes. Каков наилучший способ выровнять их, объемный?

import ddf.minim.*; 
import ddf.minim.ugens.*; 

Minim minim; 
AudioOutput out; 
myDelay; 

void setup() { 
    size(800, 300, P2D); 
    minim = new Minim(this); 
    out = minim.getLineOut(); 
    myDelay = new Delay(1.5,0.5, false,false); 

    out.pauseNotes(); 

    out.setTempo(240); 

    out.playNote(0.00, 1.0, new ToneInstrument(80, 0.5, out)); 
    out.playNote(2.00, 0.5, new ToneInstrument(100, 0.5, out)); 
    out.playNote(3.00, 0.5, new ToneInstrument(250, 0.5, out)); 
    out.playNote(4.00, 1.0, new ToneInstrument(90, 0.5, out)); 
    out.playNote(5.00, 1.0, new ToneInstrument(100, 0.5, out)); 
    out.playNote(6.00, 0.5, new ToneInstrument(120, 0.5, out)); 
    out.playNote(7.00, 0.5, new ToneInstrument(270, 0.5, out)); 
    out.playNote(8.00, 1.0, new ToneInstrument(110, 0.5, out)); 
    out.resumeNotes(); 
} 

class ToneInstrument implements Instrument { 

    Oscil  wave; 
    Damp damp; 

    ToneInstrument(float frequency, float amplitude, AudioOutput output) { 
     out = output; 

     wave = new Oscil(frequency, amplitude, Waves.TRIANGLE); 
     damp = new Damp(0.0001, 1.5); 
     wave.patch(damp); 
     wave.patch(myDelay); 
    } 

    void noteOn(float dur) { 
     damp.setDampTimeFromDuration(dur); 
     damp.activate(); 
     damp.patch(out); 
    } 

    void noteOff() { 
     damp.unpatchAfterDamp(out); 
    } 

} 

void draw() { 
} 

ответ

0

Для зацикливание, вы можете использовать the frameCount variable и the modulo operator, чтобы сделать что-то каждые Х кадров. Вот небольшой пример, который просто печатает что-то на консоли каждые 60 кадров, или один раз в секунду:

void draw(){ 
    if(frameCount % 60 == 0){ 
     println("frameCount: " + frameCount); 
    } 
} 

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

Что касается объема, то ваш лучший друг the Minim documentation. Например, класс AudioOutput имеет пару функций для установки громкости. Я бы начал там, если бы был вами.

+0

У меня есть 16 playnotes, как я могу объединить их все вместе с количеством кадров? – Ham

+0

@Ham Вам повезет, если вы попробуете что-нибудь. Вы могли хранить заметки и длительность их кадров в массивах, или вы могли бы создать класс, который хранит эту информацию. Затем просто перейдите по этой структуре данных и проверьте длительность кадров, а затем запустите соответствующие заметки. Попробуйте что-нибудь и опубликуйте новый вопрос, если вы застряли. –

Смежные вопросы