- Add Layer support,
- Add inital sample load, - Improve XML parsing functions, - No GFX and no Sound!
This commit is contained in:
parent
1218622bc6
commit
bb02d97272
230
drummer.h
230
drummer.h
@ -12,16 +12,22 @@
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <libgen.h>
|
||||
#include <glob.h>
|
||||
|
||||
#include <node.h>
|
||||
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/xpath.h>
|
||||
#include <libxml/xpathInternals.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <node.h>
|
||||
#include <sndfile.h>
|
||||
#include <samplerate.h>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -42,11 +48,16 @@ typedef short DRT_Boolean;
|
||||
#define DRD_MAX(A,B) (((A) < (B)) ? (B) : (A))
|
||||
#define DRD_MIN(A,B) (((A) > (B)) ? (B) : (A))
|
||||
|
||||
#define NDD_CMD_INDEX0_PRINT ( NDT_Command) 65
|
||||
#define NDD_CMD_INDEX1_PRINT ( NDT_Command) 66
|
||||
#define NDD_CMD_STATS_GET ( NDT_Command) 65
|
||||
#define NDD_CMD_SAMPLE_LOAD ( NDT_Command) 66
|
||||
#define NDD_CMD_SAMPLE_UNLOAD ( NDT_Command) 67
|
||||
#define NDD_CMD_INDEX0_PRINT ( NDT_Command) 68
|
||||
#define NDD_CMD_INDEX1_PRINT ( NDT_Command) 69
|
||||
|
||||
#define NAME_LEN (short) 256
|
||||
#define NAME_SIZE (NAME_LEN + 1)
|
||||
#define DIRNAME_LEN (short) 1024
|
||||
#define DIRNAME_SIZE (DIRNAME_LEN)
|
||||
#define FILENAME_LEN (short) 1024
|
||||
#define FILENAME_SIZE (FILENAME_LEN)
|
||||
#define DESC_LEN (short) 2048
|
||||
@ -77,7 +88,27 @@ typedef short DRT_Status;
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Kit_DS Indexes */
|
||||
/* Layer_DS Indexes */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#define DRD_LAYER_DS_INDEX_NB (short)2
|
||||
|
||||
static NDT_Index_Type DRG_Layer_DS_Index_Tab_Initial[DRD_LAYER_DS_INDEX_NB] =
|
||||
{
|
||||
(NDD_INDEX_STATUS_OPENED | NDD_INDEX_TYPE_LIST | NDD_INDEX_SUBTYPE_SORTED),
|
||||
(NDD_INDEX_STATUS_OPENED | NDD_INDEX_TYPE_LIST | NDD_INDEX_SUBTYPE_SORTED)
|
||||
};
|
||||
|
||||
static NDT_Index_Type DRG_Layer_DS_Index_Tab_Final[DRD_LAYER_DS_INDEX_NB] =
|
||||
{
|
||||
(NDD_INDEX_STATUS_OPENED | NDD_INDEX_TYPE_TREE | NDD_INDEX_SUBTYPE_BALANCED),
|
||||
(NDD_INDEX_STATUS_OPENED | NDD_INDEX_TYPE_TREE | NDD_INDEX_SUBTYPE_BALANCED)
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Instrument_DS Indexes */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#define DRD_INSTRUMENT_DS_INDEX_NB (short)2
|
||||
@ -126,6 +157,7 @@ static NDT_Index_Type DRG_Kit_DS_Index_Tab_Final[DRD_KIT_DS_INDEX_NB] =
|
||||
#define TAG(A) STR(A)
|
||||
|
||||
#define XML_XPATH_ELEMENT(A) *[local-name()=(A)]
|
||||
#define XML_SLASH /
|
||||
|
||||
#define XML_XPATH_DRUMKIT_BASE_TAG XML_XPATH_ELEMENT('drumkit_info')
|
||||
#define XML_XPATH_DRUMKIT_NAME_TAG XML_XPATH_ELEMENT('name')
|
||||
@ -133,35 +165,77 @@ static NDT_Index_Type DRG_Kit_DS_Index_Tab_Final[DRD_KIT_DS_INDEX_NB] =
|
||||
#define XML_XPATH_DRUMKIT_INSTRUMENTLIST_TAG XML_XPATH_ELEMENT('instrumentList')
|
||||
#define XML_XPATH_DRUMKIT_INSTRUMENT_TAG XML_XPATH_ELEMENT('instrument')
|
||||
#define XML_XPATH_DRUMKIT_ID_TAG XML_XPATH_ELEMENT('id')
|
||||
#define XML_XPATH_DRUMKIT_GAIN_TAG XML_XPATH_ELEMENT('gain')
|
||||
#define XML_XPATH_DRUMKIT_PAN_LEFT_TAG XML_XPATH_ELEMENT('pan_L')
|
||||
#define XML_XPATH_DRUMKIT_PAN_RIGHT_TAG XML_XPATH_ELEMENT('pan_R')
|
||||
#define XML_XPATH_DRUMKIT_INSTRUMENTCOMPONENT_TAG XML_XPATH_ELEMENT('instrumentComponent')
|
||||
#define XML_XPATH_DRUMKIT_LAYER_TAG XML_XPATH_ELEMENT('layer')
|
||||
#define XML_XPATH_DRUMKIT_FILENAME_TAG XML_XPATH_ELEMENT('filename')
|
||||
#define XML_XPATH_DRUMKIT_MIN_TAG XML_XPATH_ELEMENT('min')
|
||||
#define XML_XPATH_DRUMKIT_MAX_TAG XML_XPATH_ELEMENT('max')
|
||||
#define XML_XPATH_DRUMKIT_PITCH_TAG XML_XPATH_ELEMENT('pitch')
|
||||
|
||||
#define XML_XPATH_DRUMKIT_BASE_STR TAG(/XML_XPATH_DRUMKIT_BASE_TAG)
|
||||
#define XML_XPATH_DRUMKIT_ID_STR TAG(/XML_XPATH_DRUMKIT_ID_TAG)
|
||||
#define XML_XPATH_DRUMKIT_NAME_STR TAG(/XML_XPATH_DRUMKIT_NAME_TAG)
|
||||
#define XML_XPATH_DRUMKIT_LAYER_FILENAME_STR TAG(/XML_XPATH_DRUMKIT_INSTRUMENTCOMPONENT_TAG/XML_XPATH_DRUMKIT_LAYER_TAG[1]/XML_XPATH_DRUMKIT_FILENAME_TAG)
|
||||
#define XML_XPATH_DRUMKIT_INFO_STR TAG(/XML_XPATH_DRUMKIT_INFO_TAG)
|
||||
#define XML_XPATH_DRUMKIT_ID_STR TAG(/XML_XPATH_DRUMKIT_ID_TAG)
|
||||
#define XML_XPATH_DRUMKIT_GAIN_STR TAG(/XML_XPATH_DRUMKIT_GAIN_TAG)
|
||||
#define XML_XPATH_DRUMKIT_PAN_LEFT_STR TAG(/XML_XPATH_DRUMKIT_PAN_LEFT_TAG)
|
||||
#define XML_XPATH_DRUMKIT_PAN_RIGHT_STR TAG(/XML_XPATH_DRUMKIT_PAN_RIGHT_TAG)
|
||||
#define XML_XPATH_DRUMKIT_FILENAME_STR TAG(/XML_XPATH_DRUMKIT_FILENAME_TAG)
|
||||
#define XML_XPATH_DRUMKIT_MIN_STR TAG(/XML_XPATH_DRUMKIT_MIN_TAG)
|
||||
#define XML_XPATH_DRUMKIT_MAX_STR TAG(/XML_XPATH_DRUMKIT_MAX_TAG)
|
||||
#define XML_XPATH_DRUMKIT_PITCH_STR TAG(/XML_XPATH_DRUMKIT_PITCH_TAG)
|
||||
|
||||
#define XML_XPATH_DRUMKIT_KIT_NAME_FULL TAG(/XML_XPATH_DRUMKIT_BASE_TAG/XML_XPATH_DRUMKIT_NAME_TAG)
|
||||
#define XML_XPATH_DRUMKIT_KIT_INFO_FULL TAG(/XML_XPATH_DRUMKIT_BASE_TAG/XML_XPATH_DRUMKIT_INFO_TAG)
|
||||
#define XML_XPATH_DRUMKIT_INSTRUMENT_FULL TAG(/XML_XPATH_DRUMKIT_BASE_TAG/XML_XPATH_DRUMKIT_INSTRUMENTLIST_TAG/XML_XPATH_DRUMKIT_INSTRUMENT_TAG[%i])
|
||||
#define XML_XPATH_DRUMKIT_LAYER_FULL2 TAG(/XML_XPATH_DRUMKIT_BASE_TAG/XML_XPATH_DRUMKIT_INSTRUMENTLIST_TAG/XML_XPATH_DRUMKIT_INSTRUMENT_TAG[%i]/XML_XPATH_DRUMKIT_INSTRUMENTCOMPONENT_TAG/XML_XPATH_DRUMKIT_LAYER_TAG[%i])
|
||||
#define XML_XPATH_DRUMKIT_LAYER_FULL TAG(/XML_XPATH_DRUMKIT_BASE_TAG/XML_XPATH_DRUMKIT_INSTRUMENTLIST_TAG/XML_XPATH_DRUMKIT_INSTRUMENT_TAG[%i]XML_SLASH/XML_XPATH_DRUMKIT_LAYER_TAG[%i])
|
||||
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* LibSamplerate */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
// Quality of conversion for libsamplerate.
|
||||
// See http://www.mega-nerd.com/SRC/api_misc.html#Converters
|
||||
// for info about availble qualities
|
||||
#define RATE_CONV_QUALITY SRC_SINC_MEDIUM_QUALITY
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* TypeDefs */
|
||||
/* Layer / Instrument / Kit */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
typedef struct DRT_Layer
|
||||
{
|
||||
short Id;
|
||||
char FileName[ FILENAME_SIZE];
|
||||
float *Sample_Ptr;
|
||||
long Sample_Size;
|
||||
SF_INFO *SF_Info_Ptr;
|
||||
double Min;
|
||||
double Max;
|
||||
double Gain;
|
||||
double Pitch;
|
||||
} DRT_Layer;
|
||||
|
||||
|
||||
|
||||
typedef struct DRT_Instrument
|
||||
{
|
||||
short Id;
|
||||
char Name[ NAME_SIZE];
|
||||
char FileName[ FILENAME_SIZE];
|
||||
double Gain;
|
||||
char *Sample_Ptr;
|
||||
long Sample_Size;
|
||||
double Pan_Left;
|
||||
double Pan_Right;
|
||||
NDT_Root *Layer_DS_Ptr;
|
||||
} DRT_Instrument;
|
||||
|
||||
|
||||
@ -171,7 +245,7 @@ typedef struct DRT_Kit
|
||||
short Id;
|
||||
char Name[ NAME_SIZE];
|
||||
char Desc[ DESC_SIZE];
|
||||
char FileName[ FILENAME_SIZE];
|
||||
char DirName[ DIRNAME_SIZE];
|
||||
NDT_Root *Instrument_DS_Ptr;
|
||||
} DRT_Kit;
|
||||
|
||||
@ -187,12 +261,67 @@ typedef struct DRT_Library
|
||||
typedef struct DRT_Base
|
||||
{
|
||||
NDT_Root *Kit_DS_Ptr;
|
||||
double SampleRate;
|
||||
} DRT_Base;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* XML_Query */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
#define XML_QUERY_VALUE_UNKNOWN (short) 0
|
||||
#define XML_QUERY_VALUE_STRING (short) 1
|
||||
#define XML_QUERY_VALUE_INT (short) 2
|
||||
#define XML_QUERY_VALUE_LONG (short) 3
|
||||
#define XML_QUERY_VALUE_LONGLONG (short) 4
|
||||
#define XML_QUERY_VALUE_FLOAT (short) 5
|
||||
#define XML_QUERY_VALUE_DOUBLE (short) 6
|
||||
|
||||
typedef struct DRT_XML_Query
|
||||
{
|
||||
char *Query_Name;
|
||||
char *XPath_Query;
|
||||
short Value_Type;
|
||||
long Value_Offset;
|
||||
short Value_Len;
|
||||
} DRT_XML_Query;
|
||||
|
||||
|
||||
|
||||
DRT_XML_Query DRG_XML_Query_Tab_Layer[] =
|
||||
{
|
||||
{ "File Name", XML_XPATH_DRUMKIT_FILENAME_STR, XML_QUERY_VALUE_STRING, offsetof( DRT_Layer, FileName), FILENAME_LEN },
|
||||
{ "Min", XML_XPATH_DRUMKIT_MIN_STR, XML_QUERY_VALUE_DOUBLE, offsetof( DRT_Layer, Min), 0 },
|
||||
{ "Max", XML_XPATH_DRUMKIT_MAX_STR, XML_QUERY_VALUE_DOUBLE, offsetof( DRT_Layer, Max), 0 },
|
||||
{ "Gain", XML_XPATH_DRUMKIT_GAIN_STR, XML_QUERY_VALUE_DOUBLE, offsetof( DRT_Layer, Gain), 0 },
|
||||
{ "Pitch", XML_XPATH_DRUMKIT_PITCH_STR, XML_QUERY_VALUE_DOUBLE, offsetof( DRT_Layer, Pitch), 0 },
|
||||
{ NULL, NULL, XML_QUERY_VALUE_UNKNOWN, 0, 0 }
|
||||
};
|
||||
|
||||
DRT_XML_Query DRG_XML_Query_Tab_Instrument[] =
|
||||
{
|
||||
{ "Id", XML_XPATH_DRUMKIT_ID_STR, XML_QUERY_VALUE_LONG, offsetof( DRT_Instrument, Id), 0 },
|
||||
{ "Name", XML_XPATH_DRUMKIT_NAME_STR, XML_QUERY_VALUE_STRING, offsetof( DRT_Instrument, Name), NAME_LEN },
|
||||
{ "Gain", XML_XPATH_DRUMKIT_GAIN_STR, XML_QUERY_VALUE_DOUBLE, offsetof( DRT_Instrument, Gain), 0 },
|
||||
{ "Pan_Left", XML_XPATH_DRUMKIT_PAN_LEFT_STR, XML_QUERY_VALUE_DOUBLE, offsetof( DRT_Instrument, Pan_Left), 0 },
|
||||
{ "Pan_Right", XML_XPATH_DRUMKIT_PAN_RIGHT_STR, XML_QUERY_VALUE_DOUBLE, offsetof( DRT_Instrument, Pan_Right), 0 },
|
||||
{ NULL, NULL, XML_QUERY_VALUE_UNKNOWN, 0, 0 }
|
||||
};
|
||||
|
||||
DRT_XML_Query DRG_XML_Query_Tab_Kit[] =
|
||||
{
|
||||
{ "File", XML_XPATH_DRUMKIT_NAME_STR, XML_QUERY_VALUE_STRING, offsetof( DRT_Kit, Name), NAME_LEN },
|
||||
{ "Desc", XML_XPATH_DRUMKIT_INFO_STR, XML_QUERY_VALUE_STRING, offsetof( DRT_Kit, Desc), DESC_LEN },
|
||||
{ NULL, NULL, XML_QUERY_VALUE_UNKNOWN, 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Prototypes */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
@ -201,16 +330,49 @@ typedef struct DRT_Base
|
||||
/* DS Managers */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
NDT_Status DR_Layer_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
|
||||
NDT_Status DR_Instrument_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
|
||||
NDT_Status DR_Kit_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_Layer_Add */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Layer_Add( DRT_Layer **, NDT_Root *, DRT_Layer *);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_Layer_Sample_Load */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Layer_Sample_Load( DRT_Layer *, DRT_Kit *, double);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_Layer_Sample_UnLoad */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Layer_Sample_UnLoad( DRT_Layer *);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_Layer_Dump */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Layer_Dump( DRT_Layer *, long);
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* DR_Instrument_Add */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Instrument_Add( DRT_Instrument **, NDT_Root *, char *, char *, double, char *, long);
|
||||
DRT_Status DR_Instrument_Add( DRT_Instrument **, NDT_Root *, DRT_Instrument *);
|
||||
|
||||
|
||||
|
||||
@ -226,7 +388,15 @@ DRT_Status DR_Instrument_Dump( DRT_Instrument *, long);
|
||||
/* DR_Kit_Add */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Kit_Add( DRT_Kit **, NDT_Root *, char *, char *, char *);
|
||||
DRT_Status DR_Kit_Add( DRT_Kit **, NDT_Root *, DRT_Kit *);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_Kit_Sample_Load */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Kit_Sample_Load( DRT_Kit *, double);
|
||||
|
||||
|
||||
|
||||
@ -238,6 +408,38 @@ DRT_Status DR_Kit_Dump( DRT_Kit *, long);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_XML_Node_Exist */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_XML_Node_Exist( xmlDocPtr, xmlXPathContextPtr, char *);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_XML_Query_Tab_Exec */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_XML_Query_Tab_Exec( void *, xmlDocPtr, xmlXPathContextPtr, char *, DRT_XML_Query *);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_XML_Value_Get */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_XML_Value_Get( char *, long, xmlDocPtr, xmlXPathContextPtr, char *, char *);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* DR_Kit_Load */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
|
||||
DRT_Status DR_Kit_Load( DRT_Base *, char *);
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* DR_Kits_Load */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
2
go.sh
2
go.sh
@ -2,5 +2,5 @@ gcc -g -c -I . -o libnode.o libnode.c
|
||||
|
||||
#gcc -g -I . -L . -shared -o drummer.so -fPIC drummer.c
|
||||
|
||||
gcc -g -I. -I/usr/include/libxml2 -o drummer -fPIC libnode.o -ldl -lxml2 -lz -llzma -lm drummer.c
|
||||
gcc -g -I. -I/usr/include/libxml2 -o drummer -fPIC libnode.o -ldl -lxml2 -lz -llzma -lm -lsndfile -lsamplerate drummer.c
|
||||
#gcc -g -I. -I/usr/include/libxml2 -o xpath -fPIC -ldl -lxml2 -lz -llzma -lm xpath.c
|
||||
|
Loading…
Reference in New Issue
Block a user