我无法更改 JSR-135 上的 MIDI 频道程序

Posted

技术标签:

【中文标题】我无法更改 JSR-135 上的 MIDI 频道程序【英文标题】:I can not change the midi channel program on JSR-135 【发布时间】:2013-05-28 01:27:29 【问题描述】:

我告诉他们我正在使用 MIDlet,但我无法更改任何乐器的 midi 通道。 我尝试使用.shortMidiEvent(0xC0 + channel, program, 0);setProgram(channel, -1, program) 没有结果。 在我的手机上是诺基亚X3-02 仪器换了不行,只有midlet 的模拟器。 这是代码片段

public final class Dmgcpu implements Runnable 
private Player player;
private static MIDIControl synth;

private void initSound() 
    try 

        player = Manager.createPlayer(Manager.MIDI_DEVICE_LOCATOR);
        player.prefetch();
        synth = (MIDIControl) player.getControl("javax.microedition.media.control.MIDIControl");
     catch (Exception ex) 
    

    synth.setProgram(0, -1, instSound_a);
    //synth.shortMidiEvent(0xC0, instSound_a, 0);

   //sound test
   synth.shortMidiEvent(0x90 + channel, note[i], volume * MASTER_VOLUME);

   thread_sleep(300);

   synth.shortMidiEvent(0x80 + channel, note[i], 0);


是您可以更改仪器,据我了解,您在此类情况下使用player 数组。我尝试并没有奏效。 祝你好运

【问题讨论】:

【参考方案1】:

媒体播放器对于 JavaME 来说总是很棘手。有些设备需要你 prefetch() ,而如果你这样做,其他设备会崩溃。有些人喜欢realize(),而另一些人则不喜欢。所以最好使用多个 try/catch 块与 prefetch() 和 implementation() 等。 您的 try 块可能由于 prefetch() 而失败。所以试试这个:

public final class Dmgcpu implements Runnable 
private Player player = null;
private static MIDIControl synth = null;

private void initSound() 
  try 
    player = Manager.createPlayer(Manager.MIDI_DEVICE_LOCATOR);
   catch (Exception e) 
  try 
    player.realize();
   catch (Exception e) 
  try 
    player.prefetch();
   catch (Exception e) 
  try 
    synth = (MIDIControl) player.getControl("javax.microedition.media.control.MIDIControl");
   catch (Exception ex) 

    if (synth!=null) 
    synth.setProgram(0, -1, instSound_a);

    //synth.shortMidiEvent(0xC0, instSound_a, 0);

    //sound test
    synth.shortMidiEvent(0x90 + channel, note[i], volume * MASTER_VOLUME);

    thread_sleep(300);

    synth.shortMidiEvent(0x80 + channel, note[i], 0);
  

有关媒体播放器的更多信息: http://indiegamemusic.com/help.php?id=1

【讨论】:

prefetch();手机崩溃

以上是关于我无法更改 JSR-135 上的 MIDI 频道程序的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Java MIDI 程序中更改乐器,InvalidMidiDataException:channel out of range

如何使用 pyPortMidi 或 pygame 发送 midi 控制更改消息 (CC)?

通过 MacOS 上的端口将 MIDI 数据发送到数码钢琴

如何在 CoreMidi 曲目中播放特定频道?

Discord Bot 错误:无法向刚启动的协程发送非无值

如何在 Android TV 上以编程方式更改电视频道