参考文档:

1.https://github.com/yxl/opencore-amr-js   (将amr文件转为wav格式的编解码项目)

因为项目需要,要将amr的base46格式的音频文件在IOS,android微信内置浏览器播放。项目中使用的第三方IM为融云,经过调研发现,使用融云js播放语音的方式,可以在IOS上播放,但是在Android上无法播放,而且h5的audio组件,不支持amr格式的音频文件。

最后得出的结论,IOS上的audio支持amr格式播放,android上audio组件不支持amr格式播放,包括使用融云js播放语音的方式,使用的也是audio组件。

想到的方案是,将amr的base64文件进行格式转换,转换为mp3,wav等audio支持的格式,然后进行播放,没有找到很好的资源。

经过领导的一句话,尝试性的找融云客服咨询了一下,看看有没有相关的项目,客服给了opencore-amr-js项目,是将amr格式的文件转换为wav格式的音频文件,进行播放。

将项目发布到测试环境,在微信内置浏览器跑了一下,得到的答案是,android可以正常播放,但是IOS无法播放;其中有一个对象,在IOS环境中,好像是找不到,运行就报错。

于是,综合了一下,得到了最终的解决方案,

IOS使用融云js进行语音播放,Android使用opencore-amr-js进行语音播放;播放语音时,判断机器为Android还是IOS,来选择播放方式。

在将opencore-amr-js项目往自己项目迁移的过程中,发现,融云js中使用的Libamr-2.2.5.min.js 文件,就是opencore-amr-js项目中的amrnb.js文件,也就是说,融云js也是在  opencore-amr-js项目的基础上开发的,而且改动也非常小,Android中需要使用的方法,都没有发生变动,感觉还是挺开心的,因为amrnb.js文件有474kb,太大了,如果在加上融云js的Libamr-2.2.5.min.js 文件,整个聊天室,得有1兆多了,加载时间太长了。

下面,将Android播放语音的代码放在下面:

