aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2018-05-14 03:45:19 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2018-05-14 03:45:19 +0300
commit372f2c17e15e846def959f34f67c61f679ee7bc4 (patch)
tree4c1014f3853edbff1af2d2992d66477be0b00f0f
parent802e07b3c276d1e535556146c9201dea29051e3e (diff)
parent74929e3fb33926cfe29fa607726cbd3fec8abaae (diff)
downloadlibADLMIDI-372f2c17e15e846def959f34f67c61f679ee7bc4.tar.gz
libADLMIDI-372f2c17e15e846def959f34f67c61f679ee7bc4.tar.bz2
libADLMIDI-372f2c17e15e846def959f34f67c61f679ee7bc4.zip
Merge branch 'master' of github.com:Wohlstand/libADLMIDI
-rw-r--r--CMakeLists.txt30
-rw-r--r--README.md3
-rw-r--r--src/adlmidi_midiplay.cpp9
-rw-r--r--src/adlmidi_private.hpp10
4 files changed, 37 insertions, 15 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bda3e0b..d6dbd01 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -139,12 +139,16 @@ if(WITH_EMBEDDED_BANKS)
if(NOT MSVC)
target_link_libraries(gen_adldata pthread m stdc++)
endif()
- if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
- CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
- if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.2)
- message("Turned on C++11 on GCC/CLang/Intel")
- target_compile_options(gen_adldata PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-std=c++11>)
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MinGW" OR
+ CMAKE_COMPILER_IS_MINGW)
+ if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 3.2)
+ message("Turned on C++11 on GCC/CLang/Intel/MinGW")
+ set_target_properties(gen_adldata PROPERTIES
+ CXX_STANDARD 11
+ CXX_STANDARD_REQUIRED YES)
endif()
else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
message("Turned on C++11 on MSVC")
@@ -373,12 +377,16 @@ if(WITH_ADLMIDI2)
message(FATAL_ERROR "ADLMIDI2 Requires C++ Extras. Please enable WITH_CPP_EXTRAS option!")
endif()
- if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
- CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
- if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.2)
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MinGW" OR
+ CMAKE_COMPILER_IS_MINGW)
+ if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 3.2)
message("Turned on C++11 on GCC/CLang/Intel")
- target_compile_options(adlmidi2 PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-std=c++11>)
+ set_target_properties(gen_adldata PROPERTIES
+ CXX_STANDARD 11
+ CXX_STANDARD_REQUIRED YES)
endif()
else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
message("Turned on C++11 on MSVC")
diff --git a/README.md b/README.md
index da79b39..81d3cbc 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,8 @@ Library is based on the ADLMIDI, a MIDI player for Linux and Windows with OPL3 e
[http://iki.fi/bisqwit/source/adlmidi.html](http://iki.fi/bisqwit/source/adlmidi.html)
-[![Build Status](https://semaphoreci.com/api/v1/wohlstand/libadlmidi/branches/master/badge.svg)](https://semaphoreci.com/wohlstand/libadlmidi)
+* Semaphore-CI: [![Build Status](https://semaphoreci.com/api/v1/wohlstand/libadlmidi/branches/master/shields_badge.svg)](https://semaphoreci.com/wohlstand/libadlmidi)
+* AppVeyor CI: [![Build status](https://ci.appveyor.com/api/projects/status/bfhwdsm13s17rn49?svg=true)](https://ci.appveyor.com/project/Wohlstand/libadlmidi)
# Differences with original tool
* Reverb code has been removed.
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index 7c40fa0..6bc2366 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -1393,7 +1393,7 @@ void MIDIplay::realTime_PatchChange(uint8_t channel, uint8_t patch)
void MIDIplay::realTime_PitchBend(uint8_t channel, uint16_t pitch)
{
channel = channel % 16;
- Ch[channel].bend = (uint32_t(pitch) - 8192) * Ch[channel].bendsense;
+ Ch[channel].bend = (int(pitch) - 8192) * Ch[channel].bendsense;
NoteUpdate_All(channel, Upd_Pitch);
}
@@ -2358,7 +2358,12 @@ void MIDIplay::SetRPN(unsigned MidCh, unsigned value, bool MSB)
switch(addr + nrpn * 0x10000 + MSB * 0x20000)
{
case 0x0000 + 0*0x10000 + 1*0x20000: // Pitch-bender sensitivity
- Ch[MidCh].bendsense = value / 8192.0;
+ Ch[MidCh].bendsense_msb = value;
+ Ch[MidCh].updateBendSensitivity();
+ break;
+ case 0x0000 + 0*0x10000 + 0*0x20000: // Pitch-bender sensitivity LSB
+ Ch[MidCh].bendsense_lsb = value;
+ Ch[MidCh].updateBendSensitivity();
break;
case 0x0108 + 1*0x10000 + 1*0x20000: // Vibrato speed
if(value == 64) Ch[MidCh].vibspeed = 1.0;
diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp
index d66daf4..65cb4bc 100644
--- a/src/adlmidi_private.hpp
+++ b/src/adlmidi_private.hpp
@@ -617,6 +617,7 @@ public:
uint8_t panning, vibrato, sustain;
char ____padding[6];
double bend, bendsense;
+ int bendsense_lsb, bendsense_msb;
double vibpos, vibspeed, vibdepth;
int64_t vibdelay;
uint8_t lastlrpn, lastmrpn;
@@ -809,7 +810,9 @@ public:
void resetAllControllers()
{
bend = 0.0;
- bendsense = 2 / 8192.0;
+ bendsense_msb = 2;
+ bendsense_lsb = 0;
+ updateBendSensitivity();
volume = 100;
expression = 127;
sustain = 0;
@@ -821,6 +824,11 @@ public:
portamento = 0;
brightness = 127;
}
+ void updateBendSensitivity()
+ {
+ int cent = bendsense_msb * 100 + bendsense_lsb;
+ bendsense = cent * (0.01 / 8192.0);
+ }
MIDIchannel()
{
activenotes_clear();