2015-05-01 5 views
5

Ich versuche, einen "generativen Score" mit beep.js basierend auf einigen Kartendaten zu erstellen, die ich habe. Ich verwende new Beep.Voice als Platzhalter für Notizen mit bestimmten Arten von Daten (7 Stimmen insgesamt). Wenn Daten angezeigt werden, sollte eine Stimme abgespielt werden. Ich mache die Dinge ziemlich „Brute-Force“ so weit, und ich möchte es sauberer sein:einen einzelnen Piepton spielen (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() 
} 

Ich mag würde, nur die Stimme „spielen“, vorausgesetzt, es ist eine Dauer von müßte, sagen , 20ms (im Grunde nur Piep auf Daten). Ich sah die duration Eigenschaft von Stimmen, aber konnte sie nicht arbeiten lassen.

der Code ist hier (verwendet Grunzen/node/Coffeescript):

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

dies ist, wie es wie bisher aussieht:

https://vimeo.com/126519613

+0

Ich sah die Duration-Eigenschaft von Stimmen, konnte sie aber nicht arbeiten lassen. Kannst du zeigen, was du meinst? –

+0

es ist nicht dokumentiert in der Readme. Ich fand es in der Konsole herumalbern. vielleicht hängt es mit der Länge der Punkte zusammen (siehe Composing in [the readme] (https://github.com/stewdio/beep.js/blob/master/README.md)) – mga

Antwort

2

Vergessen Sie alles, was ich sagte,)

durch Ihre Anfrage-und inspiriert Sams alte Pull-Request-ich habe gerade einen großen ADSR abgeschlossen Push, der Unterstützung für Voice Dauern enthält. So, jetzt mit den neuesten Beep.js einem schnellen „Chiptune-y“ Chirp bekommen kann wie folgt geschehen:

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

Ich habe sogar ein ADSR ASCII-art diagram in die neuen Beep.Voice.js-Datei für die einfache Referenzierung enthält. Ich hoffe das hilft!

+0

scheint es ein Browserproblem zu geben? funktioniert gut in Chrome und Safari. nicht in Firefox (Mac OS 10.10.3) – mga

+0

wieder Firefox: es wird langsam "komisch" nach einer Weile gehen ... schwer zu erklären, aber wird deutlich, wenn Tabs, Zoomen und so ändern: http://mgiraldo.github.io/Inspektorviz / – mga

3

Der Grund Beep.Voice.duration ist nicht dokumentiert in Das READ ME ist, weil es noch nicht fertig ist! ;) Es gibt eine Zeile im Quellcode, die wörtlich sagt “Right now these do nothing; just here as a stand-in for the future.” Dies gilt für .duration, .attack, etc. Es gibt eine Pull-Anfrage, um einige dieser Funktionalität here zu implementieren, aber ich musste einige wichtige strukturelle Änderungen vornehmen, seit diese Anfrage eingereicht wurde; Ich werde es mir genauer ansehen müssen, sobald ich mit der Behebung einiger größerer struktureller Probleme fertig bin. (Es ist in der Pipeline, ich verspreche!)

Ihr Ansatz in der Zwischenzeit scheint direkt auf das Geld. Ich habe es ein bisschen hier reduziert und machte es 200 Millisekunden-statt 20, so konnte ich es hier ein bisschen mehr klingeln:

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

Ich sah Sie einige ziemlich tiefe Töne in Ihrem Beispielcode verwendet haben, wie "1A ♭" zum Beispiel. Wenn Sie das nur an normalen Laptoplautsprechern testen - eine Position, in der ich oft selbst bin -, könnte der Ton für Ihre Lautsprecher zu niedrig sein. Sie werden entweder ein Tick oder Totenstille hören. Also keine Sorge: es ist kein Fehler, nur ein Hardware-Problem :)

+0

danke. Ich habe diesen niedrigen Wert, weil ich einen sehr "Chiptune-y" Sound will :) – mga

Verwandte Themen