由于目前没有通用的方法可以从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);
    }



我想先了解一下文件的编码方式以及在这里如何使用它。

9333的意义是什么?

按位|的目的是什么?

这是移植信息的常用方法(即,它是否有名称),或者有更好的方法来移植它?

最佳答案

3393用于归一化!~之间的值。



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*2sampleIndex*2+1在传递非整数sampleIndex时将产生非整数值。 |0会截断小数部分,以防万一有人发送了格式错误的sampleIndex(即非整数)。

10-06 10:24