私はPhantomJSとHorsemanJSを使用して、リモートサーバからwavファイルをダウンロードしています。しかし、ファイルがbase64でエンコードされ、新しいファイルに書き込まれると、ファイルは使用できなくなる品質が失われます。オーディオはそこにありますが、その歪みは私にそのエンコーディングの問題と考えるように導きます。私はノードv5を使用してUbuntu 14.04を実行していますHorsemanとPhantomJSを使用してwavファイルをダウンロードするとデータの品質が低下する
以下は私のスクリプトで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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
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
として付属しています。
これ以上の情報が必要です。具体的には、ファイルをダウンロードして保存できますか?コーデックのように間違った時間シーケンスを引っ張るように聞こえるが、サンプルwavファイルが必要となる。 –
PhantomJSの代わりにCasperJSを使用してコードを減らしたファイルをダウンロードすることができ、base64で回避策を使用する必要はありません。 – st2erw2od
@ st2erw2od私はCasperJSを調べますが、私が最初に調査したときにはスタンドアロンだったので、ファイル(S3で保存)で事後に必要なことをすることができませんでした – thegogz