Skip to content

Commit

Permalink
Added ability to switch emulator
Browse files Browse the repository at this point in the history
  • Loading branch information
Wohlstand committed Mar 3, 2019
1 parent e73b112 commit c5f0cfe
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 20 deletions.
1 change: 0 additions & 1 deletion ADLMIDI-Player/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -funwind-tables")
set(libADLMIDI_SHARED OFF)
set(libADLMIDI_STATIC ON)
set(WITH_CPP_EXTRAS OFF)
set(USE_NUKED_EMULATOR OFF) # For now is no way to toggle emulator from UI, use DosBox only
set(WITH_MIDIPLAY OFF)
set(WITH_VLC_PLUGIN OFF)
set(WITH_OLD_UTILS OFF)
Expand Down
10 changes: 10 additions & 0 deletions ADLMIDI-Player/src/main/cpp/native-lib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,16 @@ Java_ru_wohlsoft_adlmidiplayer_PlayerService_stringFromJNI(JNIEnv *env, jobject
return env->NewStringUTF(hello.c_str());
}

JNIEXPORT jint JNICALL
Java_ru_wohlsoft_adlmidiplayer_PlayerService_adl_1setEmulator(JNIEnv * /*env*/, jclass /*type*/,
jlong device, jint emulator)
{
pthread_mutex_lock(&g_lock);
jint ret = (jint)adl_switchEmulator(ADLDEV, (int)emulator);
pthread_mutex_unlock(&g_lock);
return ret;
}

JNIEXPORT jint JNICALL
Java_ru_wohlsoft_adlmidiplayer_PlayerService_adl_1setNumChips(JNIEnv *env, jobject /*instance*/, jlong device,
jint numCards) {
Expand Down
33 changes: 31 additions & 2 deletions ADLMIDI-Player/src/main/java/ru/wohlsoft/adlmidiplayer/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ public void onServiceDisconnected(ComponentName arg0) {
}
};

@SuppressLint("SetTextI18n")
private void initUiSetup()
{
if (m_bound) {
Expand Down Expand Up @@ -231,6 +230,36 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
});


/*
* Emulator model combo-box
*/
Spinner sEmulator = (Spinner) findViewById(R.id.emulatorType);
final String[] emulatorItems =
{
"Nuked OPL3 v1.8 (very accurate)",
"Nuked OPL3 v1.7 (very accurate)",
"DosBox OPL3 (accurate and fast)",
"Opal OPL3 (no rhythm-mode)",
"Java OPL3 (broken rhythm-mode)"
};

ArrayAdapter<String> adapterEMU = new ArrayAdapter<String>(
this, android.R.layout.simple_spinner_item, emulatorItems);
adapterEMU.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sEmulator.setAdapter(adapterEMU);
sEmulator.setSelection(m_service.getEmulator());

sEmulator.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
View itemSelected, int selectedItemPosition, long selectedId) {
if(m_bound)
m_service.setEmulator(selectedItemPosition);
}

public void onNothingSelected(AdapterView<?> parent) {
}
});

