gpt4 book ai didi

javascript - 使用 Horseman 和 PhantomJS 下载 wav 文件会丢失数据质量

转载 作者:IT老高 更新时间:2023-10-28 23:17:35 26 4
gpt4 key购买 nike

我正在使用 PhantomJSHorsemanJS 从远程服务器下载 wav 文件。但是,当文件被 base64 编码并写入新文件时,它会失去质量,使其无法使用。音频在那里,但它失真了,这让我认为这是一个编码问题。我正在使用 Node v5 在 Ubuntu 14.04 上运行

下面是我的脚本,有什么想法可以改进 base64 编码吗?

var Horseman = require('node-horseman');
var horseman = new Horseman({cookiesFile:'./cookiejar'});
var fs = require('fs');

horseman.on("urlChanged", function(url){
console.log(url);
});

horseman.on('consoleMessage', function( msg ){
console.log(msg);
});

horseman
.userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36")
.open('https://remoteserver.com/audo.aspx?guid=01439900-5361-4828-ad0e-945b56e9fe51')
.waitForNextPage()
.type('input[name="password"]', process.env.PASS)
.type('input[name="username"]', process.env.UN)
.click("button:contains('Login')")
.waitForNextPage()
.evaluate(function(){
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

function base64encode(str) {
var out, i, len;
var c1, c2, c3;

len = str.length;
i = 0;
out = "";
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}

var url = $("a:contains('Uncompressed file')").attr("href");

console.log(url);

var out;
$.ajax({
'async' : false,
'url' : url,
'success' : function(data, status, xhr) {
console.log(status);
console.log(xhr.getResponseHeader('Content-Type'));
out = base64encode(data);
}
});
return out;
})
.then(function(out){
fs.writeFile('./mydownloadedfile.txt', out, 'base64', function(){
return horseman.close();
});
});

内容类型返回为 audio/wav

如果文件是手动下载并通过同一个播放器播放的,它可以正常播放,只有当它经过这个过程时。

最佳答案

为什么不检查环境并在 NodeJS 中使用 Buffer 或在浏览器中使用 btoa()/atob() 进行 base64 编码和解码:

function base64Encode(plainData) {
if(isNode) {
return new Buffer(plainData).toString('base64');
}else {
return window.btoa(plainData);
}
}

function base64Decode(encodedData) {
if(isNode) {
return new Buffer(encodedData, 'base64').toString();
}else {
return window.atob(encodedData);
}
}

在您的脚本中:

var out;
$.ajax({
'async' : false,
'url' : url,
'success' : function(data, status, xhr) {
console.log(status);
console.log(xhr.getResponseHeader('Content-Type'));
out = base64Encode(data);
}
});
return out;
})...

关于javascript - 使用 Horseman 和 PhantomJS 下载 wav 文件会丢失数据质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36175256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com