由于目前没有通用的方法从JavaScript中读取音频轨道中的实时数据,因此我使用较小的library/API来读取我从MP3离线转换的文本文件中的音量数据。
字符串看起来像这样
!!!!!!!!!!!!!!!!!!!!!!!!!!###"~{~||ysvgfiw`gXg}i}|mbnTaac[Wb~v|xqsfSeYiV`R ][\Z^RdZ\XX`Ihb\O`3Z1W*I'D'H&J&J'O&M&O%O&I&M&S&R&R%U&W&T&V&m%\%n%[%Y%I&O'P'G 'L(V'X&I'F(O&a&h'[&W'P&C'](I&R&Y'\)\'Y'G(O'X'b'f&N&S&U'N&P&J'N)O'R)K'T(f|`|d //etc...
并且这个想法基本上是在歌曲中的给定点处,文本文件中对应点处的字符的Unicode编号产生表示音量的标称值。
库使用以下内容(此处简化)转换数据(在本例中为立体声轨道):
getVolume = function(sampleIndex,o) { o.left = Math.min(1,(this.data.charCodeAt(sampleIndex*2|0)-33)/93); o.right = Math.min(1,(this.data.charCodeAt(sampleIndex*2+1|0)-33)/93); }
我想先了解文件的编码方式,以及我如何在这里使用它。
93
和33
的重要性是什么?
按位|
的目的是什么?
这是移植信息的常用方法(即,它是否有名称),还是有更好的方法来实现?
答案 0 :(得分:2)
该文件中的字符范围看起来是!
到~
。 !
的ASCII码为33,~
的ASCII码为126. 126-33 = 93。
答案 1 :(得分:1)
33
和93
用于规范化!
和~
之间的值。
var data = '!';
Math.min(1,(data.charCodeAt(0*2)-33)/93); // will yield 0
var data = '~';
Math.min(1,(data.charCodeAt(0*2)-33)/93); // will yield 1
var data = '"';
Math.min(1,(data.charCodeAt(0*2)-33)/93); // will yield 0.010752688172043012
var data = '#';
Math.min(1,(data.charCodeAt(0*2)-33)/93); // will yield 0.021505376344086023
// ... and so on
由于|0
或sampleIndex*2
在传递非整数sampleIndex*2+1
时会产生非整数值,因此存在sampleIndex
。 |0
会截断小数部分,以防有人发送格式不正确的sampleIndex
(即非整数)。
答案 2 :(得分:0)
使用0进行按位OR会将LHS上的数字截断为整数。不过对你问题的其余部分不确定,抱歉。
93和33是字符“]”和“!”的ASCII码(不是unicode)分别。希望有所帮助。
答案 3 :(得分:0)