Синтезатор динамических волновых форм аудио, написан на языке Javascript. (Dynamic waveform audio synthesizer, written in Javascript.)
Генерируйте музыкальные ноты динамически и проиграйте их в своем браузере, используя HTML5-элемент аудио HTML5 Audio Element. (Generate musical notes dynamically and play them in your browser using the HTML5 Audio Element.)
Не требуются никакие статические файлы. (Помимо исходника, конечно!) (No static files required. (Besides the source, of course!))
Чтобы увидеть в действии демонстрационный пример с синтезатором audiosynth, посетите сайт https://keithwhor.com/music/ (To see a demo of audiosynth in action, visit https://keithwhor.com/music/)
Подразумевая, что файл audiosynth.js находится в вашем текущем каталоге, импортируйте пакет синтеза, используя скрипт: (Assuming audiosynth.js is in your current directory, import package using:)
<script src="audiosynth.js"></script>
Класс синтезатор аудио audiosynth реализует singleton-класс, '''AudioSynth'''. По умолчанию, глобальная(окно window) переменная '''Synth'''
содержит экземпляр класса синтезатор аудио '''AudioSynth'''.
(audiosynth implements a singleton class, AudioSynth
. By default, the global (window) variable Synth
is the instance of the class.)
Любая попытка инстанцировать новый объект класса синтезатор аудио '''AudioSynth''' только создаст ссылки на
исходный объект класса синтезатор аудио '''AudioSynth''.
(Any attempt to instantiate new AudioSynth
object will only create references to
the original object.)
Synth instanceof AudioSynth; // верно true
var testInstance = new AudioSynth;
testInstance instanceof AudioSynth; // верно true
testInstance === Synth; // верно true
=== Использование класса синтезатор аудио '''AudioSynth''', для генерации .WAV-файлов...
(To use AudioSynth
to generate .WAV files...)
Synth.generate(sound, note, octave, duration);
/*
Генерирует base64-закодированный dataURI wavefile (.WAV)-файл,содержащий ваши данные.
(Will generate a base64-encoded dataURI wavefile (.WAV) containing your data.)
sound
числовой индекс или строка, относящаяся к звуковому профилю (по идентификатору или по имени, соответственно)
(a numeric index or string referring to a sound profile (by id or name, respectively))
note
нота, которую хотите проиграть (A, B, C, D, E, F, G). Поддерживаются диезы (т.е. C#), но не бемоли.
(Используйте соответствующий диез!)
(the note you wish to play (A,B,C,D,E,F,G). Supports sharps (i.e. C#) but not flats.
(Use the respective sharp!))
octave
номер октавы у нот, которые хотите проиграть
(the octave # of the note you wish to play)
duration
длительность(в секундах) ноты
(the duration (in seconds) of the note)
*/
=== Вы можете немедленно проиграть ноты, используя... (You can play notes instantly using...)
/*
Те же параметры как и в функции генерации файла Synth.generate,
только эта функция создает HTML-элемент аудио HTML Audio element, играет его и вызгружает его
после завершения. (Same arguments as Synth.generate,
only this creates an HTML Audio element, plays it, and unloads it upon completion.)
*/
Synth.play(sound, note, octave, duration);
Вы можете также создать специфичные инструменты(объекты, что ссылаются на функцию генерации файла .generate и на функцию немедленного проигрывания ноты), связанные со специфичными звуками). (You may also create individual instruments(objects that reference .generate and .play, bound to specific sounds).)
var piano = Synth.createInstrument('piano'); // профиль звука 'фортепьяно'
// немедленно проигрывает ноту C4 в течение 2 с, используя профиль звука 'фортепьяно'
piano.play('C', 4, 2); // plays C4 for 2s using the 'piano' sound profile
'''AudioSynth''' идет с четырьмя профилями звука по умолчанию.
(AudioSynth
comes with four default sound profiles.)
piano (id 0) // профиль звука 'фортепьяно'
organ (id 1) // профиль звука 'орган'
acoustic (id 2) // профиль звука 'аккустическая гитара'
edm (id 3) // профиль звука 'Brutal death metal'
// проигрывайте на своей акустической гитаре!
var acoustic = Synth.createInstrument('acoustic'); // play with your acoustic guitar!
Низкая производительность? Частота дискретизации по умолчанию для синтезатора AudioSynth составляет 44100 Гц (качество CD). Это может быть затратным бременем на вашем браузере.(Poor performance? The default sampling rate for AudioSynth is 44100Hz (CD quality). This can be taxing on your browser.)
Чтобы изменить частоту дискретизации, используйте функцию установки частоты дискретизации '''Synth.setSampleRate(n)'''
Обратите внимание на то, что более низкие частоты дискретизации приравняются к более плохому качеству звука, специально для более высоких нот.(To change the sampling rate, use Synth.setSampleRate(n)
Please note that lower sampling rates will equate to poorer sound quality, especially for higher notes.)
// Можно установить значения только между 4000 Гц и 44100 Гц.
// Can only set values between 4000Hz and 44100Hz.
// устанавливаем частоту дискретизации в 20000Hz
Synth.setSampleRate(20000); // sets sample rate to 20000Hz
// возвращает частоту дискретизации 20000
Synth.getSampleRate(); // returns 20000
Объем слишком? Измельченный объем выборки так же. Volume a bit much? Adust the volume of the sample similarly.
// устанавливаем громкость в 100%
Synth.setVolume(1.00); // set volume to 100%
// нет, ожидайте, 40%.
Synth.setVolume(0.40); // no, wait, 40%.
// еще лучше.
Synth.setVolume(0.1337); // even better.
// возвращает 0.1337
Synth.getVolume(); // returns 0.1337
Дополнительные профили звука могут быть загружены, используя функцию загрузки профиля звука '''Synth.loadSoundProfile ()'''(Additional sound profiles can be loaded using Synth.loadSoundProfile()
)
// Загрузите профиль звука из объекта...
// Load a sound profile from an object...
Synth.loadSoundProfile({
// name it
name: 'my_sound',
// WIP: возвратите отрезок времени в секундах, атака длится
// WIP: return the length of time, in seconds, the attack lasts
attack: function(sampleRate, frequency, volume) { ... },
// WIP: возвратите число, представляющее уровень затухания сигнала.
// WIP: return a number representing the rate of signal decay.
// larger = faster decay
dampen: function(sampleRate, frequency, volume) { ... },
// волновая функция: вычислите амплитуду своей синусоидальной волны на основе i (индекс)
// wave function: calculate the amplitude of your sine wave based on i (index)
wave: function(i, sampleRate, frequency, volume) {
/*
Здесь у нас есть доступ к...
this.modulate: массив загруженных частот
this.vars: любые временные переменные, которые вы хотите отслеживать
(Here we have access to...
this.modulate : an array of loaded frequency
this.vars : any temporary variables you wish to keep track of)
*/
}
});
Грубое руководство по генерации формы волны может быть найдено в https://keithwhor.com/music/(A rough guide to waveform generation can be found at https://keithwhor.com/music/)
Если вы зависаете на генерации нот(для профилей по умолчанию или нестандартных звуковых профилей), то используйте '''Synth.debug ()''', чтобы включить режим отладки. (If you're hanging on note generation (for default or custom sound profiles), use Synth.debug()
to enable debugging.
Это журналируем времена генерации нот в вашей консоли.(This will log note generation times in your console.)
Особая благодарность Альберту Паму(Albert Pham)https://www.sk89q.com/ за динамическую генерацию .WAV -файла, облегчение работы с помощью https://www.sk89q.com/playground/jswav/ и благодарность Хэсен эль Джуди(Hasen el Judy) https://dev.hasenj.org/post/4517734448 за информацию о синтезе Karplus-Strong String Synthesis. (Special thanks to Albert Pham (https://www.sk89q.com/) for Dynamic .WAV file generation, the work off of which this is based (https://www.sk89q.com/playground/jswav/) and Hasen el Judy (https://dev.hasenj.org/post/4517734448) for information regarding Karplus-Strong String Synthesis.)
.WAV Audio Files
https://en.wikipedia.org/wiki/.WAV_file
Sound Synthesis
https://www.acoustics.salford.ac.uk/acoustics_info/sound_synthesis/
"acoustic" sound profile generated using Karplus-Strong String Synthesis: https://en.wikipedia.org/wiki/Karplus%E2%80%93Strong_string_synthesis https://music.columbia.edu/cmc/musicandcomputers/chapter4/04_09.php
Не стесняйтесь посылать мне по электронной почте в keithwhor в com точки Gmail или следуйте за мной на Twitter, @keithwhor. Если Вам нравится, не стесняйтесь совместно использовать!:) Всегда ценивший. (Feel free to e-mail me at keithwhor at gmail dot com or follow me on Twitter, @keithwhor. If you like, feel free to share! :) Always appreciated.)