demo下载地址,demo在项目的js目录下面。

  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4. <title>AMR decode/encode tests</title>

  5. <script src="amrnb.js" defer></script>

  6. </head>

  7. <body>

  8. <h2>Test decoder</h2>

  9. <p id="test">

  10. Convert <a href="yuan.amr">yuan.amr</a> to wav file and compare with <a href="yuan.wav">yuan.wav</a>:

  11. <button>Test</button>

  12. </p>

  13. <h2>Decode amr file and play</h2>

  14. <p id="sample-amr">

  15. <button>Play</button>

  16. <a href="yuan.amr">yuan.amr</a>

  17. </p>

  18. <p>

  19. Select a local file and play: <input type="file" id="amr-file" accept=".amr">

  20. </p>

  21. <h2>Encode audio to amr file and play</h2>

  22. <p id="sample-audio">

  23. <button>Encode & Play</button>

  24. <a href="hello.ogg">hello.ogg</a>

  25. </p>

  26. <p>

  27. Select a local file to encode and play: <input type="file" id="audio-file" accept="audio/*">

  28. </p>

  29. <h2>base64测试</h2>

  30. <input id="base64-input" type="text" style="width:800px;height: 200px;">

  31. <p id="base64-audio">

  32. <button>base64 & Play</button>

  33. </p>

  34. <p id="base64-audio2">

  35. <button>base64 & Play</button>

  36. </p>

  37. <p id="base64-audio3">

  38. <button>base64 & Play</button>

  39. </p>

  40. <p id="base64-audio4">

  41. <button>base64 & Play</button>

  42. </p>

  43. <p id="base64-audio5">

  44. <button>base64 & Play</button>

  45. </p>

  46. <h2>Amr to wav</h2>

  47. <p id="amr-to-wav">

  48. <button>Convert to wav and play</button>

  49. <a href="yuan.amr">yuan.amr</a>

  50. </p>

  51. <p>

  52. Select a local file, convert and play: <input type="file" id="amr-to-wav-file" accept=".amr">

  53. </p>

  54. <p>wav file content:</p>

  55. <pre></pre>

  56. <script>

  57. // var u = navigator.userAgent;

  58. // var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端

  59. // var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

  60. // alert('是否是Android:'+isAndroid);

  61. // alert('是否是iOS:'+isiOS);

  62. function E(selector) {

  63. return document.querySelector(selector);

  64. }

  65. E('#test > button').onclick = function () {

  66. fetchAndReadBlob('yuan.amr', function (amr) {

  67. fetchAndReadBlob('yuan.wav', function (expected) {

  68. var actual = AMR.toWAV(amr);

  69. if (actual == null) {

  70. alert('Failed to decode amr file.');

  71. return;

  72. }

  73. if (actual.length != expected.length) {

  74. alert('The converted wav file has different size.');

  75. return;

  76. }

  77. for (var i = 0; i < actual.length; i++) {

  78. if (actual[i] != expected[i]) {

  79. alert('The converted wav file has different content.');

  80. return;

  81. }

  82. }

  83. alert('Succeeded!');

  84. });

  85. });

  86. };

  87. E('#sample-amr > button').onclick = function () {

  88. fetchBlob(E('#sample-amr > a').href, function (blob) {

  89. playAmrBlob(blob);

  90. });

  91. };

  92. E('#amr-file').onchange = function () {

  93. playAmrBlob(this.files[0]);

  94. };

  95. E('#amr-to-wav > button').onclick = function () {

  96. fetchBlob(E('#amr-to-wav > a').href, function (blob) {

  97. convertAmrBlobToWav(blob);

  98. });

  99. };

  100. E('#amr-to-wav-file').onchange = function () {

  101. convertAmrBlobToWav(this.files[0]);

  102. };

  103. E('#sample-audio > button').onclick = function () {

  104. fetchBlob(E('#sample-audio > a').href, function (blob) {

  105. convertAudioBlobToAmr(blob);

  106. });

  107. };

  108. E('#base64-audio > button').onclick = function () {

  109. playAmrToWav('IyFBTVIKLEWGYIDYAbvFOH2GfsiOIegRLMIqLEkrjgtAHkTQivDmfVM1jaNZEngILE2GwAPEmHx5NDk7pUNLUfWYUsHoLEgkjgtMXPPQwhrzXi7BBeVsCTl8LCwkwAeF+DQZtU6aHy/oi85xm48+LEQZTg8IfgSxFs8MTWkmTJnCiVeQLAmWQA8DcwJqRyWK6D1JXNiGT1/kLCCtjhwg/i4HQxYBTh/FyL0c4PKGLEOUnB8ECWzBtivj/o0uCKBOSVwaLERviBwjOO1SQyDHHShqp6v5ntQ6LIK0jpaN20m16Ebxbex+FST/0L6cLESbnFiime8ELtBDikj7R/v6kpIGLJAYHB7i/IW3MtgZjH8HkdlbX+rQLENADj2QDXL1/KDsHpJRFQkItcEKLJA/slqjGeHpl6LdmIvkg+s3mzP6LGgYHB9gmUS7M7dqXkMDBu1gS3xCLE8Rhw5pGcJiYMXkGiFCKV12SAZSLEwYsh+gnLQ+jtRY/HnRKOJ9ze1kLGiksh/A3DJFpp97NdhcYOKEjY5wLEzDnJdhDXHBDiasPfK6kXn+4t5mLE7bjh9gmT5rYfVsrppPiaj1HjgMLE1TnB9APIbLx4jNHneWgW2iXYYqLE5vjhfiHD5ogLu4T3Qa1UbBahXaLEBHsh6D2gTTLIciRh0Tpc+iVlQILEXtmh8COJcs4kOVfNmoU5JsVakWLEPtnBygeMf3F/mGHbA4xUxe72hsLCGWTh9CmefiloFgDeKuKaG3U4vkLEQknB4Jmfbed4B0/leEBU/3kXvOLEJyKBaNmWa/9pZULJ81ybNlqQb6LEgkjh8gaDKMxnuUHlamQX/UemkgLGWM6DzrvLaw9ebQvsl/gdtq1JVWLCVtgjxUVJO9VBapXB2CoWXvVa/8LDnZJSyf4Znt7JhPhFcGNQkWclhWLEf8SrVegZylvp9g/P9iEfJEy2sMLFPiJlu/oZtTz7VSzkGsmayKKCI2LGj1tUq/AeNOQtTJFTOCiXV0GGHWLGnvsJd+IeH39jqHTLSmjH1C2snKLHHv4HmegeNZxtdQlaUmIOCZyX4wLHChQh//QeH78fuffDEfFMIdocpYLHL3sNMeAfyyNI/qrA/44/JuLMHoLGL3ZD3eAftY11c1zoJeCdUn+ZpCLDg3sQ7JYftF3HPDP3auAcW0WiZkLCJ+sQ6pQf4RnasrvNEKJ5s40NxcLCAIZB6A5gGVfxsG9sOqAfc7gMw4LFMysFs/4fn0bfPqpmi6mbIWK2omLGHFsDzfoeH57frW/nVSBeW7sw1SLHC2sB/+gf4KBCfzZDSiQ+FiwAWeLHChZFu8Yf4CAv0J7YaLhfD1Kc5wLGj1Yh/+Af4JgOOVnw24C9XHhTbgLHA3ZlucI1YTA1YhRKbfZWmjQG4GLEXi+h77RgYYGNtb7iRzAdw7Mf0CLET1Zh9YZgYKQ6qozI+HQeM5POxSLCC34B4JZgH//Xxs/OO+CMCjccKmLCAIQh5VpgYXGIywl1bGIXTHhEu2LBC3nB4Q5gYGnzAZXdrSgeYC41nQLBI3Th8VpgSt7jMBfSbnAe6zPABOLGM7bFr2ydSww/fk+ePQwf/X+VYaLCSiGpZvwbHzoToBnwgKgddS66KSLFE63D1f4eYZgmApz3eOkW/afFkWLFE6bB/+weYPiAEhftcYIeX2lmloLGPirnmf4eYVisIZlyMPAem2lJS0LHBy4B//IeNfx/SG1hbHGMy0DU3CLHBHjlu/of4SFgJQVFVnEXEMEpbmLE/vQw7/Qf4GEDIElOy+AazKCmUSLHD3Qw7+Af4MEBP6j0a6Be1yedHWLHHv6h/+Af4WACEjvKfQceEY8sEULHHv+lu6QftCQZDpVJR7IOd2sYNiLFKhZB//gf4ACvIuNAHXELqcgNS+LCznwB94Yf4Lmhp8Pkv2BONMt81ALAg3QBpg4f5PP/cInjSSJOiLlENqLEgQsh4AJKN/JSH6Hh4fBfrq6VNiLDgINy1e9N87K86T5Mu7wW+R/nk8LGI3jh//Ae4LTm/T3FOAIcIHxtpQLHF4Nh/+Qf4ag1ujnf9hBfkSJZkmLHA3sDzeg1YdBQVhDh6axe/mTwV6LHA3+h/+RgYCgTiVGsvQ85+CFtZ8LGj1+h/+Rh4UAJIz+GmGA5QbaGCKLEz1Zh+vBh4Ww+AXHGnGkGXA8FQSLEeNZB9F5mYaEsVjng1CmNsYOQ0GLCPiph9YZmS6t2o6Th444dYr84ZcLCFYjh8C5mZMnzUftDD8sb4L0wk6LBPFnB6DRmz1Dph11WBSjOEpk8ueLBNYQB4Bzu6e35l5TZ9qpclry2LaLCFBnB5Bnr4IDlr4Pb4qEf4/qJsSLGhyBB7HPT5pb39wvZUQUc5NLbxqLC1/yw+xjFPJX0E//vN2E2kVmTS6LCM6mNIDsbN3OgRHU/BzBMX6OmvALGHibB/+Qfn6abmkhnbOhfovgqOQLGPi4Q7/IftOTzLn3uf0sawJS0OQLHBHdD3fYftcQZSEb6wKKKjC2jiiLHBHZD3eof4Ql0lIXoc1C75mc1oULHHv6h/+Af4fkYLdGY2JRMRNCIBULHHvZB/vJgHmcp873cJDAW2tJIuALHHv6jzehgYQES00HihqIWWzwgYWLGLn+j0SxgYMAY3VBX1+g8imEVLALGL1+h6vBgS0Iem3VWWfAeFaF+EQLC3F+h4ZZgNe2VBMP27GA/e8v06aLBA3nBegxgNJHiY9bgG/EbphGXByLGl/jh4pvxyn4Riq08nWCOZzk3toLDjuNlsqIb5UeraZ0UNCI6EYSwyCLHF4aB/eBgSiLO287OZxEW1ZBp0WLHI3Nh+/JgHk817e1asBB6EboLEsLHI39h//JgYJlqVeukAyafhOBVJ8LHMr+w7+Bh4KGGPatxPTEdQqWAGCLHCh+h7eJh4WyciYS75Po7shUB28LHBHZh++BmYYEi7lHLxEgv346t5sLGJHIh+aRmYOgd8FyxBjAvIwiPU4LFKvph6Upn4WBia/vxxyEe9CnK8yLESvZB5BRn4jEjbY/d5MMuNlqKXoLC3i6h4IZ4m20DWvHFrYVq8Bi28aLEQPZBaB3mH2J4zknPGENONyjJT+LCGZnB4QLliTV/i7nTF8sbKy1A8MLEwRTg8ADjcZJqtE9rS1IfoGqHBwLHeQ2DxO+cau6HDn+WlSKOGm+FJsLC3mHGGGIeYyjHL5fHiuQ9Ct/WtMLGHiGw5v+fym2X4n7DQdFRpXBNo+LHFhhQ7/w1YTTkUfG5nPA8Y8Qt02LHJyjh//hgNMVnZ7aLk+wfmcYjUQLHJHZD3fBgYEGsz5eQbaMa0Qw4ciLHPvwB/+BgYKk0i6PgzpBW8IKaVOLHPvZB/+BgNP27ekLnXQsfsaN8VKLHK2Zh7+Bhy0KiZV+pDRLX3yYKAcLHPvph++Bh4EFrS93Kp4mGEG+ydwLGPvwB92hhnz8h/NtJBWA2pXHNx+LFPFsB96RhygpX5cVEgmIvdHm0H+LCA3QBaADuS93z6d9AShBXJKwNuSLFAIjh7Cf8yoh6ci9Rt6i2VJ+VGyLGI3aYZ6w0yh9hH7K60GR54cboTmLHDu9lseZgyjZ2oalFceEa5GCX0QLHI3jh//xh4AFsITHdS+A+4/6IsSLHBL9h/eBhtXxj2CmHbaAeqtpE7MLHHvNh/Y5mSysyhNdhzaY6s+pvJALEy2Yh/XhmYCiVCLlzajAfEUWMguLEj3+h7jxmylCaVx37i3CWhpKWGILHErYh+hLwpIAHKG/QvnEdrODw6sLE5vsB8BHX9NB25jtw6yoWe/UuZMLEybQh6IrFm8zIPTe21TSd/RFaRoLEJvJhwgmctbkYBzLxzCI6iy0zL8LJBvjh4A+iT5BpUAXCPIgfPM/IoSLEkXrBwpm0brz3YZ5x2WjOtfJk1ILExHsh4JWJcFQhJ3G41WLeLxbOKELE8qvA8BFAh7Ayu/n3/QC3K6RziALGKjUBaQuYJNIf5SNlefkelZXdHKLEy0vBtJmTNtYwes7vyXUdPSa1IILClTUBwgSGp6STlsv9t2gH+kDWbALB4PvB0gABKm+hImnwV8APqdZESqLB4IvBwiYBAhMgCdOI3iAuM0M/bcLCnCvB4QkfzIOj5Yftvqne8ThXnaLBsyTh4AUxcAN1m1NHPfErnshny2LDCBjgtRngH0Uyp4vUqxCedYHn90LCgMtBhiCgXGoodefNWyYaHqE1/GLFHvwBxs1jRSisWI+Vp6yeSdnGcuLGLBNB6SAOpfVpFSl0N7MXVJmqayLGPvjB6wCd4Q9vtkrtWPMiiRFjsCLGPvOB4Qg3veV9o4e2WWCbLSuk8ELGOECB6KEKtFRBGWUxK3LevJNWNsLDj1Qg8DHsdbgDDcuKsSBt3JWOLKLGV4qBbDB43Kki7adLuXgfkNHV9gLCr1iB4BRtTwEyKynSE0RzQ3s35WLGBvnBaBjyYapz557a1MCOHUmyCYLGD1dBpADZckjEm83UZiGeWnvJZ4LFJvjh4D3MIUo6KETiRNJunrai7YLCz35g0gTwoylAWad+JWYfAq4NZcLBd4nB4J9jShLvlUXxQHARomefucLFF4QB4MOzYBfitFH8zyWcHoYidOLCyunA0kJsYb5+X82pWrMOxfPU8MLCrgThwhJtS4f/4l/gGyAeN08Xlo');

  110. // var buffer = AMR.toWAV(result);

  111. E('pre').textContent = toHex(buffer);

  112. // var url = URL.createObjectURL(new Blob([buffer], {type: 'audio/wav'}));

  113. // // Play wav buffer

  114. // var audio = new Audio(url);

  115. // audio.onloadedmetadata = audio.onerror = function () {

  116. // URL.revokeObjectURL(url);

  117. // };

  118. // audio.play();

  119. // playAmrBlob(E('#base64-input').value);

  120. };

  121. E('#base64-audio2 > button').onclick = function () {

  122. playAmrToWav('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');

  123. };

  124. E('#base64-audio3 > button').onclick = function () {

  125. playAmrToWav('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');

  126. };

  127. E('#base64-audio4 > button').onclick = function () {

  128. playAmrToWav('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');

  129. };

  130. E('#base64-audio5 > button').onclick = function () {

  131. playAmrToWav('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');

  132. };

  133. function playAmrToWav(amrStr) {

  134. if (null != src) {

  135. src.stop();

  136. src = null;

  137. }

  138. var amrStr = window.atob(amrStr),

  139. result = new Uint8Array(amrStr.length);

  140. for (var i = 0, l = amrStr.length; i < l; i++) {

  141. result[i] = amrStr.charCodeAt(i)

  142. }

  143. playAmrArray(result);

  144. }

  145. E('#audio-file').onchange = function () {

  146. convertAudioBlobToAmr(this.files[0]);

  147. };

  148. var gAudioContext = new AudioContext();

  149. function getAudioContext() {

  150. if (!gAudioContext) {

  151. gAudioContext = new AudioContext();

  152. }

  153. return gAudioContext;

  154. }

  155. function fetchBlob(url, callback) {

  156. var xhr = new XMLHttpRequest();

  157. xhr.open('GET', url);

  158. xhr.responseType = 'blob';

  159. xhr.onload = function () {

  160. callback(this.response);

  161. };

  162. xhr.onerror = function () {

  163. alert('Failed to fetch ' + url);

  164. };

  165. xhr.send();

  166. }

  167. function readBlob(blob, callback) {

  168. var reader = new FileReader();

  169. reader.onload = function (e) {

  170. var data = new Uint8Array(e.target.result);

  171. callback(data);

  172. };

  173. reader.readAsArrayBuffer(blob);

  174. }

  175. function fetchAndReadBlob(url, callback) {

  176. fetchBlob(url, function (blob) {

  177. readBlob(blob, callback);

  178. });

  179. }

  180. function playAmrBlob(blob, callback) {

  181. readBlob(blob, function (data) {

  182. playAmrArray(data);

  183. });

  184. }

  185. function convertAudioBlobToAmr(blob) {

  186. readBlob(blob, function (data) {

  187. var ctx = getAudioContext();

  188. ctx.decodeAudioData(data.buffer, function (audioBuffer) {

  189. var pcm;

  190. if (audioBuffer.copyFromChannel) {

  191. pcm = new Float32Array(audioBuffer.length);

  192. audioBuffer.copyFromChannel(pcm, 0, 0);

  193. } else {

  194. pcm = audioBuffer.getChannelData(0);

  195. }

  196. var amr = AMR.encode(pcm, audioBuffer.sampleRate, 7);

  197. playAmrArray(amr);

  198. });

  199. });

  200. }

  201. function playAmrArray(array) {

  202. var samples = AMR.decode(array);

  203. if (!samples) {

  204. alert('Failed to decode!');

  205. return;

  206. }

  207. playPcm(samples);

  208. }

  209. var src = null;

  210. function playPcm(samples) {

  211. var ctx = getAudioContext();

  212. src = ctx.createBufferSource();

  213. var buffer = ctx.createBuffer(1, samples.length, 8000);

  214. if (buffer.copyToChannel) {

  215. buffer.copyToChannel(samples, 0, 0)

  216. } else {

  217. var channelBuffer = buffer.getChannelData(0);

  218. channelBuffer.set(samples);

  219. }

  220. src.buffer = buffer;

  221. src.connect(ctx.destination);

  222. src.start();

  223. }

  224. function convertAmrBlobToWav(blob) {

  225. readBlob(blob, function (data) {

  226. var buffer = AMR.toWAV(data);

  227. E('pre').textContent = toHex(buffer);

  228. var url = URL.createObjectURL(new Blob([buffer], {type: 'audio/x-wav'}));

  229. // Play wav buffer

  230. var audio = new Audio(url);

  231. audio.onloadedmetadata = audio.onerror = function () {

  232. URL.revokeObjectURL(url);

  233. };

  234. audio.play();

  235. });

  236. }

  237. function toHex(buffer) {

  238. var str = '';

  239. for (var i = 0; i < buffer.length; i++) {

  240. var s = buffer[i].toString(16);

  241. if (s.length == 1) {

  242. s = '0' + s;

  243. }

  244. str += s;

  245. if (i % 16 == 15) { // print 16 bytes per line

  246. str += '\n'

  247. } else if (i % 2 == 1) { // add a space seperator every two bytes.

  248. str += ' ';

  249. }

  250. }

  251. return str;

  252. }

  253. </script>

  254. </body>

