2015-05-01 3 views
5

Я пытаюсь создать «генеративный балл», используя beep.js на основе некоторых данных карты, которые у меня есть. Я использую new Beep.Voice в качестве заполнителя для заметок, связанных с конкретными типами данных (всего 7 голосов). при отображении данных должен воспроизводиться голос. я делаю вещи довольно «перебор» до сих пор, и я хотел бы, чтобы быть чище:играть один звуковой сигнал (beep.js)

// in the data processing function 
voice = voices[datavoice] 
voice.play() 
setTimeout(function(){killVoice(voice)}, 20) 

// and the killvoice: 
function killVoice(voice) { 
    voice.pause() 
} 

я хотел бы просто «играть» голос, предполагая, что он будет иметь продолжительность, скажем, , 20 мс (в основном просто звуковой сигнал). я видел свойство голосов duration, но не мог заставить их работать.

код здесь (использует пехотинец/узел/CoffeeScript):

https://github.com/mgiraldo/inspectorviz/blob/master/app/scripts/main.coffee

вот как это выглядит так далеко:

https://vimeo.com/126519613

+0

Я видел свойство продолжительности голоса, но не мог заставить их работать. Можете ли вы показать, что вы имеете в виду? –

+0

это недокументированное в readme. Я нашел, что это беспорядок в консоли. возможно, это связано с продолжительностью оценки (см. «Составление» в [readme] (https://github.com/stewdio/beep.js/blob/master/README.md) – mga

ответ

2

Забудьте все, что я сказал;)

Вдохновленный ваш запрос-и Сэма старый тянуть запрос-I've только что закончил большой ADSR push, который включает поддержку для Voice продолжительности. Так что теперь с последним Beep.js получить быстрый «чиптюна-у» писк можно сделать так:

var voice = new Beep.Voice('4D♭') 
    .setOscillatorType('square') 
    .setAttackDuration(0) 
    .setDecayDuration(0) 
    .setSustainDuration(0.002) 
    .setReleaseDuration(0) 
    .play() 

Я даже включил в новый Beep.Voice.js файл для простого сравнения в ADSR ASCII-art diagram. Надеюсь, это поможет!

+0

, похоже, проблема с браузером? отлично работает в Chrome и Safari. не работает в Firefox (Mac OS 10.10.3) – mga

+0

re Firefox: он будет медленно «странным» через некоторое время ... трудно объяснить, но становится очевидным при изменении вкладок, масштабирования и т. д.: http://mgiraldo.github.io/inspectorviz / – mga

3

Причина Beep.Voice.duration недокументирован в READ ME, потому что он еще не закончен! ;) В исходном коде есть строка, которая буквально говорит “Right now these do nothing; just here as a stand-in for the future.” Это относится к .duration, .attack и т. Д. Существует запрос на перенос для реализации некоторой из этих функций here, но мне пришлось внести некоторые существенные структурные изменения с момента отправки этого запроса; вам нужно будет присмотреться ближе, как только я закончу исправление некоторых более крупных структурных проблем. (Это в порядке, я обещаю!)

Ваш подход тем временем кажется правильным на деньги. Я уменьшил его немного здесь и сделали это 200 миллисекунд, а не 20-так что я мог бы здесь это кольцо немного больше:

var voice = new Beep.Voice('4D♭') 
voice.play() 
setTimeout(function(){ voice.pause() }, 200) 

Я видел, как вы использовали некоторые довольно низкие ноты в примере кода, как Например, «1A». Если вы просто проверяете это на обычных динамиках для ноутбуков - это место, в котором я часто бываю - вы можете обнаружить, что тон слишком низкий для ваших динамиков; вы услышите тиканье или мертвую тишину. Так что не беспокойтесь: это не ошибка, просто аппаратная проблема :)

+0

спасибо. У меня такое низкое значение, потому что я хочу очень «чиптун-й» звук :) – mga

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