我正在尝试在 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) 我有以下代码尝试加载声音库.我已经使用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) 我需要从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",但整个大/小端,签名/无符号和可变长度的东西使它太混乱了.