如何在Google Colab中高质量录制音乐曲目
在Colab中录制高质量音乐音频的解决方案
问题分析
你当前使用的Colab麦克风录制代码,默认MediaRecorder配置是针对语音优化的低质量设置,导致录制的音乐音频无法满足流派分类等后续处理需求。而sounddevice、pyAudio这类依赖本地硬件直接控制的库,确实无法在Colab的云端环境中运行。
优化后的录制代码
核心是修改getUserMedia的音频参数,指定MediaRecorder的高质量编码格式,确保录制的音频保留足够的细节:
import IPython.display as ipd from IPython.display import Javascript from google.colab import output from base64 import b64decode RECORD = """ const sleep = time => new Promise(resolve => setTimeout(resolve, time)) const b2text = blob => new Promise(resolve => { const reader = new FileReader() reader.onloadend = e => resolve(e.srcElement.result) reader.readAsDataURL(blob) }) var record = time => new Promise(async resolve => { // 配置高质量音频参数:44.1kHz标准采样率、立体声,关闭语音优化功能 const stream = await navigator.mediaDevices.getUserMedia({ audio: { sampleRate: 44100, channelCount: 2, echoCancellation: false, noiseSuppression: false, autoGainControl: false } }) // 指定高质量编码格式,优先无压缩WAV,不支持则回退高比特率OPUS const options = { mimeType: 'audio/wav; codecs=1' } if (!MediaRecorder.isTypeSupported(options.mimeType)) { console.warn(`${options.mimeType} not supported, falling back to audio/opus`) options.mimeType = 'audio/opus; codecs=opus' } const recorder = new MediaRecorder(stream, options) const chunks = [] recorder.ondataavailable = e => chunks.push(e.data) recorder.start() await sleep(time) recorder.onstop = async ()=>{ const blob = new Blob(chunks, { type: options.mimeType }) const text = await b2text(blob) resolve(text) } recorder.stop() }) """ def record_high_quality_audio(sec=5): display(Javascript(RECORD)) s = output.eval_js('record(%d)' % (sec*1000)) b = b64decode(s.split(',')[1]) # 根据编码格式自动匹配文件名后缀 mime_type = s.split(';')[0].split(':')[1] filename = 'high_quality_audio.wav' if mime_type == 'audio/wav' else 'high_quality_audio.opus' with open(filename, 'wb') as f: f.write(b) print(f"已保存高质量音频文件:{filename}") return filename # 示例:录制10秒音乐 audio_file = record_high_quality_audio(sec=10) # 播放录制的音频 ipd.display(ipd.Audio(audio_file))
关键优化点
- 关闭语音优化功能:禁用回声消除、降噪、自动增益控制,这些功能会破坏音乐的动态范围和原始音色
- 配置专业音频参数:采用44.1kHz音乐标准采样率+立体声通道,最大化保留音频细节
- 指定高质量编码:优先使用无压缩WAV格式,若浏览器不支持则回退到高比特率OPUS编码,避免默认的低质量语音编码
后续处理注意事项
如果保存的是OPUS格式文件,可通过librosa转换为通用WAV格式用于后续处理:
import librosa import soundfile as sf # 读取OPUS文件并转换为WAV y, sr = librosa.load('high_quality_audio.opus', sr=44100) sf.write('converted_audio.wav', y, sr)
内容的提问来源于stack exchange,提问作者user1993416
相关产品推荐
相关产品推荐

