- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 midi 文件,我已经使用以下代码在 android 中使用 MediaPlayer 播放了该 midi 文件:
val mMediaPlayer = MediaPlayer.create(context, R.raw.test_ring_1)
mMediaPlayer?.start()
它默认用一种乐器演奏,比如钢琴,现在我想添加 soundfont (sf2/sf3) 文件来演奏不同乐器和混响效果的 midi 音符。
请指导实现预期结果的方法。
最佳答案
有两个库将用于使用 SoundFont 播放 midi 文件。
只是一个用于在 Android 上播放 MIDI 音符的合成器。您可以将它与 USB/Bluetooth-MIDI 库一起使用来创建您的 MIDI 应用程序。
支持 SoundFont2 文件。
这个库提供了一个接口(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/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
我无法弄清楚如何在 Android 上使用声音字体(具有 .sf2 扩展名)。我查看了 JET Creator,但简单地播放声音字体似乎真的很复杂。我不需要 JET 提供的交互式音乐,我只需要能够在必
我刚开始使用 midi.js,到目前为止它看起来很整洁。我目前正在一次加载我所有的声音字体,如下所示: MIDI.loadPlugin({ soundfontUrl: "js/MIDI
现在,我成功地创建了一个 MIKMIDISequence 序列。但是,我找不到如何将声音字体与该序列联系起来的方法。我的问题是,如何为 MIKMIDISequence 分配音色? 最佳答案 与其在序列
我有一个 midi 文件,我已经使用以下代码在 android 中使用 MediaPlayer 播放了该 midi 文件: val mMediaPlayer = MediaPlayer.create(
可以在 iOS 上使用 AudioUnits 创建加载和播放 soundfont(或 SF2)文件的采样器。这是一个非常棒的功能。问题是我没有看到任何用于检查 soundfont 的界面以查看:a)
有没有一种简单的方法可以将声音字体文件转换为 .wav每个音符分开的文件(或任何常见的音乐格式,真的)? 假设我有一个声音字体 a.sfz ;我想从中得到一个文件列表 A0.wav , A#0.wav
我有一个应用成功地使用 AUSamplerGraph 来播放 soundfont 声音。 主音是吉他。 如果在同一根弦上弹奏“较低”的音符,我会停止播放前一个音符。默认行为就像拨弦一样,它会响起直
我正在尝试创建一个简单的程序,使用 Soundfont 中的预设播放一些音符。为此,我尝试使用 NAudio .到目前为止,我已经能够成功打开一个 SoundFont,并获取所有乐器、预设等的名称:
有没有办法让 android 通过使用 FluidSynth 使用 SoundFont 文件播放声音?我一直在看jOrgan但是源代码似乎有点......至少可以说是难以抗拒。 问题是 java 声音
我有一个应用程序可以通过 SONiVOX EAS 库播放 MIDI 文件。是否可以将我自己的 DLS 或 SoundFont 波表加载到播放器中,并让库使用这些声音进行 MIDI 播放? 最佳答案 好
最近几天,我一直在尝试在 android 应用程序 中使用 MIDI 和 soundfont 文件生成 wav 文件。为此,我尝试构建 fluidsynth以此目的。我已经能够成功构建它,但问题是此构
我是一名优秀的程序员,十分优秀!