Mercurial > hg > dmlib
view jssmix.h @ 69:7b97df6f8a97
Add jssClose() in the shutdown.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 01 Oct 2012 13:42:20 +0300 |
parents | 2edda27f951c |
children | 1ba202b448e0 |
line wrap: on
line source
/* * miniJSS - Mixing device and channel handling * Programmed and designed by Matti 'ccr' Hamalainen * (C) Copyright 2006-2012 Tecnic Software productions (TNSP) */ #ifndef JSSMIX_H #define JSSMIX_H #include "jss.h" //#define DBG(...) do { fprintf(stderr, __VA_ARGS__); } while (0) #define DBG(...) do { /* stub */ } while (0) // Mixing limits #define JVM_LIMIT_16_POS (32767) #define JVM_LIMIT_16_NEG (-32767) #define JVM_ADD_16 (32768) #define JMIXER_ADDBUF_TYPE Sint32 // A channel data structure typedef struct { DMFixedPoint chPos, // Current position in sample, 32:32 fixpoint chDeltaO; // Delta in 32:32 UNSIGNED! (chDirection) int chFreq; // Frequency of sampel in Hz Sint32 chSize, // Length of sample in UNITS chLoopS, // Loop start in UNITS chLoopE; // Loop end in UNITS void *chData; // Pointer to data BOOL chPlaying, // TRUE = playing chMute, // TRUE = muted chDirection; // TRUE = playing forwards, FALSE = backwards int chFlags; // Flags int chVolume, // Volume chPanning; // Panning JMIXER_ADDBUF_TYPE chPrevR[5], chPrevL[5]; } JSSChannel; // Channel table typedef int JSSChannelTable[jsetNChannels]; // Virtual software mixer "device" structure typedef struct _JSSMixer JSSMixer; struct _JSSMixer { int outFormat, outChannels, outFreq, globalVol; JSSChannel channels[jsetNChannels]; int addBufSize; JMIXER_ADDBUF_TYPE *addBuffer; // Callback handling int cbFreq, cbCounter; void *cbData; void (*cbFunction)(void *, void *); // Mixing routine pointers int (*jvmMixChannel_FW)(JSSMixer *, JSSChannel *, JMIXER_ADDBUF_TYPE *, const int, const Sint32); int (*jvmMixChannel_BW)(JSSMixer *, JSSChannel *, JMIXER_ADDBUF_TYPE *, const int, const Sint32); void (*jvmPostProcess)(JMIXER_ADDBUF_TYPE *, void *, const int); // Device locking #ifdef JSS_SUP_THREADS DMMutex *mutex; #endif }; /* Enums */ enum { JMIX_AUTO = 0, JMIX_C, JMIX_MMX, JMIX_SSE }; /* Main routines */ JSSMixer * jvmInit(const int outFormat, const int nChannels, const int outFreq, const int mixerID); int jvmClose(JSSMixer *mixer); int jvmSetCallback(JSSMixer *mixer, void (*cbFunction)(void *, void *), void *cbData); void jvmRemoveCallback(JSSMixer *mixer); int jvmSetCallbackFreq(JSSMixer *mixer, const int cbFreq); Sint32 jvmGetLastCBBufPos(JSSMixer *mixer, const int cbHandle); Sint32 jvmGetNextCBBufPos(JSSMixer *mixer, const int cbHandle); int jvmGetSampleSize(JSSMixer *mixer); int jvmGetSampleRes(JSSMixer *mixer); void jvmRenderAudio(JSSMixer *mixer, void *mixBuffer, const int mixLength); /* int jvmAddCallback(JSSMixer *mixer, void (*cbFunction)(JSSMixer *, void *)); int jvmRemoveCallback(JSSMixer *mixer, int cbHandle); int jvmSetCallbackFreq(JSSMixer *mixer, int cbHandle, int cbFreq); int jvmAllocChannels(JSSMixer *mixer, int nChannels); int jvmFreeChannels(JSSMixer *mixer, int iHandle); int jvmGetChannelTable(JSSMixer *mixer, int iHandle, JSSChannelTable *pTable); */ /* Channel manipulation routines */ void jvmPlay(JSSMixer *mixer, const int channel); void jvmStop(JSSMixer *mixer, const int channel); void jvmSetSample(JSSMixer *mixer, const int channel, void *data, const Sint32 size, const Sint32 loopS, const Sint32 loopE, const int flags); void jvmSetFreq(JSSMixer *mixer, const int channel, const int freq); int jvmGetFreq(JSSMixer *mixer, const int channel); void jvmSetVolume(JSSMixer *mixer, const int channel, const int volume); int jvmGetVolume(JSSMixer *mixer, const int channel); void jvmSetPos(JSSMixer *mixer, const int channel, const Sint32 pos); Sint32 jvmGetPos(JSSMixer *mixer, const int channel); void jvmSetPan(JSSMixer *mixer, const int channel, const int panning); int jvmGetPan(JSSMixer *mixer, const int channel); void jvmMute(JSSMixer *mixer, const int channel, const BOOL mute); void jvmClear(JSSMixer *mixer, const int channel); void jvmClearChannels(JSSMixer *mixer); void jvmSetGlobalVol(JSSMixer *mixer, const int volume); int jvmGetGlobalVol(JSSMixer *mixer); #endif // JSSMIX_H