MIDI: Update BASS, BASSMIDI, BASSFLAC, and BASSOpus

CQTexperiment
Christopher Snowhill 2021-04-27 00:18:41 -07:00
parent ea853109ed
commit 6b1d4e7350
6 changed files with 297 additions and 264 deletions

533
ThirdParty/BASS/bass.h vendored
View File

@ -19,7 +19,9 @@ typedef uint8_t BYTE;
typedef uint16_t WORD;
typedef uint32_t DWORD;
typedef uint64_t QWORD;
#ifndef __OBJC__
#ifdef __OBJC__
#include <objc/objc.h>
#else
typedef int BOOL;
#endif
#ifndef TRUE
@ -70,6 +72,7 @@ typedef DWORD HPLUGIN; // Plugin handle
#define BASS_ERROR_START 9 // BASS_Start has not been successfully called
#define BASS_ERROR_SSL 10 // SSL/HTTPS support isn't available
#define BASS_ERROR_ALREADY 14 // already initialized/paused/whatever
#define BASS_ERROR_NOTAUDIO 17 // file does not contain audio
#define BASS_ERROR_NOCHAN 18 // can't get a free channel
#define BASS_ERROR_ILLTYPE 19 // an illegal type was specified
#define BASS_ERROR_ILLPARAM 20 // an illegal parameter was specified
@ -93,7 +96,8 @@ typedef DWORD HPLUGIN; // Plugin handle
#define BASS_ERROR_VERSION 43 // invalid BASS version (used by add-ons)
#define BASS_ERROR_CODEC 44 // codec is not available/supported
#define BASS_ERROR_ENDED 45 // the channel/file has ended
#define BASS_ERROR_BUSY 46 // the device is busy
#define BASS_ERROR_BUSY 46 // the device is busy
#define BASS_ERROR_UNSTREAMABLE 47 // unstreamable file
#define BASS_ERROR_UNKNOWN -1 // some other mystery problem
// BASS_SetConfig options
@ -117,55 +121,65 @@ typedef DWORD HPLUGIN; // Plugin handle
#define BASS_CONFIG_VERIFY 23
#define BASS_CONFIG_UPDATETHREADS 24
#define BASS_CONFIG_DEV_BUFFER 27
#define BASS_CONFIG_REC_LOOPBACK 28
#define BASS_CONFIG_VISTA_TRUEPOS 30
#define BASS_CONFIG_IOS_MIXAUDIO 34
#define BASS_CONFIG_DEV_DEFAULT 36
#define BASS_CONFIG_NET_READTIMEOUT 37
#define BASS_CONFIG_VISTA_SPEAKERS 38
#define BASS_CONFIG_IOS_SPEAKER 39
#define BASS_CONFIG_MF_DISABLE 40
#define BASS_CONFIG_HANDLES 41
#define BASS_CONFIG_UNICODE 42
#define BASS_CONFIG_SRC 43
#define BASS_CONFIG_SRC_SAMPLE 44
#define BASS_CONFIG_ASYNCFILE_BUFFER 45
#define BASS_CONFIG_OGG_PRESCAN 47
#define BASS_CONFIG_MF_VIDEO 48
#define BASS_CONFIG_AIRPLAY 49
#define BASS_CONFIG_DEV_NONSTOP 50
#define BASS_CONFIG_IOS_NOCATEGORY 51
#define BASS_CONFIG_REC_LOOPBACK 28
#define BASS_CONFIG_VISTA_TRUEPOS 30
#define BASS_CONFIG_IOS_SESSION 34
#define BASS_CONFIG_IOS_MIXAUDIO 34
#define BASS_CONFIG_DEV_DEFAULT 36
#define BASS_CONFIG_NET_READTIMEOUT 37
#define BASS_CONFIG_VISTA_SPEAKERS 38
#define BASS_CONFIG_IOS_SPEAKER 39
#define BASS_CONFIG_MF_DISABLE 40
#define BASS_CONFIG_HANDLES 41
#define BASS_CONFIG_UNICODE 42
#define BASS_CONFIG_SRC 43
#define BASS_CONFIG_SRC_SAMPLE 44
#define BASS_CONFIG_ASYNCFILE_BUFFER 45
#define BASS_CONFIG_OGG_PRESCAN 47
#define BASS_CONFIG_MF_VIDEO 48
#define BASS_CONFIG_AIRPLAY 49
#define BASS_CONFIG_DEV_NONSTOP 50
#define BASS_CONFIG_IOS_NOCATEGORY 51
#define BASS_CONFIG_VERIFY_NET 52
#define BASS_CONFIG_DEV_PERIOD 53
#define BASS_CONFIG_FLOAT 54
#define BASS_CONFIG_DEV_PERIOD 53
#define BASS_CONFIG_FLOAT 54
#define BASS_CONFIG_NET_SEEK 56
#define BASS_CONFIG_AM_DISABLE 58
#define BASS_CONFIG_AM_DISABLE 58
#define BASS_CONFIG_NET_PLAYLIST_DEPTH 59
#define BASS_CONFIG_NET_PREBUF_WAIT 60
#define BASS_CONFIG_WASAPI_PERSIST 65
#define BASS_CONFIG_REC_WASAPI 66
#define BASS_CONFIG_ANDROID_SESSIONID 62
#define BASS_CONFIG_WASAPI_PERSIST 65
#define BASS_CONFIG_REC_WASAPI 66
#define BASS_CONFIG_ANDROID_AAUDIO 67
// BASS_SetConfigPtr options
#define BASS_CONFIG_NET_AGENT 16
#define BASS_CONFIG_NET_PROXY 17
#define BASS_CONFIG_IOS_NOTIFY 46
#define BASS_CONFIG_LIBSSL 64
#define BASS_CONFIG_IOS_NOTIFY 46
#define BASS_CONFIG_LIBSSL 64
// BASS_CONFIG_IOS_SESSION flags
#define BASS_IOS_SESSION_MIX 1
#define BASS_IOS_SESSION_DUCK 2
#define BASS_IOS_SESSION_AMBIENT 4
#define BASS_IOS_SESSION_SPEAKER 8
#define BASS_IOS_SESSION_DISABLE 16
// BASS_Init flags
#define BASS_DEVICE_8BITS 1 // 8 bit
#define BASS_DEVICE_MONO 2 // mono
#define BASS_DEVICE_3D 4 // enable 3D functionality
#define BASS_DEVICE_16BITS 8 // limit output to 16 bit
#define BASS_DEVICE_16BITS 8 // limit output to 16 bit
#define BASS_DEVICE_LATENCY 0x100 // calculate device latency (BASS_INFO struct)
#define BASS_DEVICE_CPSPEAKERS 0x400 // detect speakers via Windows control panel
#define BASS_DEVICE_SPEAKERS 0x800 // force enabling of speaker assignment
#define BASS_DEVICE_NOSPEAKER 0x1000 // ignore speaker arrangement
#define BASS_DEVICE_DMIX 0x2000 // use ALSA "dmix" plugin
#define BASS_DEVICE_FREQ 0x4000 // set device sample rate
#define BASS_DEVICE_STEREO 0x8000 // limit output to stereo
#define BASS_DEVICE_HOG 0x10000 // hog/exclusive mode
#define BASS_DEVICE_AUDIOTRACK 0x20000 // use AudioTrack output
#define BASS_DEVICE_DSOUND 0x40000 // use DirectSound output
#define BASS_DEVICE_FREQ 0x4000 // set device sample rate
#define BASS_DEVICE_STEREO 0x8000 // limit output to stereo
#define BASS_DEVICE_HOG 0x10000 // hog/exclusive mode
#define BASS_DEVICE_AUDIOTRACK 0x20000 // use AudioTrack output
#define BASS_DEVICE_DSOUND 0x40000 // use DirectSound output
// DirectSound interfaces (for use with BASS_GetDSoundObject)
#define BASS_OBJECT_DS 1 // IDirectSound
@ -187,24 +201,24 @@ typedef struct {
#define BASS_DEVICE_ENABLED 1
#define BASS_DEVICE_DEFAULT 2
#define BASS_DEVICE_INIT 4
#define BASS_DEVICE_LOOPBACK 8
#define BASS_DEVICE_LOOPBACK 8
#define BASS_DEVICE_TYPE_MASK 0xff000000
#define BASS_DEVICE_TYPE_NETWORK 0x01000000
#define BASS_DEVICE_TYPE_SPEAKERS 0x02000000
#define BASS_DEVICE_TYPE_LINE 0x03000000
#define BASS_DEVICE_TYPE_HEADPHONES 0x04000000
#define BASS_DEVICE_TYPE_MICROPHONE 0x05000000
#define BASS_DEVICE_TYPE_HEADSET 0x06000000
#define BASS_DEVICE_TYPE_HANDSET 0x07000000
#define BASS_DEVICE_TYPE_DIGITAL 0x08000000
#define BASS_DEVICE_TYPE_SPDIF 0x09000000
#define BASS_DEVICE_TYPE_HDMI 0x0a000000
#define BASS_DEVICE_TYPE_DISPLAYPORT 0x40000000
#define BASS_DEVICE_TYPE_NETWORK 0x01000000
#define BASS_DEVICE_TYPE_SPEAKERS 0x02000000
#define BASS_DEVICE_TYPE_LINE 0x03000000
#define BASS_DEVICE_TYPE_HEADPHONES 0x04000000
#define BASS_DEVICE_TYPE_MICROPHONE 0x05000000
#define BASS_DEVICE_TYPE_HEADSET 0x06000000
#define BASS_DEVICE_TYPE_HANDSET 0x07000000
#define BASS_DEVICE_TYPE_DIGITAL 0x08000000
#define BASS_DEVICE_TYPE_SPDIF 0x09000000
#define BASS_DEVICE_TYPE_HDMI 0x0a000000
#define BASS_DEVICE_TYPE_DISPLAYPORT 0x40000000
// BASS_GetDeviceInfo flags
#define BASS_DEVICES_AIRPLAY 0x1000000
// BASS_GetDeviceInfo flags
#define BASS_DEVICES_AIRPLAY 0x1000000
typedef struct {
DWORD flags; // device capabilities (DSCAPS_xxx flags)
DWORD hwsize; // size of total device hardware memory
@ -242,7 +256,7 @@ typedef struct {
// BASS_RECORDINFO flags (from DSOUND.H)
#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER // device does NOT have hardware DirectSound recording support
#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED // device driver has been certified by Microsoft
#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED // device driver has been certified by Microsoft
// defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
#ifndef WAVE_FORMAT_1M08
@ -344,12 +358,12 @@ typedef struct {
#define BASS_SPEAKER_REAR2LEFT BASS_SPEAKER_REAR2|BASS_SPEAKER_LEFT
#define BASS_SPEAKER_REAR2RIGHT BASS_SPEAKER_REAR2|BASS_SPEAKER_RIGHT
#define BASS_ASYNCFILE 0x40000000
#define BASS_ASYNCFILE 0x40000000
#define BASS_UNICODE 0x80000000
#define BASS_RECORD_PAUSE 0x8000 // start recording paused
#define BASS_RECORD_ECHOCANCEL 0x2000
#define BASS_RECORD_AGC 0x4000
#define BASS_RECORD_ECHOCANCEL 0x2000
#define BASS_RECORD_AGC 0x4000
// DX7 voice allocation & management flags
#define BASS_VAM_HARDWARE 1
@ -376,14 +390,15 @@ typedef struct {
#define BASS_CTYPE_SAMPLE 1
#define BASS_CTYPE_RECORD 2
#define BASS_CTYPE_STREAM 0x10000
#define BASS_CTYPE_STREAM_VORBIS 0x10002
#define BASS_CTYPE_STREAM_OGG 0x10002
#define BASS_CTYPE_STREAM_MP1 0x10003
#define BASS_CTYPE_STREAM_MP2 0x10004
#define BASS_CTYPE_STREAM_MP3 0x10005
#define BASS_CTYPE_STREAM_AIFF 0x10006
#define BASS_CTYPE_STREAM_CA 0x10007
#define BASS_CTYPE_STREAM_MF 0x10008
#define BASS_CTYPE_STREAM_AM 0x10009
#define BASS_CTYPE_STREAM_MF 0x10008
#define BASS_CTYPE_STREAM_AM 0x10009
#define BASS_CTYPE_STREAM_DUMMY 0x18000
#define BASS_CTYPE_STREAM_DEVICE 0x18001
#define BASS_CTYPE_STREAM_WAV 0x40000 // WAVE flag, LOWORD=codec
@ -497,8 +512,7 @@ enum
#define EAX_PRESET_PSYCHOTIC EAX_ENVIRONMENT_PSYCHOTIC,0.486F,7.563F,0.806F
typedef DWORD (CALLBACK STREAMPROC)(HSTREAM handle, void *buffer, DWORD length, void *user);
/* User stream callback function. NOTE: A stream function should obviously be as quick
as possible, other streams (and MOD musics) can't be mixed until it's finished.
/* User stream callback function.
handle : The stream that needs writing
buffer : Buffer to write the samples in
length : Number of bytes to write
@ -543,7 +557,7 @@ typedef struct {
#define BASS_FILEPOS_CONNECTED 4
#define BASS_FILEPOS_BUFFER 5
#define BASS_FILEPOS_SOCKET 6
#define BASS_FILEPOS_ASYNCBUF 7
#define BASS_FILEPOS_ASYNCBUF 7
#define BASS_FILEPOS_SIZE 8
#define BASS_FILEPOS_BUFFERING 9
@ -568,23 +582,19 @@ user : The 'user' parameter value given when calling BASS_StreamCreateURL */
#define BASS_SYNC_OGG_CHANGE 12
#define BASS_SYNC_DEV_FAIL 14
#define BASS_SYNC_DEV_FORMAT 15
#define BASS_SYNC_THREAD 0x20000000 // flag: call sync in other thread
#define BASS_SYNC_MIXTIME 0x40000000 // flag: sync at mixtime, else at playtime
#define BASS_SYNC_ONETIME 0x80000000 // flag: sync only once, else continuously
typedef void (CALLBACK SYNCPROC)(HSYNC handle, DWORD channel, DWORD data, void *user);
/* Sync callback function. NOTE: a sync callback function should be very
quick as other syncs can't be processed until it has finished. If the sync
is a "mixtime" sync, then other streams and MOD musics can't be mixed until
it's finished either.
/* Sync callback function.
handle : The sync that has occured
channel: Channel that the sync occured in
data : Additional data associated with the sync's occurance
user : The 'user' parameter given when calling BASS_ChannelSetSync */
typedef void (CALLBACK DSPPROC)(HDSP handle, DWORD channel, void *buffer, DWORD length, void *user);
/* DSP callback function. NOTE: A DSP function should obviously be as quick as
possible... other DSP functions, streams and MOD musics can not be processed
until it's finished.
/* DSP callback function.
handle : The DSP handle
channel: Channel that the DSP is being applied to
buffer : Buffer to apply the DSP to
@ -611,15 +621,16 @@ RETURN : TRUE = continue recording, FALSE = stop */
#define BASS_ATTRIB_VOL 2
#define BASS_ATTRIB_PAN 3
#define BASS_ATTRIB_EAXMIX 4
#define BASS_ATTRIB_NOBUFFER 5
#define BASS_ATTRIB_VBR 6
#define BASS_ATTRIB_CPU 7
#define BASS_ATTRIB_SRC 8
#define BASS_ATTRIB_NET_RESUME 9
#define BASS_ATTRIB_SCANINFO 10
#define BASS_ATTRIB_NORAMP 11
#define BASS_ATTRIB_NOBUFFER 5
#define BASS_ATTRIB_VBR 6
#define BASS_ATTRIB_CPU 7
#define BASS_ATTRIB_SRC 8
#define BASS_ATTRIB_NET_RESUME 9
#define BASS_ATTRIB_SCANINFO 10
#define BASS_ATTRIB_NORAMP 11
#define BASS_ATTRIB_BITRATE 12
#define BASS_ATTRIB_BUFFER 13
#define BASS_ATTRIB_GRANULE 14
#define BASS_ATTRIB_MUSIC_AMPLIFY 0x100
#define BASS_ATTRIB_MUSIC_PANSEP 0x101
#define BASS_ATTRIB_MUSIC_PSCALER 0x102
@ -643,19 +654,19 @@ RETURN : TRUE = continue recording, FALSE = stop */
#define BASS_DATA_FFT2048 0x80000003 // 2048 FFT
#define BASS_DATA_FFT4096 0x80000004 // 4096 FFT
#define BASS_DATA_FFT8192 0x80000005 // 8192 FFT
#define BASS_DATA_FFT16384 0x80000006 // 16384 FFT
#define BASS_DATA_FFT32768 0x80000007 // 32768 FFT
#define BASS_DATA_FFT16384 0x80000006 // 16384 FFT
#define BASS_DATA_FFT32768 0x80000007 // 32768 FFT
#define BASS_DATA_FFT_INDIVIDUAL 0x10 // FFT flag: FFT for each channel, else all combined
#define BASS_DATA_FFT_NOWINDOW 0x20 // FFT flag: no Hanning window
#define BASS_DATA_FFT_REMOVEDC 0x40 // FFT flag: pre-remove DC bias
#define BASS_DATA_FFT_COMPLEX 0x80 // FFT flag: return complex data
#define BASS_DATA_FFT_NYQUIST 0x100 // FFT flag: return extra Nyquist value
#define BASS_DATA_FFT_COMPLEX 0x80 // FFT flag: return complex data
#define BASS_DATA_FFT_NYQUIST 0x100 // FFT flag: return extra Nyquist value
// BASS_ChannelGetLevelEx flags
#define BASS_LEVEL_MONO 1
#define BASS_LEVEL_STEREO 2
#define BASS_LEVEL_RMS 4
#define BASS_LEVEL_VOLPAN 8
#define BASS_LEVEL_MONO 1
#define BASS_LEVEL_STEREO 2
#define BASS_LEVEL_RMS 4
#define BASS_LEVEL_VOLPAN 8
// BASS_ChannelGetTags types : what's returned
#define BASS_TAG_ID3 0 // ID3v1 tags : TAG_ID3 structure
@ -664,30 +675,30 @@ RETURN : TRUE = continue recording, FALSE = stop */
#define BASS_TAG_HTTP 3 // HTTP headers : series of null-terminated ANSI strings
#define BASS_TAG_ICY 4 // ICY headers : series of null-terminated ANSI strings
#define BASS_TAG_META 5 // ICY metadata : ANSI string
#define BASS_TAG_APE 6 // APE tags : series of null-terminated UTF-8 strings
#define BASS_TAG_MP4 7 // MP4/iTunes metadata : series of null-terminated UTF-8 strings
#define BASS_TAG_WMA 8 // WMA tags : series of null-terminated UTF-8 strings
#define BASS_TAG_APE 6 // APE tags : series of null-terminated UTF-8 strings
#define BASS_TAG_MP4 7 // MP4/iTunes metadata : series of null-terminated UTF-8 strings
#define BASS_TAG_WMA 8 // WMA tags : series of null-terminated UTF-8 strings
#define BASS_TAG_VENDOR 9 // OGG encoder : UTF-8 string
#define BASS_TAG_LYRICS3 10 // Lyric3v2 tag : ASCII string
#define BASS_TAG_CA_CODEC 11 // CoreAudio codec info : TAG_CA_CODEC structure
#define BASS_TAG_MF 13 // Media Foundation tags : series of null-terminated UTF-8 strings
#define BASS_TAG_WAVEFORMAT 14 // WAVE format : WAVEFORMATEEX structure
#define BASS_TAG_AM_MIME 15 // Android Media MIME type : ASCII string
#define BASS_TAG_AM_NAME 16 // Android Media codec name : ASCII string
#define BASS_TAG_MF 13 // Media Foundation tags : series of null-terminated UTF-8 strings
#define BASS_TAG_WAVEFORMAT 14 // WAVE format : WAVEFORMATEEX structure
#define BASS_TAG_AM_MIME 15 // Android Media MIME type : ASCII string
#define BASS_TAG_AM_NAME 16 // Android Media codec name : ASCII string
#define BASS_TAG_RIFF_INFO 0x100 // RIFF "INFO" tags : series of null-terminated ANSI strings
#define BASS_TAG_RIFF_BEXT 0x101 // RIFF/BWF "bext" tags : TAG_BEXT structure
#define BASS_TAG_RIFF_CART 0x102 // RIFF/BWF "cart" tags : TAG_CART structure
#define BASS_TAG_RIFF_DISP 0x103 // RIFF "DISP" text tag : ANSI string
#define BASS_TAG_RIFF_CUE 0x104 // RIFF "cue " chunk : TAG_CUE structure
#define BASS_TAG_RIFF_SMPL 0x105 // RIFF "smpl" chunk : TAG_SMPL structure
#define BASS_TAG_APE_BINARY 0x1000 // + index #, binary APE tag : TAG_APE_BINARY structure
#define BASS_TAG_RIFF_CART 0x102 // RIFF/BWF "cart" tags : TAG_CART structure
#define BASS_TAG_RIFF_DISP 0x103 // RIFF "DISP" text tag : ANSI string
#define BASS_TAG_RIFF_CUE 0x104 // RIFF "cue " chunk : TAG_CUE structure
#define BASS_TAG_RIFF_SMPL 0x105 // RIFF "smpl" chunk : TAG_SMPL structure
#define BASS_TAG_APE_BINARY 0x1000 // + index #, binary APE tag : TAG_APE_BINARY structure
#define BASS_TAG_MUSIC_NAME 0x10000 // MOD music name : ANSI string
#define BASS_TAG_MUSIC_MESSAGE 0x10001 // MOD message : ANSI string
#define BASS_TAG_MUSIC_ORDERS 0x10002 // MOD order list : BYTE array of pattern numbers
#define BASS_TAG_MUSIC_AUTH 0x10003 // MOD author : UTF-8 string
#define BASS_TAG_MUSIC_INST 0x10100 // + instrument #, MOD instrument name : ANSI string
#define BASS_TAG_MUSIC_SAMPLE 0x10300 // + sample #, MOD sample name : ANSI string
// ID3v1 tag structure
typedef struct {
char id[3];
@ -698,15 +709,15 @@ typedef struct {
char comment[30];
BYTE genre;
} TAG_ID3;
// Binary APE tag structure
typedef struct {
const char *key;
const void *data;
DWORD length;
} TAG_APE_BINARY;
// BWF "bext" tag structure
typedef struct {
const char *key;
const void *data;
DWORD length;
} TAG_APE_BINARY;
// BWF "bext" tag structure
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4200)
@ -730,102 +741,102 @@ typedef struct {
char CodingHistory[1]; // history
#endif
} TAG_BEXT;
#pragma pack(pop)
// BWF "cart" tag structures
typedef struct
{
DWORD dwUsage; // FOURCC timer usage ID
DWORD dwValue; // timer value in samples from head
} TAG_CART_TIMER;
typedef struct
{
char Version[4]; // version of the data structure
char Title[64]; // title of cart audio sequence
char Artist[64]; // artist or creator name
char CutID[64]; // cut number identification
char ClientID[64]; // client identification
char Category[64]; // category ID, PSA, NEWS, etc
char Classification[64]; // classification or auxiliary key
char OutCue[64]; // out cue text
char StartDate[10]; // yyyy-mm-dd
char StartTime[8]; // hh:mm:ss
char EndDate[10]; // yyyy-mm-dd
char EndTime[8]; // hh:mm:ss
char ProducerAppID[64]; // name of vendor or application
char ProducerAppVersion[64]; // version of producer application
char UserDef[64]; // user defined text
DWORD dwLevelReference; // sample value for 0 dB reference
TAG_CART_TIMER PostTimer[8]; // 8 time markers after head
char Reserved[276];
char URL[1024]; // uniform resource locator
#if defined(__GNUC__) && __GNUC__<3
char TagText[0]; // free form text for scripts or tags
#elif 1 // change to 0 if compiler fails the following line
char TagText[]; // free form text for scripts or tags
#else
char TagText[1]; // free form text for scripts or tags
#endif
} TAG_CART;
// RIFF "cue " tag structures
typedef struct
{
DWORD dwName;
DWORD dwPosition;
DWORD fccChunk;
DWORD dwChunkStart;
DWORD dwBlockStart;
DWORD dwSampleOffset;
} TAG_CUE_POINT;
typedef struct
{
DWORD dwCuePoints;
#if defined(__GNUC__) && __GNUC__<3
TAG_CUE_POINT CuePoints[0];
#elif 1 // change to 0 if compiler fails the following line
TAG_CUE_POINT CuePoints[];
#else
TAG_CUE_POINT CuePoints[1];
#endif
} TAG_CUE;
// RIFF "smpl" tag structures
typedef struct
{
DWORD dwIdentifier;
DWORD dwType;
DWORD dwStart;
DWORD dwEnd;
DWORD dwFraction;
DWORD dwPlayCount;
} TAG_SMPL_LOOP;
typedef struct
{
DWORD dwManufacturer;
DWORD dwProduct;
DWORD dwSamplePeriod;
DWORD dwMIDIUnityNote;
DWORD dwMIDIPitchFraction;
DWORD dwSMPTEFormat;
DWORD dwSMPTEOffset;
DWORD cSampleLoops;
DWORD cbSamplerData;
#if defined(__GNUC__) && __GNUC__<3
TAG_SMPL_LOOP SampleLoops[0];
#elif 1 // change to 0 if compiler fails the following line
TAG_SMPL_LOOP SampleLoops[];
#else
TAG_SMPL_LOOP SampleLoops[1];
#endif
} TAG_SMPL;
#ifdef _MSC_VER
#pragma warning(pop)
#endif
#pragma pack(pop)
// BWF "cart" tag structures
typedef struct
{
DWORD dwUsage; // FOURCC timer usage ID
DWORD dwValue; // timer value in samples from head
} TAG_CART_TIMER;
typedef struct
{
char Version[4]; // version of the data structure
char Title[64]; // title of cart audio sequence
char Artist[64]; // artist or creator name
char CutID[64]; // cut number identification
char ClientID[64]; // client identification
char Category[64]; // category ID, PSA, NEWS, etc
char Classification[64]; // classification or auxiliary key
char OutCue[64]; // out cue text
char StartDate[10]; // yyyy-mm-dd
char StartTime[8]; // hh:mm:ss
char EndDate[10]; // yyyy-mm-dd
char EndTime[8]; // hh:mm:ss
char ProducerAppID[64]; // name of vendor or application
char ProducerAppVersion[64]; // version of producer application
char UserDef[64]; // user defined text
DWORD dwLevelReference; // sample value for 0 dB reference
TAG_CART_TIMER PostTimer[8]; // 8 time markers after head
char Reserved[276];
char URL[1024]; // uniform resource locator
#if defined(__GNUC__) && __GNUC__<3
char TagText[0]; // free form text for scripts or tags
#elif 1 // change to 0 if compiler fails the following line
char TagText[]; // free form text for scripts or tags
#else
char TagText[1]; // free form text for scripts or tags
#endif
} TAG_CART;
// RIFF "cue " tag structures
typedef struct
{
DWORD dwName;
DWORD dwPosition;
DWORD fccChunk;
DWORD dwChunkStart;
DWORD dwBlockStart;
DWORD dwSampleOffset;
} TAG_CUE_POINT;
typedef struct
{
DWORD dwCuePoints;
#if defined(__GNUC__) && __GNUC__<3
TAG_CUE_POINT CuePoints[0];
#elif 1 // change to 0 if compiler fails the following line
TAG_CUE_POINT CuePoints[];
#else
TAG_CUE_POINT CuePoints[1];
#endif
} TAG_CUE;
// RIFF "smpl" tag structures
typedef struct
{
DWORD dwIdentifier;
DWORD dwType;
DWORD dwStart;
DWORD dwEnd;
DWORD dwFraction;
DWORD dwPlayCount;
} TAG_SMPL_LOOP;
typedef struct
{
DWORD dwManufacturer;
DWORD dwProduct;
DWORD dwSamplePeriod;
DWORD dwMIDIUnityNote;
DWORD dwMIDIPitchFraction;
DWORD dwSMPTEFormat;
DWORD dwSMPTEOffset;
DWORD cSampleLoops;
DWORD cbSamplerData;
#if defined(__GNUC__) && __GNUC__<3
TAG_SMPL_LOOP SampleLoops[0];
#elif 1 // change to 0 if compiler fails the following line
TAG_SMPL_LOOP SampleLoops[];
#else
TAG_SMPL_LOOP SampleLoops[1];
#endif
} TAG_SMPL;
#ifdef _MSC_VER
#pragma warning(pop)
#endif
// CoreAudio codec info structure
typedef struct {
DWORD ftype; // file format
@ -833,33 +844,33 @@ typedef struct {
const char *name; // description
} TAG_CA_CODEC;
#ifndef _WAVEFORMATEX_
#define _WAVEFORMATEX_
#pragma pack(push,1)
typedef struct tWAVEFORMATEX
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *LPWAVEFORMATEX;
typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
#pragma pack(pop)
#endif
#ifndef _WAVEFORMATEX_
#define _WAVEFORMATEX_
#pragma pack(push,1)
typedef struct tWAVEFORMATEX
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *LPWAVEFORMATEX;
typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
#pragma pack(pop)
#endif
// BASS_ChannelGetLength/GetPosition/SetPosition modes
#define BASS_POS_BYTE 0 // byte position
#define BASS_POS_MUSIC_ORDER 1 // order.row position, MAKELONG(order,row)
#define BASS_POS_OGG 3 // OGG bitstream number
#define BASS_POS_OGG 3 // OGG bitstream number
#define BASS_POS_RESET 0x2000000 // flag: reset user file buffers
#define BASS_POS_RELATIVE 0x4000000 // flag: seek relative to the current position
#define BASS_POS_RELATIVE 0x4000000 // flag: seek relative to the current position
#define BASS_POS_INEXACT 0x8000000 // flag: allow seeking to inexact position
#define BASS_POS_DECODE 0x10000000 // flag: get the decoding (not playing) position
#define BASS_POS_DECODETO 0x20000000 // flag: decode to the position instead of seeking
#define BASS_POS_SCAN 0x40000000 // flag: scan to the position
#define BASS_POS_DECODETO 0x20000000 // flag: decode to the position instead of seeking
#define BASS_POS_SCAN 0x40000000 // flag: scan to the position
// BASS_ChannelSetDevice/GetDevice option
#define BASS_NODEVICE 0x20000
@ -976,20 +987,20 @@ typedef struct {
#define BASS_DX8_PHASE_ZERO 2
#define BASS_DX8_PHASE_90 3
#define BASS_DX8_PHASE_180 4
typedef struct {
float fTarget;
float fCurrent;
float fTime;
DWORD lCurve;
} BASS_FX_VOLUME_PARAM;
typedef void (CALLBACK IOSNOTIFYPROC)(DWORD status);
/* iOS notification callback function.
status : The notification (BASS_IOSNOTIFY_xxx) */
#define BASS_IOSNOTIFY_INTERRUPT 1 // interruption started
#define BASS_IOSNOTIFY_INTERRUPT_END 2 // interruption ended
typedef void (CALLBACK IOSNOTIFYPROC)(DWORD status);
/* iOS notification callback function.
status : The notification (BASS_IOSNOTIFY_xxx) */
#define BASS_IOSNOTIFY_INTERRUPT 1 // interruption started
#define BASS_IOSNOTIFY_INTERRUPT_END 2 // interruption ended
BOOL BASSDEF(BASS_SetConfig)(DWORD option, DWORD value);
DWORD BASSDEF(BASS_GetConfig)(DWORD option);
@ -1006,7 +1017,7 @@ BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, void *win, void *ds
BOOL BASSDEF(BASS_SetDevice)(DWORD device);
DWORD BASSDEF(BASS_GetDevice)();
BOOL BASSDEF(BASS_Free)();
#if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
#if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
void *BASSDEF(BASS_GetDSoundObject)(DWORD object);
#endif
BOOL BASSDEF(BASS_GetInfo)(BASS_INFO *info);
@ -1028,7 +1039,7 @@ BOOL BASSDEF(BASS_Get3DFactors)(float *distf, float *rollf, float *doppf);
BOOL BASSDEF(BASS_Set3DPosition)(const BASS_3DVECTOR *pos, const BASS_3DVECTOR *vel, const BASS_3DVECTOR *front, const BASS_3DVECTOR *top);
BOOL BASSDEF(BASS_Get3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel, BASS_3DVECTOR *front, BASS_3DVECTOR *top);
void BASSDEF(BASS_Apply3D)();
#if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
#if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP)
BOOL BASSDEF(BASS_SetEAXParameters)(int env, float vol, float decay, float damp);
BOOL BASSDEF(BASS_GetEAXParameters)(DWORD *env, float *vol, float *decay, float *damp);
#endif
@ -1094,7 +1105,7 @@ QWORD BASSDEF(BASS_ChannelGetLength)(DWORD handle, DWORD mode);
BOOL BASSDEF(BASS_ChannelSetPosition)(DWORD handle, QWORD pos, DWORD mode);
QWORD BASSDEF(BASS_ChannelGetPosition)(DWORD handle, DWORD mode);
DWORD BASSDEF(BASS_ChannelGetLevel)(DWORD handle);
BOOL BASSDEF(BASS_ChannelGetLevelEx)(DWORD handle, float *levels, float length, DWORD flags);
BOOL BASSDEF(BASS_ChannelGetLevelEx)(DWORD handle, float *levels, float length, DWORD flags);
DWORD BASSDEF(BASS_ChannelGetData)(DWORD handle, void *buffer, DWORD length);
HSYNC BASSDEF(BASS_ChannelSetSync)(DWORD handle, DWORD type, QWORD param, SYNCPROC *proc, void *user);
BOOL BASSDEF(BASS_ChannelRemoveSync)(DWORD handle, HSYNC sync);
@ -1109,41 +1120,41 @@ BOOL BASSDEF(BASS_FXSetParameters)(HFX handle, const void *params);
BOOL BASSDEF(BASS_FXGetParameters)(HFX handle, void *params);
BOOL BASSDEF(BASS_FXReset)(HFX handle);
BOOL BASSDEF(BASS_FXSetPriority)(HFX handle, int priority);
#ifdef __cplusplus
}
#if defined(_WIN32) && !defined(NOBASSOVERLOADS)
static inline HPLUGIN BASS_PluginLoad(const WCHAR *file, DWORD flags)
{
return BASS_PluginLoad((const char*)file, flags|BASS_UNICODE);
}
static inline HMUSIC BASS_MusicLoad(BOOL mem, const WCHAR *file, QWORD offset, DWORD length, DWORD flags, DWORD freq)
{
return BASS_MusicLoad(mem, (const void*)file, offset, length, flags|BASS_UNICODE, freq);
}
static inline HSAMPLE BASS_SampleLoad(BOOL mem, const WCHAR *file, QWORD offset, DWORD length, DWORD max, DWORD flags)
{
return BASS_SampleLoad(mem, (const void*)file, offset, length, max, flags|BASS_UNICODE);
}
static inline HSTREAM BASS_StreamCreateFile(BOOL mem, const WCHAR *file, QWORD offset, QWORD length, DWORD flags)
{
return BASS_StreamCreateFile(mem, (const void*)file, offset, length, flags|BASS_UNICODE);
}
static inline HSTREAM BASS_StreamCreateURL(const WCHAR *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user)
{
return BASS_StreamCreateURL((const char*)url, offset, flags|BASS_UNICODE, proc, user);
}
static inline BOOL BASS_SetConfigPtr(DWORD option, const WCHAR *value)
{
return BASS_SetConfigPtr(option|BASS_UNICODE, (const void*)value);
}
#endif
#if defined(_WIN32) && !defined(NOBASSOVERLOADS)
static inline HPLUGIN BASS_PluginLoad(const WCHAR *file, DWORD flags)
{
return BASS_PluginLoad((const char*)file, flags|BASS_UNICODE);
}
static inline HMUSIC BASS_MusicLoad(BOOL mem, const WCHAR *file, QWORD offset, DWORD length, DWORD flags, DWORD freq)
{
return BASS_MusicLoad(mem, (const void*)file, offset, length, flags|BASS_UNICODE, freq);
}
static inline HSAMPLE BASS_SampleLoad(BOOL mem, const WCHAR *file, QWORD offset, DWORD length, DWORD max, DWORD flags)
{
return BASS_SampleLoad(mem, (const void*)file, offset, length, max, flags|BASS_UNICODE);
}
static inline HSTREAM BASS_StreamCreateFile(BOOL mem, const WCHAR *file, QWORD offset, QWORD length, DWORD flags)
{
return BASS_StreamCreateFile(mem, (const void*)file, offset, length, flags|BASS_UNICODE);
}
static inline HSTREAM BASS_StreamCreateURL(const WCHAR *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user)
{
return BASS_StreamCreateURL((const char*)url, offset, flags|BASS_UNICODE, proc, user);
}
static inline BOOL BASS_SetConfigPtr(DWORD option, const WCHAR *value)
{
return BASS_SetConfigPtr(option|BASS_UNICODE, (const void*)value);
}
#endif
#endif
#endif

View File

@ -1,6 +1,6 @@
/*
BASSMIDI 2.4 C/C++ header file
Copyright (c) 2006-2018 Un4seen Developments Ltd.
Copyright (c) 2006-2020 Un4seen Developments Ltd.
See the BASSMIDI.CHM file for more detailed documentation
*/
@ -32,9 +32,13 @@ typedef DWORD HSOUNDFONT; // soundfont handle
#define BASS_CONFIG_MIDI_VOICES 0x10401
#define BASS_CONFIG_MIDI_AUTOFONT 0x10402
#define BASS_CONFIG_MIDI_IN_PORTS 0x10404
#define BASS_CONFIG_MIDI_SAMPLETHREADS 0x10406
#define BASS_CONFIG_MIDI_SAMPLEMEM 0x10407
#define BASS_CONFIG_MIDI_SAMPLEREAD 0x10408
// Additional BASS_SetConfigPtr options
#define BASS_CONFIG_MIDI_DEFFONT 0x10403
#define BASS_CONFIG_MIDI_SFZHEAD 0x10408
// Additional sync types
#define BASS_SYNC_MIDI_MARK 0x10000
@ -62,6 +66,9 @@ typedef DWORD HSOUNDFONT; // soundfont handle
#define BASS_MIDI_FONT_XGDRUMS 0x40000
#define BASS_MIDI_FONT_NOFX 0x80000
#define BASS_MIDI_FONT_LINATTMOD 0x100000
#define BASS_MIDI_FONT_LINDECVOL 0x200000
#define BASS_MIDI_FONT_NORAMPIN 0x400000
#define BASS_MIDI_FONT_NOLIMITS 0x800000
typedef struct {
HSOUNDFONT font; // soundfont
@ -187,6 +194,9 @@ typedef struct {
#define MIDI_EVENT_MOD_PITCH 77
#define MIDI_EVENT_MOD_FILTER 78
#define MIDI_EVENT_MOD_VOLUME 79
#define MIDI_EVENT_VIBRATO_RATE 80
#define MIDI_EVENT_VIBRATO_DEPTH 81
#define MIDI_EVENT_VIBRATO_DELAY 82
#define MIDI_EVENT_MIXLEVEL 0x10000
#define MIDI_EVENT_TRANSPOSE 0x10001
#define MIDI_EVENT_SYSTEMEX 0x10002
@ -238,6 +248,9 @@ typedef struct {
#define BASS_ATTRIB_MIDI_STATE 0x12005
#define BASS_ATTRIB_MIDI_SRC 0x12006
#define BASS_ATTRIB_MIDI_KILL 0x12007
#define BASS_ATTRIB_MIDI_SPEED 0x12008
#define BASS_ATTRIB_MIDI_REVERB 0x12009
#define BASS_ATTRIB_MIDI_VOL 0x1200a
#define BASS_ATTRIB_MIDI_TRACK_VOL 0x12100 // + track #
// Additional tag type
@ -253,11 +266,19 @@ track : Track containing the event
event : The event
seeking: TRUE = the event is being processed while seeking, FALSE = it is being played
user : The 'user' parameter value given when calling BASS_MIDI_StreamSetFilter
RETURN : TRUE = process the event, FALSE = drop the event */
RETURN : TRUE = process the event, FALSE = drop the event */
// BASS_MIDI_FontLoadEx flags
#define BASS_MIDI_FONTLOAD_NOWAIT 1 // don't want for the samples to load
#define BASS_MIDI_FONTLOAD_COMPACT 2 // compact samples
#define BASS_MIDI_FONTLOAD_NOLOAD 4 // don't load (only compact)
#define BASS_MIDI_FONTLOAD_TIME 8 // length is in milliseconds
#define BASS_MIDI_FONTLOAD_KEEPDEC 16 // keep decoders
// BASS_MIDI_FontPack flags
#define BASS_MIDI_PACK_NOHEAD 1 // don't send a WAV header to the encoder
#define BASS_MIDI_PACK_16BIT 2 // discard low 8 bits of 24-bit sample data
#define BASS_MIDI_PACK_48KHZ 4 // set encoding rate to 48000 Hz (else 44100 Hz)
typedef struct {
const char *name; // description
@ -299,6 +320,7 @@ BOOL BASSMIDIDEF(BASS_MIDI_FontGetInfo)(HSOUNDFONT handle, BASS_MIDI_FONTINFO *i
BOOL BASSMIDIDEF(BASS_MIDI_FontGetPresets)(HSOUNDFONT handle, DWORD *presets);
const char *BASSMIDIDEF(BASS_MIDI_FontGetPreset)(HSOUNDFONT handle, int preset, int bank);
BOOL BASSMIDIDEF(BASS_MIDI_FontLoad)(HSOUNDFONT handle, int preset, int bank);
BOOL BASSMIDIDEF(BASS_MIDI_FontLoadEx)(HSOUNDFONT handle, int preset, int bank, DWORD length, DWORD flags);
BOOL BASSMIDIDEF(BASS_MIDI_FontUnload)(HSOUNDFONT handle, int preset, int bank);
BOOL BASSMIDIDEF(BASS_MIDI_FontCompact)(HSOUNDFONT handle);
BOOL BASSMIDIDEF(BASS_MIDI_FontPack)(HSOUNDFONT handle, const void *outfile, const void *encoder, DWORD flags);
@ -306,7 +328,7 @@ BOOL BASSMIDIDEF(BASS_MIDI_FontUnpack)(HSOUNDFONT handle, const void *outfile, D
BOOL BASSMIDIDEF(BASS_MIDI_FontSetVolume)(HSOUNDFONT handle, float volume);
float BASSMIDIDEF(BASS_MIDI_FontGetVolume)(HSOUNDFONT handle);
DWORD BASSMIDIDEF(BASS_MIDI_ConvertEvents)(const BYTE *data, DWORD length, BASS_MIDI_EVENT *events, DWORD count, DWORD flags);
DWORD BASSMIDIDEF(BASS_MIDI_ConvertEvents)(const BYTE *data, DWORD length, BASS_MIDI_EVENT *events, DWORD count, DWORD flags);
BOOL BASSMIDIDEF(BASS_MIDI_InGetDeviceInfo)(DWORD device, BASS_MIDI_DEVICEINFO *info);
BOOL BASSMIDIDEF(BASS_MIDI_InInit)(DWORD device, MIDIINPROC *proc, void *user);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.