第5章 音频录制功能
在本章中,我们将学习如何使用RecordRTC进行音频录制,包括配置选项、格式选择和质量控制等。
5.1 音频录制基础
音频录制是RecordRTC的重要功能,支持多种音频格式:
基本音频录制配置
// 基本音频录制配置
var options = {
type: 'audio', // 录制类型
mimeType: 'audio/wav', // 音频格式
numberOfAudioChannels: 2, // 声道数
sampleRate: 44100, // 采样率
bufferSize: 4096 // 缓冲区大小
};
var recorder = RecordRTC(mediaStream, options);
5.2 音频格式选择
RecordRTC支持多种音频格式,可以根据需求选择:
格式 | MIME类型 | 浏览器支持 | 特点 |
---|---|---|---|
WAV | audio/wav | 所有浏览器 | 无压缩,音质好,文件大 |
MP3 | audio/mp3 | Chrome, Firefox | 有损压缩,文件小,兼容性好 |
OGG | audio/ogg | Chrome, Firefox | 开源格式,压缩率高 |
不同音频格式配置
// WAV格式(无压缩,音质最好)
var wavOptions = {
type: 'audio',
mimeType: 'audio/wav',
numberOfAudioChannels: 2,
sampleRate: 44100
};
// MP3格式(有损压缩,文件较小)
var mp3Options = {
type: 'audio',
mimeType: 'audio/mp3',
numberOfAudioChannels: 2,
sampleRate: 44100
};
// OGG格式(开源压缩格式)
var oggOptions = {
type: 'audio',
mimeType: 'audio/ogg',
numberOfAudioChannels: 2,
sampleRate: 44100
};
5.3 音频质量控制
可以通过多种参数控制音频录制质量:
音频质量配置
// 高质量音频录制
var highQualityOptions = {
type: 'audio',
mimeType: 'audio/wav',
numberOfAudioChannels: 2, // 立体声
sampleRate: 48000, // 48kHz采样率
bufferSize: 4096
};
// 中等质量音频录制
var mediumQualityOptions = {
type: 'audio',
mimeType: 'audio/wav',
numberOfAudioChannels: 1, // 单声道
sampleRate: 44100, // 44.1kHz采样率
bufferSize: 4096
};
// 低质量音频录制(适合网络传输)
var lowQualityOptions = {
type: 'audio',
mimeType: 'audio/wav',
numberOfAudioChannels: 1, // 单声道
sampleRate: 22050, // 22.05kHz采样率
bufferSize: 2048
};
5.4 音频处理功能
录制完成后可以对音频进行处理:
音频处理示例
// 音频处理函数
function processAudio(blob) {
// 创建音频上下文
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
// 读取音频数据
var reader = new FileReader();
reader.onload = function(e) {
audioContext.decodeAudioData(e.target.result, function(buffer) {
// 处理音频数据
console.log('音频时长:', buffer.duration);
console.log('采样率:', buffer.sampleRate);
console.log('声道数:', buffer.numberOfChannels);
// 可以在这里进行音频处理
// 例如:调整音量、添加效果等
});
};
reader.readAsArrayBuffer(blob);
}
5.5 多麦克风支持
可以同时使用多个麦克风进行录制:
多麦克风录制
// 获取多个音频设备
async function getMultipleMicrophones() {
try {
// 获取所有音频输入设备
const devices = await navigator.mediaDevices.enumerateDevices();
const audioDevices = devices.filter(device => device.kind === 'audioinput');
// 创建多个音频流
const streams = [];
for (let i = 0; i < Math.min(2, audioDevices.length); i++) {
const stream = await navigator.mediaDevices.getUserMedia({
audio: {
deviceId: audioDevices[i].deviceId
},
video: false
});
streams.push(stream);
}
return streams;
} catch (error) {
console.error('获取麦克风失败:', error);
}
}
5.6 音频可视化
可以创建音频可视化效果:
音频可视化
// 创建音频可视化
function createAudioVisualization(stream) {
// 创建音频上下文
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
// 创建分析器
var analyser = audioContext.createAnalyser();
analyser.fftSize = 256;
// 连接音频节点
var source = audioContext.createMediaStreamSource(stream);
source.connect(analyser);
// 获取频域数据
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
// 创建canvas用于可视化
var canvas = document.getElementById('visualization');
var canvasCtx = canvas.getContext('2d');
// 绘制函数
function draw() {
requestAnimationFrame(draw);
analyser.getByteFrequencyData(dataArray);
canvasCtx.fillStyle = 'rgb(0, 0, 0)';
canvasCtx.fillRect(0, 0, canvas.width, canvas.height);
var barWidth = (canvas.width / bufferLength) * 2.5;
var barHeight;
var x = 0;
for(var i = 0; i < bufferLength; i++) {
barHeight = dataArray[i];
canvasCtx.fillStyle = 'rgb(' + (barHeight+100) + ',50,50)';
canvasCtx.fillRect(x, canvas.height-barHeight/2, barWidth, barHeight/2);
x += barWidth + 1;
}
};
draw();
}