MIDI 文件播放一般是如何处理的?

Posted

技术标签:

【中文标题】MIDI 文件播放一般是如何处理的?【英文标题】:How is MIDI File Playback Handled in General? 【发布时间】:2013-07-24 23:48:55 【问题描述】:

我正在编写一个涉及 MIDI 文件播放的 android 应用程序。我想使用 Android 的动态回调方法来可视化声波,看起来像这样:

 mVisualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() 
        public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
                int samplingRate) 
            mVisualizerView.updateVisualizer(bytes);
        

        public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) 
    , Visualizer.getMaxCaptureRate() / 2, true, false);

我知道位深度和采样率是计算机用来录制/播放音频的两个参数,但这是否也适用于 MIDI 文件格式?正如我所读到的,mp3 和 wav 等其他文件格式包含“实际”音频信息,但 MIDI 仅包含指令,并且仅在播放 MIDI 文件时才创建音频。那么,如果我要播放 MIDI 文件而不是 mp3 文件,我还能获得波形播放参数吗?

【问题讨论】:

我相信您可以在 Internet 上的许多地方找到有关 MIDI 标准的信息。但简单地说,你是对的:MIDI 由指令组成,按时间顺序排列,指定在不同时间打开或关闭哪些音符,以及其他表达指令等。它不包含任何波形或注意优质内容。这是音调发生器或 MIDI 解释器的工作。大多数声卡都有内置的音调发生器。 MIDI 中没有“波形”信息。 但是你知道播放时MIDI解释器是否会生成波形信息吗? 在某些时候必须生成一个波形,但它可能没有被捕获。不过,有一些方法可以捕捉到它。在某些情况下,某些声音软件可能支持使用声卡的功能从 MIDI 生成 WAV 文件。我还用声卡播放了 MIDI,并用声卡的记录捕获了它(或者它可能是用第二个声卡,我不记得了 - 很久以前)。 成功了! XD 我刚刚测试了一下,确实得到了 MIDI 播放的波形数据回调。 【参考方案1】:

所以是的!无论音频格式如何,都会捕获声波。

【讨论】:

以上是关于MIDI 文件播放一般是如何处理的?的主要内容,如果未能解决你的问题,请参考以下文章

注销哈希,它们是如何处理的?

MyBatis-Plus 使用这么方便,底层是如何处理的呢?

交换机ARP表满之后是如何处理的?

FRP在内存方面是如何处理的?

分析类加载的链接阶段-准备 属性是如何处理的

Lua 表在内存中是如何处理的?