将 MIDI 转换为 mp3

Posted

技术标签:

【中文标题】将 MIDI 转换为 mp3【英文标题】:Convert midi to mp3 【发布时间】:2013-04-30 08:32:46 【问题描述】:

我有一个 midi 文件,我想在网页上播放该文件,目前我正在使用 midi.js 播放器播放,但它不适用于移动浏览器。

请指导我如何播放该文件,否则我如何播放 midi 或将其转换为 mp3

这是我的代码

  $data = fopen ($midi, 'rb');
 $size= filesize($midi);
 $contents = fread ($data, $size);
 fclose($data);
 $encoded= base64_encode($contents);

 $encode = "'data:audio/midi;base64,".$encoded."=='";

最后将 base64 值传递给 midi.js

【问题讨论】:

相关:softwarerecs.stackexchange.com/questions/10915/… 【参考方案1】:

猜你是在一台 linux 机器上... 最简单的方法就是胆小的玩起来,管道输出ffmpeg:

timidity song.mid -Ow -o - | ffmpeg -i - -acodec libmp3lame -ab 64k song.mp3

【讨论】:

您要求转换 mp3 对吗?如果您没有对服务器的 root/admin 访问权限,则必须将其本地转换为 mp3。 Alternativley 你可以像建议的那样做here 我用这段代码播放midi但不能正常工作 这是在服务器上工作的,只要你胆子小,安装了ffmpeg加codecs/lame。您可以创建一个 bash(或 php)脚本,在将 midi 文件上传到服务器时运行此转换。【参考方案2】:

如果您使用的是 Linux,请使用 avconv 而不是 ffmpeg,因为 ffmpeg 已被弃用:

timidity input.midi -Ow -o - | avconv -i - -acodec libmp3lame -b 64k output.mp3

或跛脚:

timidity -Ow -o - input.midi | lame - output.mp3

【讨论】:

我认为 ffmpeg 未被弃用。【参考方案3】:

我遇到了 MIDI.js 无法在移动浏览器中运行的类似问题。原来我已经包含了 ogg 文件但缺少 mp3(由于某种原因 MIDI.js 只提供了 ogg 版本的 synth_drum)。

所有 128 种通用 MIDI 声音的乐器文件可以在 https://github.com/gleitz/midi-js-soundfonts 找到。

【讨论】:

【参考方案4】:

FluidSynth + FFmpeg

胆怯的另一种选择:

sudo apt install fluidsynth ffmpeg
fluidsynth -a alsa -T raw -F - /usr/share/sounds/sf2/FluidR3_GM.sf2 MIDI_sample.mid |
  ffmpeg -f s32le -i - MIDI_sample.mp3

在 Ubuntu 20.04、FluidSynth 2.1.1-2 和这个 MIDI 文件上测试:https://en.wikipedia.org/wiki/File:MIDI_sample.mid

相关:https://softwarerecs.stackexchange.com/questions/10915/automatically-turn-midi-files-into-wav-or-mp3/76955#76955

【讨论】:

如何指定mp3文件的码率? @Vinod 在 ffmpeg 端:superuser.com/questions/319542/…,在流体合成器上有一个 --sample-rate【参考方案5】:

这对我有用:

timidity my_midi_file.mid -Ow -o - | lame - -b 64 my_converted_midi.mp3

在 ubuntu 18.04 上运行

【讨论】:

【参考方案6】:

首先安装 Timidity 包,在 Ubuntu 中运行即可:

sudo apt-get install -y timidity

然后运行这个命令:

timidity input.mid -Ow -o out.mp3

您也可以将格式更改为WAV 或其他格式。

【讨论】:

您的 timidity 命令创建的是 WAV 而不是 MP3 文件。【参考方案7】:

Audacity 是一个开源音频转换器。

【讨论】:

Audacity 不处理 MIDI 文件。 我在 audacity 上找不到任何代码...你能帮帮我吗 您需要导入 MIDI,然后将其导出为 mp3 格式。您说您可以使用 mp3 而不是 MIDI 来摆脱困境。 Here 是一篇带你一步步完成的文章。 但是使用大胆我必须手动转换它,但我希望它像他们一样在服务器端动态完成solmire.com 我建议你上传 midi 和 mp3,然后使用 PHP 确定用户代理或设备类型,get_browser()$_SERVER['HTTP_USER_AGENT']...根据兼容性提供正确的文件。

以上是关于将 MIDI 转换为 mp3的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中将 ABC 表示法的音乐文件转换为 midi 或 mp3 [关闭]

将 MIDI 事件转换为 pygame 事件

将 MIDI 节拍转换为实际播放秒数

使用软件合成器将 MIDI 文件转换为原始音频

如何将 magenta.js 音符序列转换为 midi 文件?

MIDI:将 BPM 转换为 FPS 增量时间?