VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1159|回复: 5

java 怎么生成midi文件?急求高手解答!!!

[复制链接]

1

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2021-3-3 12:30:01 | 显示全部楼层 |阅读模式
我们多媒体的期末作业我选了一个midi的项目,要求给出midi文件的信息,然后还要生成一个midi文件。。。

我找了N多资料。。好像都没有编程实现生成midi文件的。。我晕死。。我个人又只有对java有基础。其他编程语言都不会。。。希望高人指点下。如何才能用java编程生成midi文件??java的sound midi的api我看过了。。但是还是不会用,不知道里面有没有可以生成midi的方法。。
回复

使用道具 举报

1

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2021-3-3 13:00:01 | 显示全部楼层
没有。。唉。。生成这个好像不容易。。

对了。我下到了一个据说是sun公司写的钢琴程序,可以生成,保存跟播放midi文件,我正在研究源代码。。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2021-3-3 13:15:01 | 显示全部楼层
使用 jfugue包,网上可以下载
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2021-3-3 13:30:01 | 显示全部楼层
钢琴程序?-.-
回复

使用道具 举报

1

主题

20

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2021-3-3 13:45:01 | 显示全部楼层
try this one:

import javax.sound.midi.*;

class Test
{
    public static void main(String[] args)
    {
        try
        {
            Sequencer sequencer = MidiSystem.getSequencer();
            sequencer.open();

            Sequence seq = new Sequence(Sequence.PPQ, 4);
            Track track = seq.createTrack();

            for (int i = 5; i < 61; i++)
            {
                track.add(makeEvent(144, 1, i, 100, i));
                track.add(makeEvent(128, 1, i, 100, i + 2));
            } // end loop

            sequencer.setSequence(seq);
            sequencer.setTempoInBPM(220);
            sequencer.start();

            quitProgram(sequencer);


        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    } // end main

    public static void quitProgram(Sequencer sequencer)
    {
        while(sequencer.isRunning())
        {
            System.out.println("isRunning");
        }

        System.exit(0);
    }

    public static MidiEvent makeEvent(int comd, int chan, int one, int two,
                                      int tick)
    {
        MidiEvent event = null;
        try
        {
            ShortMessage a = new ShortMessage();
            a.setMessage(comd, chan, one, two);
            event = new MidiEvent(a, tick);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return event;
    }

}
回复

使用道具 举报

1

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2021-3-3 14:00:01 | 显示全部楼层
thanks for your help,but I hava finished it. :),my teacher give me some code.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表