Java Read and Play MIDI file using public static void midi(Score score) 方法

Posted

技术标签:

【中文标题】Java Read and Play MIDI file using public static void midi(Score score) 方法【英文标题】:Java Read and Play MIDI file using public static void midi(Score score) method 【发布时间】:2021-04-11 18:45:24 【问题描述】:

如何创建一个程序来读取和播放 MIDI 文件?我需要找到一种在 Class Play 中播放文件的方法,以及一种将 midi 文件加载到 Class Read 中的分数并将分数变量传递给 View.sketch() 的方法。我正在使用这个网站来查找类 Read 和类 Play http://www.explodingart.com/jmusic/jmDocumentation/index.html 下的方法。 这是我目前所拥有的。

import jm.JMC;
import jm.music.data.*;
import jm.util.*;

public class Main 
     public static void main ( String [] args )
        public static void midi(Score score)
           Score score = new Score("my music score ");// Name your score
           View.sketch(score);
        

    

//1272439.1.mid 

这是我的文件名,但我不知道如何将它包含在我的代码中。

【问题讨论】:

【参考方案1】:

你可以试试这样的:

import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import jm.music.data.Score;
import jm.util.Play;
import jm.util.Read;
import jm.util.View;

public class Test 
    public static void main(String[] args) throws Exception 
        File f = new File("e:\\tb.mid");
        
        if(!f.exists()) 
            System.out.println("File " + f.getAbsolutePath() + " doesn't exist.");
            System.exit(-1);
        
        Score score =  Read.midiOrJmWithNoMessaging(f);
        score.setTitle("my music score ");// Name your score
        
        View.sketch(score);
        
        //play whole file
        //Play.midi(score,false);
        
        //to play only for 5 seconds
        ExecutorService es = Executors.newSingleThreadExecutor();
        es.submit(()-> Play.midi(score, false));
        //stop playing after 5 seconds
        Thread.sleep(5000);  
        System.out.println("stopping");
        Play.stopMidi(); //stop playing midi
        Play.closeAll(); //close all resources
        
        //uncomment this if you want to exit the program after playing
        //System.exit(0); 
    

输出:

Convert SMF to JM
jMusic Play: Playing score my music score  using JavaSound General MIDI soundbank.
jMusic Play: Waiting for the end of my music score .
stopping
jMusic Play: Stopping JavaSound MIDI playback of 0
jMusic MidiSynth: Stopped JavaSound MIDI playback

注释和取消注释部分代码以获得更好的理解。

【讨论】:

以上是关于Java Read and Play MIDI file using public static void midi(Score score) 方法的主要内容,如果未能解决你的问题,请参考以下文章

在 android (java) 中启用/禁用 MIDI 通道

Arduino Uno:从 Cubase 捕获 MIDI 以在按下 PLAY、STOP、RECORD 时打开 RECORDING 标志

pygame.midi.Input.read 不能是字符串

Music21:获取音符的曲目索引

仅通过Play Json进行验证

Core MIDI and Friends