tag:linuxfr.org,2005:/tags/wren/publicLinuxFr.org : les contenus étiquetés avec « wren »2018-03-03T18:38:30+01:00/favicon.pngtag:linuxfr.org,2005:Diary/377672018-03-02T11:43:11+01:002018-03-02T11:43:11+01:00Portage de TapTempo en WrenLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p><a href="http://wren.io/">Wren</a> est un langage de script assez simple, basé sur des classes et destiné à être embarqué dans des applications (notamment des jeux vidéos). J'avais envie d'essayer ce langage depuis un moment, je me suis dit qu'il fallait participer à la hype du moment.</p>
<p>Donc, suite au portage de <a href="//linuxfr.org/users/mzf/journaux/un-tap-tempo-en-ligne-de-commande">TapTempo</a> en divers langage: <a href="//linuxfr.org/users/mzf/journaux/un-tap-tempo-en-ligne-de-commande#comment-1730589">Rust</a>, <a href="//linuxfr.org/users/blackknight/journaux/portage-de-taptempo-en-ada">Ada</a>, <a href="//linuxfr.org/users/wawet76/journaux/portage-de-taptempo-en-javascript">JavaScript</a>, <a href="//linuxfr.org/users/astaoth/journaux/portage-de-taptempo-en-perl">Perl</a>, <a href="//linuxfr.org/users/manatlan/journaux/portage-de-taptempo-en-python-2-7">Python 2.7</a>, <a href="//linuxfr.org/users/superna/journaux/portage-de-taptempo-en-bash">Bash</a>, <a href="//linuxfr.org/users/glaeken/journaux/portage-de-taptempo-en-perl6">Perl6</a> <a href="//linuxfr.org/users/guillaum/journaux/portage-de-taptempo-en-haskell">Haskell</a> et <a href="//linuxfr.org/users/wawet76/journaux/taptempo-sur-mobile-en-pwa">PWA</a>, voici la version en Wren.</p>
<pre><code>import "io" for Stdin, Stdout
class TapTempo {
construct new() {
_sampleSize = 5
_resetTime = 5.0
_precision = 0
_hitTimePoints = []
}
computeBpm(currentTime, lastTime, occurenceCount) {
if (occurenceCount == 0) {
occurenceCount = 1
}
var elapsedTime = currentTime - lastTime
System.print("elapsedTime: %(elapsedTime)")
var meanTime = elapsedTime / occurenceCount
var bpm = 60.0 / meanTime
return bpm
}
isResetTimeElapsed(currentTime, lastTime) {
var elapsedTime = currentTime - lastTime
return elapsedTime > _resetTime
}
run() {
System.print("Hit enter key for each beat (q to quit).")
var shouldContinue = true
while (shouldContinue) {
var i = "q"
while (i.count != 0) {
i = Stdin.readLine()
if (i == "q") {
shouldContinue = false
System.print("Bye Bye!")
break
}
}
if (shouldContinue) {
var currentTime = System.clock
System.print("currentTime %(currentTime) %(System.clock)")
if (_hitTimePoints.count > 0 && isResetTimeElapsed(currentTime, _hitTimePoints[_hitTimePoints.count - 1])) {
_hitTimePoints.clear()
}
_hitTimePoints.add(currentTime)
if (_hitTimePoints.count > 1) {
System.write("\r")
var bpm = computeBpm(_hitTimePoints[_hitTimePoints.count - 1], _hitTimePoints[0], _hitTimePoints.count - 1)
System.write("Tempo: %(bpm.round) bpm\t")
} else {
System.write("\r")
System.write("[Hit enter key one more time to start bpm computation...]")
}
Stdout.flush()
while (_hitTimePoints.count > _sampleSize) {
_hitTimePoints.removeAt(0)
}
}
}
}
}
var tapTempo = TapTempo.new()
tapTempo.run()
</code></pre>
<p>À noter que cette version peut donner des résultats bizarres. En effet, <code>System.clock</code> est basé sur <code>clock(3)</code> qui fournit le temps CPU, et pas le temps global. Donc quand on a un gros processus qui tourne et qui bouffe le CPU, on peut avoir des temps fourni par cet appel qui ne correspondent pas vraiment à ce qu'on recherche. Mais dans l'idée, le code est juste et essaie de se rapprocher le plus possible de l'original, la gestion des options en moins.</p><div><a href="https://linuxfr.org/users/rewind/journaux/portage-de-taptempo-en-wren.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/113838/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/rewind/journaux/portage-de-taptempo-en-wren#comments">ouvrir dans le navigateur</a>
</p>
rewindhttps://linuxfr.org/nodes/113838/comments.atom