
发表日期: 2021-05-10 15:08:25 浏览次数:124
淮滨小程序制作【淮滨企业邮箱】淮滨网站外包、淮滨微信商城开发、淮滨网店美工、淮滨淘宝设计

淮滨县,河南省信阳市下辖县,位于信阳市东北部,地处东经115°11′—115°35,北纬32°15′—32°38'之间,总面积1209平方公里,地处北亚热带与暖温带气候过渡地带。 [1] 截至2020年6月,淮滨县辖4个街道、5个镇、10个乡, [2] 县政府驻滨湖街道。 [3] 截至2019年末,淮滨县总人口78.47万。 [4]
淮滨因位于淮河之滨而得名。1952年8月经国务院批准,正式设立淮滨县。 [1] 1962年10月20日,合并于息县的原淮滨行政区域和固始县的原淮滨县期思、张庄两个区的行政区域为淮滨县的行政区域。 [5] 2019年3月,淮滨县入选第一批革命文物保护利用片区分县名单。 [6] 淮滨县产业集聚区是河南省首批确定的175个产业集聚区之一。造船业是淮滨县传统优势产业,也是纳入河南省“十一五”规划予以重点支持的装备制造业。 [7] 2020年2月26日,河南省人民政府批准淮滨县退出贫困县,正式脱贫摘帽。 [8] 淮滨县境内有期思古城、东西湖风景区、淮滨淮南湿地自然保护区等著名景点。
2019年,淮滨县生产总值225.92亿元,增长7.9%。其中,第一产业增加值41.26亿元,增长1.8%;第二产业增加值91.70亿元,增长8.9%;第三产业增加值92.97亿元,增长10.7%,三次产业结构18.3:40.6:41.1。 [4]
本文接上文,是音视频处理专题文章,上节说了视频上传截取封面。本文介绍音频上传。(最近发现张鑫旭大神也更新了类似文章,本文借鉴其文章,作为音频上传专题文章)
其实音频截取原理也是ArrayBuffer转AudioBuffer 然后创建一个空的AudioBuffer,复制现有的通道数据前3秒的数据,然后复制的内容写入到这个空的AudioBuffer,于是我们就得到了一个剪裁后的音频Buffer数据了。
HTML代码:
<form> <input type="file" id="file" accept="audio/mpeg"></form><p><audio id="audio" controls></audio></p>
js 代码:
file.onchange = function (event) {
var target = event.target;
var file = target.files[0];
var type = file.type;
// 开始识别
var reader = new FileReader();
reader.onload = function (event) {
var arrBuffer = event.target.result;
var audioCtx = new AudioContext();
audioCtx.decodeAudioData(arrBuffer, function(audioBuffer) {
var duration = audioBuffer.duration;
var channels = audioBuffer.numberOfChannels;
var rate = audioBuffer.sampleRate;
// 3秒
var startOffset = 0;
var endOffset = rate * 3;
var frameCount = endOffset - startOffset;
var newAudioBuffer;
newAudioBuffer = new AudioContext().createBuffer(channels, endOffset - startOffset, rate);
var anotherArray = new Float32Array(frameCount);
var offset = 0;
for (var channel = 0; channel < channels; channel++) {
audioBuffer.copyFromChannel(anotherArray, channel, startOffset);
newAudioBuffer.copyToChannel(anotherArray, channel, offset);
}/**
* 直接播放使用下面的代码
// 创建AudioBufferSourceNode对象
var source = audioCtx.createBufferSource();
// 设置AudioBufferSourceNode对象的buffer为复制的3秒AudioBuffer对象
source.buffer = newAudioBuffer;
// 这一句是必须的,表示结束,没有这一句没法播放,没有声音
// 这里直接结束,实际上可以对结束做一些特效处理
source.connect(audioCtx.destination);
// 资源开始播放
source.start();
*/
var blob = bufferToWave(newAudioBuffer, frameCount);/**
* 转换成Base64使用下面的代码
var reader2 = new FileReader();
reader2.onload = function(evt){
audio.src = evt.target.result;
};
reader2.readAsDataURL(blob);
*/
// 使用Blob地址
audio.src = URL.createObjectURL(blob);
});
};
reader.readAsArrayBuffer(file);};// Convert AudioBuffer to a Blob using WAVE representationfunction bufferToWave(abuffer, len) {
var numOfChan = abuffer.numberOfChannels,
length = len * numOfChan * 2 + 44,
buffer = new ArrayBuffer(length),
view = new DataView(buffer),
channels = [], i, sample,
offset = 0,
pos = 0;
// write WAVE header
setUint32(0x46464952); // "RIFF"
setUint32(length - 8); // file length - 8
setUint32(0x45564157); // "WAVE"
setUint32(0x20746d66); // "fmt " chunk
setUint32(16); // length = 16
setUint16(1); // PCM (uncompressed)
setUint16(numOfChan);
setUint32(abuffer.sampleRate);
setUint32(abuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec
setUint16(numOfChan * 2); // block-align
setUint16(16); // 16-bit (hardcoded in this demo)
setUint32(0x61746164); // "data" - chunk
setUint32(length - pos - 4); // chunk length
// write interleaved data
for(i = 0; i < abuffer.numberOfChannels; i++)
channels.push(abuffer.getChannelData(i));
while(pos < length) {
for(i = 0; i < numOfChan; i++) { // interleave channels
sample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp
sample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0; // scale to 16-bit signed int
view.setInt16(pos, sample, true); // write 16-bit sample
pos += 2;
}
offset++ // next source sample
}
// create Blob
return new Blob([buffer], {type: "audio/wav"});
function setUint16(data) {
view.setUint16(pos, data, true);
pos += 2;
}
function setUint32(data) {
view.setUint32(pos, data, true);
pos += 4;
}}
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878