207 lines
5.3 KiB
C
207 lines
5.3 KiB
C
/*
|
|
|
|
libTiMidity -- MIDI to WAVE converter library
|
|
Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>
|
|
Copyright (C) 2004 Konstantin Korikov <lostclus@ua.fm>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
*/
|
|
|
|
#ifndef TIMIDITY_H
|
|
#define TIMIDITY_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#define LIBTIMIDITY_VERSION_MAJOR 0L
|
|
#define LIBTIMIDITY_VERSION_MINOR 1L
|
|
#define LIBTIMIDITY_PATCHLEVEL 0L
|
|
|
|
#define LIBTIMIDITY_VERSION \
|
|
((LIBTIMIDITY_VERSION_MAJOR<<16)| \
|
|
(LIBTIMIDITY_VERSION_MINOR<< 8)| \
|
|
(LIBTIMIDITY_PATCHLEVEL))
|
|
|
|
/* Audio format flags (defaults to LSB byte order)
|
|
*/
|
|
#define MID_AUDIO_U8 0x0008 /* Unsigned 8-bit samples */
|
|
#define MID_AUDIO_S8 0x8008 /* Signed 8-bit samples */
|
|
#define MID_AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */
|
|
#define MID_AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */
|
|
#define MID_AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */
|
|
#define MID_AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */
|
|
#define MID_AUDIO_U16 MID_AUDIO_U16LSB
|
|
#define MID_AUDIO_S16 MID_AUDIO_S16LSB
|
|
|
|
/* Core Library Types
|
|
*/
|
|
typedef unsigned char uint8;
|
|
typedef signed char sint8;
|
|
typedef unsigned short uint16;
|
|
typedef signed short sint16;
|
|
typedef unsigned int uint32;
|
|
typedef signed int sint32;
|
|
|
|
typedef size_t (*MidIStreamReadFunc) (void *ctx, void *ptr, size_t size,
|
|
size_t nmemb);
|
|
typedef int (*MidIStreamCloseFunc) (void *ctx);
|
|
|
|
typedef struct _MidIStream MidIStream;
|
|
typedef struct _MidDLSPatches MidDLSPatches;
|
|
typedef struct _MidSong MidSong;
|
|
|
|
typedef struct _MidSongOptions MidSongOptions;
|
|
struct _MidSongOptions
|
|
{
|
|
sint32 rate; /* DSP frequency -- samples per second */
|
|
uint16 format; /* Audio data format */
|
|
uint8 channels; /* Number of channels: 1 mono, 2 stereo */
|
|
uint16 buffer_size; /* Sample buffer size in samples */
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
MID_SONG_TEXT = 0,
|
|
MID_SONG_COPYRIGHT = 1
|
|
} MidSongMetaId;
|
|
|
|
|
|
/* Core Library Functions
|
|
* ======================
|
|
*/
|
|
|
|
/* Initialize the library. If config_file is NULL
|
|
* search for configuratin file in default directories
|
|
*/
|
|
extern int mid_init (char *config_file);
|
|
|
|
/* Initialize the library without reading any
|
|
* configuratin file
|
|
*/
|
|
extern int mid_init_no_config (void);
|
|
|
|
/* Shutdown the library
|
|
*/
|
|
extern void mid_exit (void);
|
|
|
|
|
|
/* Input Stream Functions
|
|
* ======================
|
|
*/
|
|
|
|
/* Create input stream from a file name
|
|
*/
|
|
extern MidIStream *mid_istream_open_file (const char *file);
|
|
|
|
/* Create input stream from a file pointer
|
|
*/
|
|
extern MidIStream *mid_istream_open_fp (FILE * fp, int autoclose);
|
|
|
|
/* Create input stream from memory
|
|
*/
|
|
extern MidIStream *mid_istream_open_mem (void *mem, size_t size,
|
|
int autofree);
|
|
|
|
/* Create custom input stream
|
|
*/
|
|
extern MidIStream *mid_istream_open_callbacks (MidIStreamReadFunc read,
|
|
MidIStreamCloseFunc close,
|
|
void *context);
|
|
|
|
/* Read data from input stream
|
|
*/
|
|
extern size_t mid_istream_read (MidIStream * stream, void *ptr, size_t size,
|
|
size_t nmemb);
|
|
|
|
/* Skip data from input stream
|
|
*/
|
|
extern void mid_istream_skip (MidIStream * stream, size_t len);
|
|
|
|
/* Close and destroy input stream
|
|
*/
|
|
extern int mid_istream_close (MidIStream * stream);
|
|
|
|
|
|
/* DLS Pathes Functions
|
|
* ====================
|
|
*/
|
|
|
|
/* Load DLS patches
|
|
*/
|
|
extern MidDLSPatches *mid_dlspatches_load (MidIStream * stream);
|
|
|
|
/* Destroy DLS patches
|
|
*/
|
|
extern void mid_dlspatches_free (MidDLSPatches * patches);
|
|
|
|
|
|
/* MIDI Song Functions
|
|
* ===================
|
|
*/
|
|
|
|
/* Load MIDI song
|
|
*/
|
|
extern MidSong *mid_song_load (MidIStream * stream,
|
|
MidSongOptions * options);
|
|
|
|
/* Load MIDI song with specified DLS pathes
|
|
*/
|
|
extern MidSong *mid_song_load_dls (MidIStream * stream,
|
|
MidDLSPatches * patches,
|
|
MidSongOptions * options);
|
|
|
|
/* Set song amplification value
|
|
*/
|
|
extern void mid_song_set_volume (MidSong * song, int volume);
|
|
|
|
/* Seek song to the start position and initialize conversion
|
|
*/
|
|
extern void mid_song_start (MidSong * song);
|
|
|
|
/* Read WAVE data
|
|
*/
|
|
extern size_t mid_song_read_wave (MidSong * song, void *ptr, size_t size);
|
|
|
|
/* Seek song to specified offset in millseconds
|
|
*/
|
|
extern void mid_song_seek (MidSong * song, uint32 ms);
|
|
|
|
/* Get total song time in millseconds
|
|
*/
|
|
extern uint32 mid_song_get_total_time (MidSong * song);
|
|
|
|
/* Get current song time in millseconds
|
|
*/
|
|
extern uint32 mid_song_get_time (MidSong * song);
|
|
|
|
/* Get song meta data. Return NULL if no meta data found
|
|
*/
|
|
extern char *mid_song_get_meta (MidSong * song, MidSongMetaId what);
|
|
|
|
/* Destroy song
|
|
*/
|
|
extern void mid_song_free (MidSong * song);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* TIMIDITY_H */
|