fluid_event_priv.h
上传用户:tjmskj2
上传日期:2020-08-17
资源大小:577k
文件大小:2k
源码类别:

midi

开发平台:

C/C++

  1. /* FluidSynth - A Software Synthesizer
  2.  *
  3.  * Copyright (C) 2003  Peter Hanappe and others.
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Library General Public License
  7.  * as published by the Free Software Foundation; either version 2 of
  8.  * the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Library General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Library General Public
  16.  * License along with this library; if not, write to the Free
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.  * 02111-1307, USA
  19.  */
  20. #ifndef _FLUID_EVENT_PRIV_H
  21. #define _FLUID_EVENT_PRIV_H
  22. #include "fluidsynth.h"
  23. #include "fluid_sys.h"
  24. /* Private data for event */
  25. /* ?? should be optimized in size, using unions */
  26. struct _fluid_event_t {
  27. unsigned int time;
  28. int type;
  29. short src;
  30. short dest;
  31. int channel;
  32. short key;
  33. short vel;
  34. short control;
  35. short value;
  36. short id; //?? unused ?
  37. int pitch;
  38. unsigned int duration;
  39. void* data;
  40. };
  41. unsigned int fluid_event_get_time(fluid_event_t* evt);
  42. void fluid_event_set_time(fluid_event_t* evt, unsigned int time);
  43. void fluid_event_clear(fluid_event_t* evt);
  44. /* private data for sorter + heap */
  45. enum fluid_evt_entry_type {
  46.   FLUID_EVT_ENTRY_INSERT = 0,
  47.   FLUID_EVT_ENTRY_REMOVE
  48. };
  49. typedef struct _fluid_evt_entry fluid_evt_entry;
  50. struct _fluid_evt_entry {
  51. fluid_evt_entry *next;
  52. short entryType;
  53. fluid_event_t evt;
  54. };
  55. #define HEAP_WITH_DYNALLOC 1
  56. /* #undef HEAP_WITH_DYNALLOC */
  57. typedef struct _fluid_evt_heap_t {
  58. #ifdef HEAP_WITH_DYNALLOC
  59.   fluid_evt_entry* freelist;
  60.   fluid_mutex_t mutex;
  61. #else
  62. fluid_evt_entry* head;
  63. fluid_evt_entry* tail;
  64. fluid_evt_entry pool;
  65. #endif
  66. } fluid_evt_heap_t;
  67. fluid_evt_heap_t* _fluid_evt_heap_init(int nbEvents);
  68. void _fluid_evt_heap_free(fluid_evt_heap_t* heap);
  69. fluid_evt_entry* _fluid_seq_heap_get_free(fluid_evt_heap_t* heap);
  70. void _fluid_seq_heap_set_free(fluid_evt_heap_t* heap, fluid_evt_entry* evt);
  71. #endif /* _FLUID_EVENT_PRIV_H */