关于html插入音频,base64编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于html插入音频,base64编码相关的知识,希望对你有一定的参考价值。
这张图片的代码是对的,然后我又创建一个js文件想改变代码,不清楚冒号后面的代码应该如何改
求大神指教,这张的代码是错的
人家把ogg当作video对待了,你试试?
你这个代码没给出完整源文件谁也不好说他是怎么解析的。
你在这里加embed就是作死,语法完全性错误。这是个文件内容属性而不是个标签
试着直接加
'url(sound/sax9.ogg)' /** 以链接方式处理源文件 **/或者直接加
'sound/sax9.ogg' /** 当作链接处理 **/以上两种方式传入的文件有所不同,上面的是传入文件的内容,而下面的传入的是文件地址。两个都试试,上面的成功几率应该比较大。如果不行去掉单引号试试
3: var base64DecodeChars = new Array(
4: -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5: -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6: -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
7: 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
8: -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
9: 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
10: -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
11: 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
12: //编码的方法
13: function base64encode(str)
14: var out, i, len;
15: var c1, c2, c3;
16: len = str.length;
17: i = 0;
18: out = "";
19: while(i < len)
20: c1 = str.charCodeAt(i++) & 0xff;
21: if(i == len)
22:
23: out += base64EncodeChars.charAt(c1 >> 2);
24: out += base64EncodeChars.charAt((c1 & 0x3) << 4);
25: out += "==";
26: break;
27:
28: c2 = str.charCodeAt(i++);
29: if(i == len)
30:
31: out += base64EncodeChars.charAt(c1 >> 2);
32: out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
33: out += base64EncodeChars.charAt((c2 & 0xF) << 2);
34: out += "=";
35: break;
36:
37: c3 = str.charCodeAt(i++);
38: out += base64EncodeChars.charAt(c1 >> 2);
39: out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
40: out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
41: out += base64EncodeChars.charAt(c3 & 0x3F);
42:
43: return out;
44:
45: //解码的方法
46: function base64decode(str)
47: var c1, c2, c3, c4;
48: var i, len, out;
49: len = str.length;
50: i = 0;
51: out = "";
52: while(i < len)
53:
54: do
55: c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
56: while(i < len && c1 == -1);
57: if(c1 == -1)
58: break;
59:
60: do
61: c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
62: while(i < len && c2 == -1);
63: if(c2 == -1)
64: break;
65: out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
66:
67: do
68: c3 = str.charCodeAt(i++) & 0xff;
69: if(c3 == 61)
70: return out;
71: c3 = base64DecodeChars[c3];
72: while(i < len && c3 == -1);
73: if(c3 == -1)
74: break;
75: out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
76:
77: do
78: c4 = str.charCodeAt(i++) & 0xff;
79: if(c4 == 61)
80: return out;
81: c4 = base64DecodeChars[c4];
82: while(i < len && c4 == -1);
83: if(c4 == -1)
84: break;
85: out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
86:
87: return out;
88:
89: function utf16to8(str)
90: var out, i, len, c;
91: out = "";
92: len = str.length;
93: for(i = 0; i < len; i++)
94: c = str.charCodeAt(i);
95: if ((c >= 0x0001) && (c <= 0x007F))
96: out += str.charAt(i);
97: else if (c > 0x07FF)
98: out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
99: out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
100: out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
101: else
102: out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
103: out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
104:
105:
106: return out;
107:
108: function utf8to16(str)
109: var out, i, len, c;
110: var char2, char3;
111: out = "";
112: len = str.length;
113: i = 0;
114: while(i < len)
115: c = str.charCodeAt(i++);
116: switch(c >> 4)
117:
118: case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
119: // 0xxxxxxx
120: out += str.charAt(i-1);
121: break;
122: case 12: case 13:
123: // 110x xxxx 10xx xxxx
124: char2 = str.charCodeAt(i++);
125: out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
126: break;
127: case 14:
128: // 1110 xxxx 10xx xxxx 10xx xxxx
129: char2 = str.charCodeAt(i++);
130: char3 = str.charCodeAt(i++);
131: out += String.fromCharCode(((c & 0x0F) << 12) |
132: ((char2 & 0x3F) << 6) |
133: ((char3 & 0x3F) << 0));
134: break;
135:
136:
137: return out;
138:
调用:
1: //编码
2: value = base64encode(utf16to8(src))
3:
4: //解码
5: value = utf8to16(base64decode(src))
Google Speech API - 识别 base64 编码的音频
【中文标题】Google Speech API - 识别 base64 编码的音频【英文标题】:Google Speech API - recognizing base64 encoded audio 【发布时间】:2017-02-26 12:30:54 【问题描述】:我一直在为 Google Speech API 苦苦挣扎,希望得到一些建议。
这是我想要做的:
-
在浏览器中录制音频
将录音转换为base64并发送到我的服务器
在服务器上,调用 Google Speech API 的 syncRecognize 函数,传入我的 base 64 编码音频
我总是收到一个空的结果对象。
当我关注getting started tutorial 时,虽然一切正常。
我做错了什么?
非常感谢任何提示/想法。
const Speech = require('@google-cloud/speech');
const SpeechV1beta1 = require('@google-cloud/speech/src/v1beta1')
module.exports =
syncRecognize: function(base64Encoding)
const speech = Speech();
const speechV1beta1 = SpeechV1beta1();
const client = speechV1beta1.speechClient();
const body =
"config":
"encoding":"LINEAR16",
"sampleRate":16000,
"languageCode":"en-US"
,
"audio":
"content": base64Encoding
return client.syncRecognize(body)
.then((results) =>
console.log('results', results)
return transcription: results[0];
).catch(function(error)
return error: error;
);;
【问题讨论】:
我以前从未尝试在浏览器中执行此操作,所以我不确定。有什么方法可以将音频内容数据保存到文件中,以确保它是可播放的(并且它是 LINEAR16 16kHz)?如果给它一个URI,相同的代码是否有效?如果是这样,问题似乎出在音频“内容”上。 【参考方案1】:可能您从浏览器记录的内容没有那些配置参数。
我遇到的另一个问题是,对于超过 5 秒的音频持续时间,超时启动,到目前为止,我无法有效地更改 API 截止日期。这也可能是您的情况。
为了在我的 web 应用程序中验证音频的元数据,我使用 ffmpeg:我自动将文件保存到存储中并在脚本中运行 ffmpeg -i filename
以检索采样率、编码、通道数和持续时间。
请注意,有 audio lenght limits 用于同步语音识别请求。如果超过了,我建议您使用异步方法(或将音频文件拆分为子文件)。在前一种情况下,您可能需要转换音频编码(幸运的是 ffmpeg 也可以为您做到这一点:))。在后一种情况下,您可以使用SoX 将音频拆分为静音并分别处理。
【讨论】:
以上是关于关于html插入音频,base64编码的主要内容,如果未能解决你的问题,请参考以下文章