标签: javax.sound.midi

Android 中的虚拟合成器(基于 jar) - 原生 jni?

我正在尝试在 Android 中加载和使用 java 的虚拟(软)合成器。我读到Gervill jar 将用于此目的。其他构建块是javax-sound作为 aar 文件存在于我的项目中(因为它不存在于 Android 的修剪 Java 包中)

Gradle 文件包含是

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.0"
    dataBinding {
        enabled = true
    }
    defaultConfig {
        applicationId "com.mmm.ttt"
        minSdkVersion 18
        targetSdkVersion 29
        multiDexEnabled true
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(path: ':javax-sound')
    implementation project(path: ':gervilljar')         // This is folder name at project …
Run Code Online (Sandbox Code Playgroud)

audio midi java-native-interface android javax.sound.midi

6
推荐指数
1
解决办法
550
查看次数

较新版本的JRE不加载soundbank但旧版本加载

我有以下代码尝试加载声音库.我已经使用JRE 1.6.03和1.6.43在Windows 7上测试了代码.旧版本的JRE(1.6.03)工作正常,但新版本引发异常.这是怎么回事?

public Main() {
    try {
        Synthesizer synth = MidiSystem.getSynthesizer();
        synth.open();
        BufferedInputStream soundBankStream = new BufferedInputStream(
                getClass().getClassLoader().getResourceAsStream(
                        "soundbank.gm"));
        synth.loadAllInstruments(MidiSystem.getSoundbank(soundBankStream));
    } catch (MidiUnavailableException e) {
        e.printStackTrace();
    } catch (InvalidMidiDataException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

.

F:\>java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-b05, mixed mode)

F:\>java -jar Test2.jar

F:\>"C:\Program Files\Java\jre6\bin\java.exe" -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit …
Run Code Online (Sandbox Code Playgroud)

java audio midi javax.sound.midi

5
推荐指数
1
解决办法
1107
查看次数

如何从MetaMessage.getData()返回的字节数组中获取整数值?

我需要从midi文件中获取速度值.我发现,set_tempo命令的值为0x51,所以我有这段代码:

    for (int i = 0; i < tracks[0].size(); i++) {
        MidiEvent event = tracks[0].get(i);
        MidiMessage message = event.getMessage();
        if (message instanceof MetaMessage) {
            MetaMessage mm = (MetaMessage) message;
            if(mm.getType()==SET_TEMPO){
                // now what?
                mm.getData();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但方法getData()返回一个字节数组!我怎样才能将它转换为普通的人形,又称整数?我已经读过它以这样的格式存储:"tt tt tt",但整个大/小端,签名/无符号和可变长度的东西使它太混乱了.

java int midi bytearray javax.sound.midi

1
推荐指数
1
解决办法
1015
查看次数