实现base64格式的amr音频文件在IOS、android微信内置浏览器的播放相关推荐

  1. 微信公众号 - 实现 H5 网页在微信内置浏览器中下载文件,可预览和下载 office 文件(doc / xls / ppt / pdf 等)适用于任何前端技术栈网站,兼容安卓和苹果系统!

    前言 网上的教程都是让你写页面 "引导" 右上角三个点里,让用户自己去浏览器打开,其实这样用户体验并不好. 本文实现了 最新微信公众号 H5 网页(微信内置浏览器中),预览下载 o ...

  2. krpano全景之解决微信内置浏览器不能自动播放音频的问题

    body里面添加audio标签 ** ![](https://img-blog.csdn.net/20170119105337732?watermark/2/text/aHR0cDovL2Jsb2cu ...

  3. 分享三种方案解决微信内置浏览器不支持下载文件应用的问题

    大家在微信内访问转发分享来的下载链接是不是经常会提示"已停止访问",导致微信内无法下载安装文件和应用.遇到下面的这种情况是说明微信已经拦截你的下载页,基本是无法再恢复访问了. 那么 ...

  4. 安卓微信内置浏览器 input type=file 选择文件未响应

    微信内置浏览器采用以下形式选择图片不响应 <input type="file" accept="image/*"/> 解决思路 步骤一.调微信接口得 ...

  5. 微信录音amr音频文件转mp3格式

    直到现在,仍然不存在一项旨在网页上播放音频的标准.HTML5 规定了一种通过 audio 元素来包含音频的标准方法.audio 元素能够播放声音文件或者音频流.当前,audio 元素支持三种音频格式: ...

  6. PHP 将amr音频文件转换为mp3格式

    PHP 将amr音频文件转换为mp3格式 说下整体思路 1.服务器安装ffmpeg 2.使用ffmpeg -i 指令来转换amr为mp3格式(这个到时候写在PHP代码中,使用exec函数执行即可) 3 ...

  7. 两个mp3文件合成 php,两个音频合成一个 音频合成软件/音频视频合成软件合并不同格式为一个音频文件...

    怎么将两个音频合成一个音频文件,嗯~ o(* ̄▽ ̄*)o ,又是一个老生常谈的话题,但既然是提到了自然是再给大伙演示一下,那就使用一个比较简单的音频合成软件/音频视频合成软件合并不同格式为一个音频文件 ...

  8. 钉钉内置浏览器下载文件(钉钉跨域下载文件、图片等)

    刚开始在网上查询到很多资料其中最为广泛的是用<a>download下载,但是会遇到图片.txt.MP4等文件无法下载被浏览器直接打开,后来尝试用blob的方法进行字节流转换,虽然成功了,但 ...

  9. python中用于创建文件对象的是_Python内置函数________用来打开或创建文件并返回文件对象。...

    内置目前获得目标分子信息的方法不包括 药物对靶标生理活性调节而引起的毒性,函数或创称为 打开对象关于hERG通道描述不正确的选项是 建文件并反映药物分子整体亲脂性强弱的参数 是 有关structure ...

最新文章

  1. java juel表达式_activiti 自定义函数解析juel表达式
  2. linux 进程 内存布局 初探
  3. python的protected和private
  4. 【千字分析】剑指 Offer 05. 替换空格
  5. 查询mysql视图_MySQL数据库简介及常用命令
  6. 常用的xshell用vi命令编辑文本
  7. CSS3边框图片、边框阴影、文本阴影
  8. UVA12022 Ordering T-shirts【数学+打表】
  9. TechNet Magazine/TechNet杂志
  10. 小白Linux入门之:常用命令介绍
  11. Linux系统启动过程分析
  12. 电子邮件如何运行(MTA,MDA,MUA)
  13. 吉他指弹入门——日式指弹的pm技巧
  14. windows命令行将应用程序加入环境变量
  15. Byte Pair Encoding
  16. [4G5G专题-57]:L2 RLC层-详解RLC架构、数据封装、三种模式:透明TM、非确认模式UM、确认模式AM
  17. 非递归的归并排序(详细解析)
  18. 使用setViewControllers实现一些不同寻常的跳转
  19. MATLAB人工神经网络的手写数字识别系统
  20. 3ds模型--完善TGA纹理显示

热门文章

  1. 全球最有诚意的4款免费室内设计软件!
  2. 卫星定位导航|GPS定位模块,北斗定位模块的应用场景及选型建议
  3. 获取地图区域边界经纬度(地图json数据)
  4. openbmc开发-->aspeed-->slave-i2c[ast2400]
  5. 基于php054个人财务管理系统
  6. 计算机科学世界排名前5的著名错误
  7. 易康软件插件ESP2
  8. Android实现简单的保存密码功能
  9. cbow 与 skip-gram的比较
  10. haproxy安装部署以及配置详解