我正在使用HTML5网络音频API来分析歌曲,并在平均声音频率低于某个值时创建标记.使用现有的AudioNode基础设施,我设法做到这一点,但只分析声音,并且仅在播放歌曲时.
然而,我想要的是提前分析歌曲,这样我就可以提取静音标记,并将它们变成CUE按钮,用户可以使用这些按钮在整首歌曲中移动.
显然,首先依靠播放整首歌来进行分析是很慢的,特别是如果这首歌是50分钟的播客.我尝试将playbackRate加速到10倍,但这没有用.
我认为解决方案在于跳过Web音频API,并分析原始ArrayBuffer,但是,我真的不知道从哪里开始.
建议?想法?
我有两个Javascript ArrayBuffers; 每个包含512位数据.我想对两个数组进行xor比较,并将结果存储在第三个数组中.
目前,我正在遍历缓冲区中的元素.在下面的代码中,'distance'是一个整数,feat_a1并且feat_b1是长度为512位的ArrayBuffers.
for(var d1=0; d1<512; d1++){
distance += feat_b1[d1] ^ feat_a1[d1];
}
Run Code Online (Sandbox Code Playgroud)
是否有更有效的方法来对这两个数组进行成对比较?
它似乎很简单,但我无法找到如何将一个Array填充整数转换为一个ArrayBuffer并重新转换为一个整数Array.有很多的例子,其中字符串转换为ArrayBuffer例如像在这里.
使用这些例子我创建了这个:
/**
* Convert string to array buffer.
*
* @param {Array.<int>} array
* @returns {ArrayBuffer}
*/
self.arrayToArrayBuffer = function( array ) {
var length = array.length;
var buffer = new ArrayBuffer( length * 2 );
var view = new Uint16Array(buffer);
for ( var i = 0; i < length; i++) {
view[i] = array[i];
}
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
然后阵列也需要再次转换回来.为此,我使用:
var array = new Uint16Array(arrayBuffer);
Run Code Online (Sandbox Code Playgroud)
这个解决方案似乎有效,但有没有更简单的方法呢?
它也适用于如下数组:
var …Run Code Online (Sandbox Code Playgroud) 从FileReader读取字符串的TypeScript错误
读取文件内容的简单代码:
const reader: FileReader = new FileReader();
reader.readAsText(file);
reader.onload = (e) => {
const csv: string = reader.result; -> getting TS error on this line
}
Run Code Online (Sandbox Code Playgroud)
我得到TypeScript错误:
Type 'string | ArrayBuffer' is not assignable to type 'string'.
Type 'ArrayBuffer' is not assignable to type 'string'.
Run Code Online (Sandbox Code Playgroud) 有没有办法测试两个JavaScript ArrayBuffers是否相等?我想为消息编写方法编写测试.我找到的唯一方法是将ArrayBuffer转换为字符串然后进行比较.我错过了什么?
以下代码是假的,即使我认为它应该是真的:
(function() {
'use strict';
/* Fill buffer with data of Verse header and user_auth
* command */
var buf_pos = 0;
var name_len = 6
var message_len = 4 + 1 + 1 + 1 + name_len + 1;
var buf = new ArrayBuffer(message_len);
var view = new DataView(buf);
/* Verse header starts with version */
view.setUint8(buf_pos, 1 << 4); /* First 4 bits are reserved for version of protocol */
buf_pos += 2;
/* The lenght …Run Code Online (Sandbox Code Playgroud) 我有两个画布,我想传递canvas1的内容,将其序列化为ArrayBuffer,然后将其加载到canvas2中.将来我会将canvas1内容发送到服务器,处理它,并将其返回到canvas2,但是现在我只想序列化和反序列化它.
我找到了以字节为单位获取画布信息的方法:
var img1 = context.getImageData(0, 0, 400, 320);
var binary = new Uint8Array(img1.data.length);
for (var i = 0; i < img1.data.length; i++) {
binary[i] = img1.data[i];
}
Run Code Online (Sandbox Code Playgroud)
并且还发现了这种将信息设置为Image对象的方式:
var blob = new Blob( [binary], { type: "image/png" } );
var urlCreator = window.URL || window.webkitURL;
var imageUrl = urlCreator.createObjectURL( blob );
var img = new Image();
img.src = imageUrl;
Run Code Online (Sandbox Code Playgroud)
但不幸的是它似乎没有用.
这是正确的方法吗?
谢谢.
我正在开发一个函数,它将使用第三方API将数据写入块中的远程服务器.通过Stack Overflow的一些帮助,我能够实现这一目标,现在它正在按预期工作.问题是我只能得到一个16kb的块来写,因为我需要提前pos写入下一个字节的位置.
初始写入很容易从0开始.由于我对此不熟悉,我不确定下一个pos应该是16还是什么.如果有帮助,API调用writeFileChunk()需要3个参数,即filepath(str),pos(int64)和data(base64编码的字符串).
reader.onload = function(evt)
{
// Get SERVER_ID from URL
var server_id = getUrlParameter('id');
$("#upload_status").text('Uploading File...');
$("#upload_progress").progressbar('value', 0);
var chunkSize = 16<<10;
var buffer = evt.target.result;
var fileSize = buffer.byteLength;
var segments = Math.ceil(fileSize / chunkSize); // How many segments do we need to divide into for upload
var count = 0;
// start the file upload
(function upload()
{
var segSize = Math.min(chunkSize, fileSize - count * chunkSize);
if (segSize > …Run Code Online (Sandbox Code Playgroud) 在这里,我调用 GetFile ,以 ArrayBuffer{} 对象的形式获取响应,如果我执行 response.errors=undefined,则在网络选项卡中响应为 {"errors":["photoProof Image is not available in the system"]}。
$scope.getDocuments = function(){
Myservice.downLoadDocument('photo', $scope.user.mobileNo).
then(function(response){
})
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,网络选项卡中的值就会低于该值。
response.byteLength = 64
Run Code Online (Sandbox Code Playgroud)
如何将此 ArrayBuffer 转换为正确的 JSON 格式?
使用像 axios 这样的库,我可以从 http 请求中请求数据作为数组缓冲区:
async function get(url) {
const options = {
method: 'GET',
url: url,
responseType: "arraybuffer"
};
const { data } = await axios(options);
console.log(data)
return data;
}
Run Code Online (Sandbox Code Playgroud)
打印:
<Buffer 50 4b 03 04 14 00 00 00 08 00 3c ef bf bd ef bf bd 52 ef bf bd ef bf bd 3a ef bf bd 46 01 00 00 6f 03 00 00 14 00 00 00 45 43 5f 72 61 77 2f …Run Code Online (Sandbox Code Playgroud) arraybuffer ×10
javascript ×9
html5 ×2
ajax ×1
angularjs ×1
arrays ×1
audio ×1
buffer ×1
filereader ×1
html5-canvas ×1
jquery ×1
json ×1
mp3 ×1
node.js ×1
performance ×1
scala ×1
seq ×1
typed-arrays ×1
typescript ×1