/[svn]/linuxsampler/trunk/src/engines/gig/Engine.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/gig/Engine.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1748 by persson, Sun Jun 22 14:46:46 2008 UTC revision 1762 by schoenebeck, Fri Aug 29 17:33:02 2008 UTC
# Line 953  namespace LinuxSampler { namespace gig { Line 953  namespace LinuxSampler { namespace gig {
953       *       *
954       *  @param pData - pointer to sysex data       *  @param pData - pointer to sysex data
955       *  @param Size  - lenght of sysex data (in bytes)       *  @param Size  - lenght of sysex data (in bytes)
956         *  @param pSender - the MIDI input port on which the SysEx message was
957         *                   received
958       */       */
959      void Engine::SendSysex(void* pData, uint Size) {      void Engine::SendSysex(void* pData, uint Size, MidiInputPort* pSender) {
960          Event event             = pEventGenerator->CreateEvent();          Event event             = pEventGenerator->CreateEvent();
961          event.Type              = Event::type_sysex;          event.Type              = Event::type_sysex;
962          event.Param.Sysex.Size  = Size;          event.Param.Sysex.Size  = Size;
963          event.pEngineChannel    = NULL; // as Engine global event          event.pEngineChannel    = NULL; // as Engine global event
964            event.pMidiInputPort    = pSender;
965          if (pEventQueue->write_space() > 0) {          if (pEventQueue->write_space() > 0) {
966              if (pSysexBuffer->write_space() >= Size) {              if (pSysexBuffer->write_space() >= Size) {
967                  // copy sysex data to input buffer                  // copy sysex data to input buffer
# Line 1901  namespace LinuxSampler { namespace gig { Line 1904  namespace LinuxSampler { namespace gig {
1904                  switch (sub_id1) {                  switch (sub_id1) {
1905                      case 0x04: // Device Control                      case 0x04: // Device Control
1906                          switch (sub_id2) {                          switch (sub_id2) {
1907                              case 0x01: // Master Volume                              case 0x01: { // Master Volume
1908                                  GLOBAL_VOLUME =                                  const double volume =
1909                                      double((uint(val_msb)<<7) | uint(val_lsb)) / 16383.0;                                      double((uint(val_msb)<<7) | uint(val_lsb)) / 16383.0;
1910                                    #if CONFIG_MASTER_VOLUME_SYSEX_BY_PORT
1911                                    // apply volume to all sampler channels that
1912                                    // are connected to the same MIDI input port
1913                                    // this sysex message arrived on
1914                                    for (int i = 0; i < engineChannels.size(); ++i) {
1915                                        EngineChannel* pEngineChannel = engineChannels[i];
1916                                        if (pEngineChannel->GetMidiInputPort() ==
1917                                            itSysexEvent->pMidiInputPort)
1918                                        {
1919                                            pEngineChannel->Volume(volume);
1920                                        }
1921                                    }
1922                                    #else
1923                                    // apply volume globally to the whole sampler
1924                                    GLOBAL_VOLUME = volume;
1925                                    #endif // CONFIG_MASTER_VOLUME_SYSEX_BY_PORT
1926                                  break;                                  break;
1927                                }
1928                          }                          }
1929                          break;                          break;
1930                  }                  }
# Line 1946  namespace LinuxSampler { namespace gig { Line 1966  namespace LinuxSampler { namespace gig {
1966                              dmsg(3,("\t\t\tNew scale applied.\n"));                              dmsg(3,("\t\t\tNew scale applied.\n"));
1967                              break;                              break;
1968                          }                          }
1969                            case 0x15: { // chromatic / drumkit mode
1970                                dmsg(3,("\t\tMIDI Instrument Map Switch\n"));
1971                                uint8_t part = addr[1] & 0x0f;
1972                                uint8_t map;
1973                                if (!reader.pop(&map)) goto free_sysex_data;
1974                                for (int i = 0; i < engineChannels.size(); ++i) {
1975                                    EngineChannel* pEngineChannel = engineChannels[i];
1976                                    if (
1977                                        (pEngineChannel->midiChannel == part ||
1978                                         pEngineChannel->midiChannel == midi_chan_all) &&
1979                                         pEngineChannel->GetMidiInputPort() == itSysexEvent->pMidiInputPort
1980                                    ) {
1981                                        try {
1982                                            pEngineChannel->SetMidiInstrumentMap(map);
1983                                        } catch (Exception e) {
1984                                            dmsg(2,("\t\t\tCould not apply MIDI instrument map %d to part %d: %s\n", map, part, e.Message().c_str()));
1985                                            goto free_sysex_data;
1986                                        } catch (...) {
1987                                            dmsg(2,("\t\t\tCould not apply MIDI instrument map %d to part %d (unknown exception)\n", map, part));
1988                                            goto free_sysex_data;
1989                                        }
1990                                    }
1991                                }
1992                                dmsg(3,("\t\t\tApplied MIDI instrument map %d to part %d.\n", map, part));
1993                                break;
1994                            }
1995                      }                      }
1996                  }                  }
1997                  else if (addr[0] == 0x40 && (addr[1] & 0xf0) == 0x20) { // Part Parameters (2)                  else if (addr[0] == 0x40 && (addr[1] & 0xf0) == 0x20) { // Part Parameters (2)
# Line 2088  namespace LinuxSampler { namespace gig { Line 2134  namespace LinuxSampler { namespace gig {
2134      }      }
2135    
2136      String Engine::Version() {      String Engine::Version() {
2137          String s = "$Revision: 1.93 $";          String s = "$Revision: 1.96 $";
2138          return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword          return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword
2139      }      }
2140    

Legend:
Removed from v.1748  
changed lines
  Added in v.1762

  ViewVC Help
Powered by ViewVC