播放一声哔哔声 (beep.js)

play a single beep (beep.js)

我正在尝试根据我拥有的一些地图数据使用 beep.js 创建一个 "generative score"。我使用 new Beep.Voice 作为与特定类型数据相关的注释的占位符(总共 7 个声音)。显示数据时,应播放语音。到目前为止,我做得很好 "brute force",我希望它更干净:

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

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

我只想 "play" 语音,假设它的持续时间为 20 毫秒(基本上只是数据蜂鸣声)。我看到了 duration 属性 的声音,但无法让它们发挥作用。

代码在这里(使用grunt/node/coffeescript):

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

这是目前的样子:

https://vimeo.com/126519613

Beep.Voice.duration 未在 READ ME 中记录的原因是它尚未完成! ;) 源代码中有一行字面意思是 “Right now these do nothing; just here as a stand-in for the future.” This applies to .duration, .attack, etc. There’s a pull request to implement some of this functionality here 但自提交该请求以来,我不得不进行一些重大的结构更改;一旦我解决了一些更大的结构性问题,就需要尽快仔细看看。 (它正在筹备中,我保证!)

目前,您的方法似乎很划算。我在这里稍微减少了一点,将它设为 200 毫秒——而不是 20 毫秒——这样我就可以让它响得更响一点:

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

我看到您在示例代码中使用了一些非常低音的音符,例如“1A♭”。如果您只是在普通的笔记本电脑扬声器上进行测试(我自己经常处于这种情况),您可能会发现扬声器的音调太低;您会听到滴答声或死寂。所以不用担心:这不是错误,只是硬件问题:)

忘记我说的一切 ;)

受您的询问和 Sam 的旧拉取请求的启发,我刚刚完成了一个大的 ADSR 推送,其中包括对 Voice 持续时间的支持。因此,现在使用最新的 Beep.js 可以像这样快速获得“chiptune-y” chirp:

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 以便于参考。我希望这有帮助!