/*
* Volume model combo-box
*/
Expand Down Expand Up @@ -579,7 +608,7 @@ protected void onStop() {
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {

/***
/* **
* TODO: Rpleace this crap with properly made settings box
* (this one can't receive changed value for "input" EditText field)
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public class PlayerService extends Service {
// Default 1 for performance reasons
private int m_ADL_runAtPcmRate = 1;

private int m_ADL_emulator = 2; // 2 is DosBox
private int m_adl_numChips = 2;
private int m_ADL_num4opChannels = -1;
private int m_ADL_volumeModel = 0;
Expand Down Expand Up @@ -284,6 +285,7 @@ public void loadSetup(SharedPreferences setup)
m_ADL_softPanEnabled = setup.getBoolean("flagSoftPan", m_ADL_softPanEnabled > 0) ? 1 : 0;
m_ADL_runAtPcmRate = setup.getBoolean("flagRunAtPcmRate", m_ADL_runAtPcmRate > 0) ? 1 : 0;

m_ADL_emulator = setup.getInt("emulator", m_ADL_emulator);
m_adl_numChips = setup.getInt("numChips", m_adl_numChips);
m_ADL_num4opChannels = setup.getInt("num4opChannels", m_ADL_num4opChannels);
m_ADL_volumeModel = setup.getInt("volumeModel", m_ADL_volumeModel);
Expand Down Expand Up @@ -343,6 +345,7 @@ public void applySetup()
return;
}

adl_setEmulator(MIDIDevice, m_ADL_emulator);
adl_setNumChips(MIDIDevice, m_adl_numChips);
adl_setRunAtPcmRate(MIDIDevice, m_ADL_runAtPcmRate); // Reduces CPU usage, BUT, also reduces sounding accuracy
adl_setNumFourOpsChn(MIDIDevice, (m_ADL_num4opChannels >= 0) ? m_ADL_num4opChannels : -1); // -1 is "Auto"
Expand Down Expand Up @@ -486,6 +489,17 @@ public boolean getFullPanningStereo()
return m_ADL_softPanEnabled > 0;
}

public void setEmulator(int emul)
{
m_ADL_emulator = emul;
m_setup.edit().putInt("emulator", m_ADL_emulator).apply();
adl_setEmulator(MIDIDevice, m_ADL_emulator);
}
public int getEmulator()
{
return m_ADL_emulator;
}

public void setChipsCount(int chips)
{
m_adl_numChips = chips;
Expand Down Expand Up @@ -723,6 +737,8 @@ public boolean playerStop() {
*/
public static native void setGaining(double gaining);

public static native int adl_setEmulator(long device, int emulator);

// /* Sets number of emulated sound cards (from 1 to 100). Emulation of multiple sound cards exchanges polyphony limits*/
// extern int adl_setNumChips(struct ADL_MIDIPlayer*device, int numCards);
public static native int adl_setNumChips(long device, int numCards);
Expand Down
24 changes: 23 additions & 1 deletion ADLMIDI-Player/src/main/res/layout/activity_player.xml
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,36 @@
tools:text="@string/full_panning_stereo" />

<TextView
android:id="@+id/volumeRangesModelLabel"
android:id="@+id/emulatorTypeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/fullPanningStereo"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="@string/emulatorType"
tools:text="@string/emulatorType" />

<Spinner
android:id="@+id/emulatorType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/emulatorTypeLabel"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" />

<TextView
android:id="@+id/volumeRangesModelLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/emulatorType"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="@string/volumesModel"
tools:text="@string/volumesModel" />

Expand Down
5 changes: 1 addition & 4 deletions ADLMIDI-Player/src/main/res/values-en/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,8 @@
<string name="useCustom">Use custom</string>
<string name="bank_file_empty"><![CDATA[<Bank File>]]></string>
<string name="full_panning_stereo">Full-panning stereo</string>
<string name="sign_minus">-</string>
<string name="sign_plus">+</string>
<string name="no_files_loaded"><![CDATA[<No files loaded>]]></string>
<string name="gain_factor">Gain factor</string>
<string name="sign_plusplus">++</string>
<string name="sign_minusminus">--</string>
<string name="run_at_pcm_rate">Run at PCM Rate (Reduce CPU usage)</string>
<string name="emulatorType">OPL3 Emulator</string>
</resources>
5 changes: 1 addition & 4 deletions ADLMIDI-Player/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,8 @@
<string name="useCustom">Utiliser le choix perso</string>
<string name="bank_file_empty"><![CDATA[<Fichier Banque>]]></string>
<string name="full_panning_stereo">Panoramique stéréo étendue</string>
<string name="sign_minus">-</string>
<string name="sign_plus">+</string>
<string name="no_files_loaded"><![CDATA[<Aucun fichier chargé>]]></string>
<string name="gain_factor">Facteur de Gain</string>
<string name="sign_plusplus">++</string>
<string name="sign_minusminus">--</string>
<string name="run_at_pcm_rate">Calculer au taux PCM (charge processeur moindre)</string>
<string name="emulatorType">Émulateur OPL3</string>
</resources>
5 changes: 1 addition & 4 deletions ADLMIDI-Player/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,8 @@
<string name="useCustom">Вкл. свой банк</string>
<string name="bank_file_empty"><![CDATA[<Файл банка>]]></string>
<string name="full_panning_stereo">Полное стерео</string>
<string name="sign_minus">-</string>
<string name="sign_plus">+</string>
<string name="no_files_loaded"><![CDATA[<Нет загруженных файлов>]]></string>
<string name="gain_factor">Фактор усиления</string>
<string name="sign_plusplus">++</string>
<string name="sign_minusminus">--</string>
<string name="run_at_pcm_rate">Работа на PCM-частоте (Легче для ЦПУ)</string>
<string name="emulatorType">Эмулятор OPL3</string>
</resources>
9 changes: 5 additions & 4 deletions ADLMIDI-Player/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@
<string name="chooseBank">Choose custom bank</string>
<string name="useCustom">Use custom</string>
<string name="bank_file_empty"><![CDATA[<Bank File>]]></string>
<string name="sign_minus">-</string>
<string name="sign_plus">+</string>
<string name="sign_minus" translatable="false">-</string>
<string name="sign_plus" translatable="false">+</string>
<string name="full_panning_stereo">Full-panning stereo</string>
<string name="no_files_loaded"><![CDATA[<No files loaded>]]></string>
<string name="gain_factor">Gain factor</string>
<string name="sign_plusplus">++</string>
<string name="sign_minusminus">--</string>
<string name="sign_plusplus" translatable="false">++</string>
<string name="sign_minusminus" translatable="false">--</string>
<string name="run_at_pcm_rate">Run at PCM Rate (Reduce CPU usage)</string>
<string name="emulatorType">OPL3 Emulator</string>
</resources>

0 comments on commit c5f0cfe

Please sign in to comment.