gpt4 book ai didi

Android - 使用 MIDI 文件播放 SoundFont

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:58 27 4
gpt4 key购买 nike

我有一个 midi 文件,我已经使用以下代码在 android 中使用 MediaPlayer 播放了该 midi 文件:

val mMediaPlayer = MediaPlayer.create(context, R.raw.test_ring_1)

mMediaPlayer?.start()

它默认用一种乐器演奏,比如钢琴,现在我想添加 soundfont (sf2/sf3) 文件来演奏不同乐器和混响效果的 midi 音符。

请指导实现预期结果的方法。

最佳答案

有两个库将用于使用 SoundFont 播放 midi 文件。

Midi Driver

只是一个用于在 Android 上播放 MIDI 音符的合成器。您可以将它与 USB/Bluetooth-MIDI 库一起使用来创建您的 MIDI 应用程序。

支持 SoundFont2 文件。

Android MIDI Library

这个库提供了一个接口(interface)来读取、操作和写入 MIDI 文件。支持“回放”作为实时事件调度系统。该库不包括实际的音频播放或设备接口(interface)。

初始化SF2-SoundBank

SF2Soundbank sf = new SF2Soundbank(getAssets().open("test.sf2"));
synth = new SoftSynthesizer();
synth.open();
synth.loadAllInstruments(sf);
synth.getChannels()[0].programChange(0);
synth.getChannels()[1].programChange(1);
recv = synth.getReceiver();

从 midi 文件播放 Midi 音符

MidiFile midiFile = new MidiFile(getAssets().open("test.mid"));

// Create a new MidiProcessor:
MidiProcessor processor = new MidiProcessor(midiFile);

// listen for all midi events:
processor.registerEventListener(new MidiEventListener() {
@Override
public void onStart(boolean fromBeginning) {

}

@Override
public void onEvent(MidiEvent event, long ms) {

if (event.getClass() == NoteOn.class) {

NoteOn noteOn = ((NoteOn) event);

try {
ShortMessage msg = new ShortMessage();
msg.setMessage(ShortMessage.NOTE_ON, channel, noteOn.getNoteValue(), noteOn.getVelocity());
recv.send(msg, ms);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
}

} else if (event.getClass() == NoteOff.class) {

NoteOff noteOff = ((NoteOff) event);

try {
ShortMessage msg = new ShortMessage();
msg.setMessage(ShortMessage.NOTE_ON, channel, noteOff.getNoteValue(), noteOff.getVelocity());
recv.send(msg, ms);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
}

}
}

@Override
public void onStop(boolean finished) {

}
}, MidiEvent.class);

// Start the processor:
processor.start();

定义 SF channel 的变量

private int channel = 0;

关于Android - 使用 MIDI 文件播放 SoundFont,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56541361/

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