Php 将midi转换为mp3

Php 将midi转换为mp3,php,midi,midi-instrument,Php,Midi,Midi Instrument,我有一个midi文件,我想在网页上播放该文件,目前我正在使用midi.js播放器播放,但它在移动浏览器上不起作用 请指导我如何播放该文件,或者如何播放midi或将其转换为mp3 这是我的密码 $data = fopen ($midi, 'rb'); $size= filesize($midi); $contents = fread ($data, $size); fclose($data); $encoded= base64_encode($contents); $encode

我有一个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是一个开源的音频转换器。

猜测您是在linux机器上。。。 最简单的方法是胆小地播放,并通过管道输出ffmpeg:

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

我遇到了一个类似的问题,MIDI.js不能在移动浏览器中工作。事实证明,我包含了ogg文件,但缺少MP3(出于某种原因,MIDI.js只提供了synth_drum的ogg版本)


所有128种通用MIDI声音的乐器文件可在中找到。

如果您使用的是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

FluidSync+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、FluidSync 2.1.1-2和此MIDI文件上测试:

相关:

这对我来说很有效:

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

运行在Ubuntu18.04上的Audacity无法处理MIDI文件。我在Audacity上找不到任何代码…你能帮我吗?你需要导入MIDI,然后将其导出为mp3格式。你说你可以用mp3代替MIDI。是一篇引导你一步一步地阅读的文章。但是使用audacity我必须手动转换它,但我希望它在服务器端像他们那样动态地完成。我建议你上传midi和mp3,然后使用PHP通过
get_browser()
$\u server['HTTP\u User\u Agent']
确定用户代理或设备类型。。。根据兼容性提供适当的文件。您要求mp3转换,对吗?如果您没有对服务器的root/admin访问权限,则必须在本地将其转换为mp3。Alternativley你可以像我建议的那样做,我用这段代码来播放midi,但不起作用这在服务器上起作用,只要你胆小,安装了ffmpeg plus编解码器/lame。您可以创建一个bash(或php)脚本,每当midi文件上传到服务器时,该脚本都会运行此转换。我认为
ffmpeg
是不预先确定的。相关:如何指定mp3文件的比特率?@Vinod在ffmpeg端:在fluidSync上有一个
--采样率