gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:16 24 4
gpt4 key购买 nike

我正在尝试直接从我的Android应用程序动态生成一个小的MP4音频和视频文件。

我最初的攻击计划:

  • 用户输入一些基本歌曲数据(和弦进行等),然后该应用程序会构建MIDI文件。
  • 系统为每个和弦建立和弦图,并使用MIDI阅读器生成定时与MIDI一起的动画帧数组
  • 将MIDI转换为原始PCM音频数据<-此S.O.问题是特定于此点的
  • 将原始音频应用于动画帧-并将音频和视频帧编码为MP4
  • 使用标准的播放控件将生成的MP4视频提供给用户。

  • 该应用程序已经根据用户输入(包括速度,乐器,音符等)构建了MIDI文件。该部分易于完成,并且MIDI文件已正确生成。此MIDI可以从Android的MediaPlayer中很好地播放。 (步骤1)

    通过回读MIDI文件并交叉引用序列中每个和弦的静态位图列表,还可以正确创建动画帧。这些帧将成为视频...但是一开始将没有音频。 (第2步)

    如您所见,Android MIDI延迟问题对我而言并不是什么大问题,因为我没有创建实时合成器应用程序...我只想将MIDI转换为可以混合的某种音频格式录制到已经定时播放MIDI的视频中。 (第3步)

    我遇到的问题是第3步。

    我知道我需要使用软件MIDI合成器来获取将由一系列MIDI事件产生的实际音频输出。但是,使其正常工作已成为主要障碍。我并不关心最终音频的精确质量,只是它与某人使用通用设备的常规MIDI样本(ala Gravis声音字体或Sovinox声音的鼓声等)所期望的结果非常匹配。

    所以...
  • Android MIDI Lib
  • Android Midi Driver using Sonivox EAS Library

  • 我的第一个尝试是使用上述两个项目...以一种可以将MIDI文件转换为原始PCM数据缓冲区的方式将它们混合在一起....效果还不是很好。

    Midi库(1)使用实时监听器读取MIDI文件,并将事件发送到Midi驱动程序(2),后者播放由板载合成器生成的原始PCM数据。

    (注意:对驱动程序进行了一些调整,以便存储整个缓冲区,并且仅在MIDI阅读器完成后才返回。这也意味着整个过程花费的时间等于歌曲的长度,仅用于转换它因为我们正在实时“监听”。)

    我还没有像我希望的那样使它工作。我想使它尽可能简单,并且尽可能使用开放源代码项目。如果它可以不依赖实时监听器来做到这一点,那就更好了。

    我一直在考虑的其他一些库和工具(但可能有些过头了):
  • Pure Data Library for Android
  • MidiSheetMusic App (with source)
  • Synthesis ToolKit in C++ (STK)
  • Music Synth for Android
  • Crimson SoftSynth

  • 甚至更多竞争者(尚未完成大量研究):

    jFugue/胆小/听觉/fluidSynth/cSound/jMusic/JSyn/Gervill/Softonic/Caustic/LibGDX/JetPlayer/OpenSL-ES

    我的问题是:
  • 我是否在上述项目的正确路径上工作?我是MIDI-> PCM转换的新手,所以我想确保自己没有完全丢失某些东西。
  • 如果不是,我应该如何将MIDI文件转换为某种音频格式,然后可以将其用于创建MP4(或任何视频播放格式)?
  • 是否有其他开源项目可能对使用Android转换MIDI 2原始音频波形的任务有所帮助?
  • 还有是否已经编写了可在Android上使用的此类任务的示例? (即已移植为可与Android JNI等配合使用)

  • 我的希望是,我完全错过了一些将使这项任务变得微不足道的事情……我的假设是,这将需要一些严重的黑客攻击和JNI功夫。

    如果那样的话,我愿意走艰难的道路。任何和所有建议,将不胜感激。

    最佳答案

    我不是Android用户,但是我尝试了多种方法来从MIDI生成WAV文件,而我对FluidSynth感到更加满意,它似乎可以作为Android的库使用,这就是另外一个StackOverflow问题:Using Fluidsynth to play notes from SoundFonts on Android

    您只需要了解声音字体(在网络上搜索会很容易地告诉您),然后选择一个不太大的声音字体即可(否则,您可能会遇到内存不足的问题)。

    还要检查声音字体是否覆盖了您想要演奏的所有乐器。

    关于android - 使用软件合成器将MIDI文件转换为原始音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20336447/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com