保存时间:2026/4/8 08:27:55
pip install audio-to-midi
audio-to-midi --input song.mp3 --output song.mid
# 先装 waon(Linux/macOS)
sudo apt install waon
# 或 brew install waon
# 转换
waon -i song.mp3 -o song.mid
# 1. MP3 → WAV(FFmpeg 预处理)
ffmpeg -i song.mp3 -ar 44100 -ac 1 song.wav
# 2. WAV → MIDI(用 GiantMIDI 等模型)
python predict.py song.wav song.mid
第2秒,中音Do,力度80,持续0.5秒就这一行代码,就能发出半秒音符,不用存半秒几万组波形数据。pip install basic-pitch
basic-pitch 输出文件夹 你的歌曲.mp3
basic-pitch ./output song.mp3
output/ 文件夹里生成:pip install -U basic-pitch
mkdir -p midi_output
basic-pitch midi_output ~/你的音乐文件.mp3
echo "转换完成!文件在 midi_output 文件夹里"
pip install basic-pitch
basic-pitch 输出目录 音乐.mp3
谁都觉得有意思,谁都觉得技术可行;谁都不愿投大钱,谁都赚不回成本;最后全部停留在 Demo、论文、小玩具,永远成不了正经产品。
click("submit.png") 就行省两三千文员工资,万一错一笔账,赔的钱+税务风险+查账成本,亏十倍百倍。
这种野路子外挂,敢碰我钱账?想都别想。
小龙虾写代码控控件,理论上比瞎看图点鼠标靠谱。
图像识别这套,明明有弹窗兜底、异常就停,容错更直观,为啥反而不如小龙虾普及?
sudo apt update
sudo apt install waon
waon -i 你的歌曲.mp3 -o 输出.mid
waon -i test.mp3 -o test.mid
sudo apt install waon
waon -i 歌曲.mp3 -o 输出.mid
waon,所以搜不到、装不上。sudo apt update
sudo apt install build-essential libsndfile1-dev libfftw3-dev
wget https://downloads.sourceforge.net/project/waon/waon/20100208/waon-20100208.tar.gz
tar zxvf waon-20100208.tar.gz
cd waon-20100208
make
sudo cp waon /usr/local/bin/
waon -i 你的文件.mp3 -o 输出.mid
sudo apt install sonic-visualiser
midijsweb-midi-player把MIDI指令在浏览器里JS解码,再调用Web Audio发声。不用搞复杂AI转高质量MIDI,随便简单纯旋律MIDI,浏览器原生音色放出来,干净轻巧,完全够用。
.mid = 纯指令(按哪个键、多久),本身没声音<audio src="bgm.mid" controls>
<!DOCTYPE html>
<html>
<body>
<!-- 引入现成网页MIDI播放组件 -->
<script src="https://cdn.jsdelivr.net/npm/midi-player-js@2/browser/midiplayer.min.js"></script>
<script>
let player = new MidiPlayer.Player(function(event) {});
player.loadFile("bgm.mid"); // 你的MIDI文件名
player.play();
</script>
</body>
</html>
<!-- 自动循环BGM,极简原生 -->
<audio loop autoplay muted preload="auto">
<source src="bgm.ogg" type="audio/ogg">
重点:压低采样+单声道,体积直接干到极致,音质降级当BGM完全无感。
<script>
const ctx = new (window.AudioContext || window.webkitAudioContext)();
// 生成一个低频柔和背景音
function playTone(freq,time){
let osc = ctx.createOscillator();
let gain = ctx.createGain();
osc.freq.value = freq;
osc.type = "sine"; // 正弦波,最柔和不刺耳
osc.connect(gain);
gain.connect(ctx.destination);
gain.gain.value = 0.08; // 音量压很低,纯背景
osc.start();
osc.stop(ctx.currentTime + time);
}
// 循环轻旋律BGM
setInterval(()=>playTone(220,2),2000);
</script>
<audio loop autoplay>
<source src="data:audio/ogg;base64,AAAAAAAAAAAAAAAA......" type="audio/ogg">
| 方案 | 是否要JS | 有无独立音频文件 | 体积 | 音质 | 推荐度 |
|---|---|---|---|---|---|
| 压缩OGG/TinyWAV | 极简单原生标签 | 有(极小) | 超小 | 够用 | ⭐⭐⭐⭐⭐(首选) |
| 代码合成音(Web Audio) | 几行极简JS | 无 | 趋近于0 | 极简氛围音 | ⭐⭐⭐⭐ |
| Base64内嵌音频 | 原生标签 | 嵌进代码 | 超小 | 够用 | ⭐⭐⭐⭐ |
| MIDI网页播放 | 必须额外JS+音源 | 文件小但要解码 | 文件小适配麻烦 | 普通 | 不推荐 |
ffmpeg -i 原音乐.mp3 -ac 1 -ar 11025 -sample_fmt u8 -c:a libvorbis -q:a 0 bgm_ultra_small.ogg
-ac 1:单声道-ar 11025:超低采样率,BGM无感-sample_fmt u8:8位无符号整型 = 你要的8bit-c:a libvorbis -q:a 0:OGB最低码率,极致压缩ffmpeg -i 原音乐.mp3 -ac 1 -ar 22050 -sample_fmt u8 -c:a libvorbis -q:a 2 bgm_small.ogg
ffmpeg -i 原音乐.mp3 -ac 1 -ar 11025 -sample_fmt u8 bgm_8bit_mono.wav
<audio loop preload="auto">
<source src="bgm_ultra_small.ogg" type="audio/ogg">
ffmpeg -i 0.04seconds.mp3 -ac 1 -ar 11025 -sample_fmt u8 -y 0.04seconds_8bit.wav
-sample_fmt u8:ffmpeg -i 0.04seconds.mp3 -ac 1 -ar 11025 -b:a 8k -y 0.04seconds_small.ogg
ffmpeg -i 0.04seconds.mp3 -ac 1 -ar 11025 -sample_fmt u8 -y output.wav
<audio loop autoplay>
<source src="output.wav" type="audio/wav">
</audio>
ffmpeg -i 0.04seconds.mp3 -ac 1 -ar 8000 -b:a 6k -y 0.04seconds_final.ogg
ffmpeg -i 0.04seconds.mp3 -ac 1 -ar 8000 -y 0.04seconds_final.wav
ffmpeg -i 0.04seconds.mp3 -ac 1 -ar 4000 -b:a 4k -y 0.04seconds_tiny.ogg
<audio loop autoplay muted>
<source src="0.04seconds_final.ogg" type="audio/ogg">
</audio>
.ogg 音频文件转成 Base64 字符串,直接写进 HTML 里,→ 整个网页只有一个 .html 文件,没有额外音频文件。ffmpeg -i 0.04seconds.mp3 -ac 1 -ar 8000 -b:a 6k -y bgm.ogg
base64 -w 0 bgm.ogg > bgm.base64
<audio loop autoplay muted>
<source src="data:audio/ogg;base64,【把你复制的Base64字符串粘贴在这里】" type="audio/ogg">
<audio loop autoplay muted>
<source src="data:audio/ogg;base64,T2dnUwACAAAAAAAAAADmXwBEd0EAZmlsZAAA..." type="audio/ogg">