(function (window) {
|
|
var Player = function () {
|
//创建一个音频环境对象
|
audioContext = window.AudioContext || window.webkitAudioContext;
|
var context = new audioContext();
|
var isPlaying = false;
|
var audioBuffers = []
|
var audioBuffer = context.createBuffer(1, 8000, 8000);
|
var playNextBuffer = function() {
|
isPlaying = false;
|
if (audioBuffers.length) {
|
playAudio(audioBuffers.shift());
|
}
|
//if (audioBuffers.length > 1) audioBuffers.shift();
|
//console.log(audioBuffers.length)
|
};
|
|
var copyToCtxBuffer = function(fromBuffer) {
|
var nowBuffering = audioBuffer.getChannelData(0);
|
|
var buffer = new Int8Array( fromBuffer);
|
for (var i = 0; i < 8000; i++) {
|
|
var word = (buffer[i * 2] & 0xff) + ((buffer[i * 2 + 1] & 0xff) << 8);
|
nowBuffering[i] = (((word + 32768) % 65536) - 32768) / 32768.0;
|
|
}
|
};
|
var playAudio = function(fromBuffer) {
|
if (isPlaying) {
|
//var buffer = new Int8Array( fromBuffer);
|
//copyAudioOutputArray(buffer);
|
audioBuffers.push(fromBuffer);
|
return;
|
}
|
isPlaying = true;
|
copyToCtxBuffer(fromBuffer);
|
var source = context.createBufferSource();
|
source.buffer = audioBuffer;
|
source.connect(context.destination);
|
source.onended = playNextBuffer;
|
//setTimeout(playNextBuffer, audioBufferTime-audioBuffers.length*200);
|
source.start();
|
};
|
|
|
|
config = {};
|
config.channelCount = 1;
|
config.numberOfInputChannels = config.channelCount;
|
config.numberOfOutputChannels = config.channelCount;
|
config.sampleBits = config.sampleBits || 16; //采样数位 8, 16
|
//config.sampleRate = config.sampleRate || (context.sampleRate / 6); //采样率(1/6 44100)
|
config.sampleRate = config.sampleRate || 8000; //采样率16K
|
//创建缓存,用来缓存声音
|
config.bufferSize = 8192;
|
|
|
//将声音输入这个对像
|
var audioOutput = context.createBufferSource();
|
|
//设置音量节点
|
var volume = context.createGain();
|
audioOutput.connect(volume);
|
|
// 创建声音的缓存节点,createScriptProcessor方法的
|
// 第二个和第三个参数指的是输入和输出都是声道数。
|
var player = context.createScriptProcessor(config.bufferSize, 0, config.channelCount);
|
|
|
|
//开始播放
|
this.start = function () {
|
audioOutput.connect(player);
|
player.connect(context.destination);
|
};
|
|
//停止
|
this.stop = function () {
|
player.disconnect();
|
context.close();
|
|
};
|
this.addPlay = function (blob)
|
{
|
var reader = new FileReader();
|
// 读取这四个字节
|
reader.readAsArrayBuffer(blob);
|
reader.onload = function (e) {
|
var buffer = reader.result;
|
var view = new DataView(buffer);
|
|
playAudio(view.buffer);
|
};
|
};
|
|
var $bo=$("#inbo");
|
var $change=$("#change");
|
var width=$bo.width();
|
//音频采集
|
player.onaudioprocess = function (e) {
|
|
|
//console.log(e.playbackTime);
|
|
};
|
|
};
|
//抛出异常
|
Player.throwError = function (message) {
|
throw new function () { this.toString = function () { return message; };};
|
};
|
|
//获取播放机
|
Player.get = function (callback) {
|
if (callback) {
|
var rec = new Player();
|
callback(rec);
|
}
|
};
|
window.Player = Player;
|
|
})(window);
|