我想将我的REST API中请求的图像解析为base64字符串.

首先......我想,这很容易,只是window.btoa()为了这个目的使用功能.
当我尝试在我的应用程序的这一部分中执行此操作时:
.done( function( response, position ) {
var texture = new Image();
texture.src = "data:image/png;base64," + window.btoa( response );
Run Code Online (Sandbox Code Playgroud)
我有下一个错误:Uncaught InvalidCharacterError:无法在'Window'上执行'btoa':要编码的字符串包含Latin1范围之外的字符.
正如我在这里读到的:javascript atob返回'String包含无效字符'
出现问题是因为newlines in the response这就是window.btoa()失败的原因.任何二进制图像格式当然都会有换行符...但是从上面的链接建议是删除/替换这些字符 - 这对我来说是一个不好的建议,因为如果从二进制图像中删除/替换一些字符它就会是损坏.
当然,可能的替代方案与API设计有关: - 添加一些函数,返回base64表示 - 添加一些函数,返回url到图像
如果我不修复它,我将从服务器返回base64表示,但我不喜欢这样的方式.
是否存在一些方法来解决我从处理二进制图像的问题,因为它在屏幕截图中显示,不是吗?
我正在尝试将我用Java编写的一些(非常简单的)android代码重写为静态HTML5应用程序(我不需要服务器做任何事情,我想保持这种方式).我在Web开发方面有广泛的背景,但对Java有基本的了解,甚至在Android开发方面知识较少.
应用程序的唯一功能是获取一些数字并将它们转换为字节的音频啁啾.将数学逻辑转换为JS绝对没有问题.我遇到麻烦的地方是实际产生声音的时候.这是原始代码的相关部分:
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
// later in the code:
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STATIC);
// some math, and then:
track.write(sound, 0, sound.length); // sound is an array of bytes
Run Code Online (Sandbox Code Playgroud)
我怎么在JS中这样做?我可以使用dataURI从字节中产生声音,但这是否允许我在这里控制其他信息(即采样率等)?换句话说:在JS中执行此操作的最简单,最准确的方法是什么?
更新
我一直试图复制我在这个答案中找到的东西.这是我的代码的相关部分:
window.onload = init;
var context; // Audio context
var buf; // Audio buffer
function init() {
if (!window.AudioContext) {
if (!window.webkitAudioContext) {
alert("Your browser does not support any AudioContext and cannot play back …Run Code Online (Sandbox Code Playgroud)