| Description | Uses | Classes, Interfaces, Objects and Records | Functions and Procedures | Types | Constants | Variables | 
Contains Microsoft ACM wrapper and core VC wave device classes.
Version 2.5.2009.07: + new getUnVolume() method;
Version 2.5.2008.07: + new callback model; + SetVolume100()/GetVolume() for all wave components; + Silence detection built in into all wave components;
Version 2.5.2010.02: + new VAD mode based on 3GPP codec;
Version 2.5.2010.12: * jitter effect on WaveOut;
Version 2.5.2012.04: * ASIO;
| Name | Description | 
|---|---|
record unaAcmDetails | 
|
Class unaMMTimer | 
Multimedia timer wrapper class. | 
Class unaMsAcm | 
This class holds a list of drivers installed on the system. | 
Class unaMsAcmCodec | 
This class is wrapper over Windows Multimedia streams API. | 
Class unaMsAcmCodecHeader | 
This class stores the data used by MS ACM codec. | 
Class unaMsAcmDeviceHeader | 
Base class for storing the wave and stream headers of wave and ACM devices. | 
Class unaMsAcmDriver | 
List of installed drivers is maintained by unaMsAcm class, so usually there is no need to create/destroy the driver class explicitly. | 
Class unaMsAcmFilter | 
This class stores information about the given MS ACM filter. | 
Class unaMsAcmFilterTag | 
This class stores information about an ACM filter tag. | 
Class unaMsAcmFormat | 
This class stores information about the given MS ACM format. | 
Class unaMsAcmFormatTag | 
This class stores information about an ACM format tag. | 
Class unaMsAcmObject | 
This base class is designed to store an ACM object, such as format or filter. | 
Class unaMsAcmObjectTag | 
This base class is designed to store the information about an ACM object tag, such as format tag or filter tag. | 
Class unaMsAcmStreamDevice | 
This is abstract class used as a base for classes dealing with audio streams (codecs, waveIn and waveOut, mixers). | 
Class unaRiffStream | 
RIFF WAVE stream. | 
Class unaWaveDevice | 
This abstract class is used as base for unaWaveInDevice (recorder) and unaWaveOutDevice (playback) devices. | 
Class unaWaveExclusiveMixerDevice | 
This class performs exclusive mixing of input streams. | 
Class unaWaveInDevice | 
Use this class to record live audio. | 
Class unaWaveMixerDevice | 
This class performs software mixing of input streams. | 
Class unaWaveMultiStreamDevice | 
This is base class for devices working with more than two streams. | 
Class unaWaveOutDevice | 
Use this class to playback PCM audio stream. | 
Class unaWaveResampler | 
This class can resample audio stream from one PCM format to another. | 
Class unaWaveSoftwareDevice | 
This is base class for software devices, such as wave mixer. | 
function mmNoError(errorCode: MMRESULT): bool; | 
function mmGetErrorCodeText(errorCode: MMRESULT): string; | 
function mmGetErrorCodeTextEx(errorCode: MMRESULT): string; | 
function formatChoose(bufW: pACMFORMATCHOOSEW; const title: wString = ''; style: unsigned = ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT; enumFlag: unsigned = 0; enumFormat: pWAVEFORMATEX = nil): MMRESULT; | 
function formatChooseAlloc(var format: pWAVEFORMATEX; defFormatTag: unsigned = WAVE_FORMAT_PCM; defSamplesPerSec: unsigned = c_defSamplingSamplesPerSec; const title: wString = ''; style: unsigned = ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT; enumFlag: unsigned = 0; enumFormat: pWAVEFORMATEX = nil; formatSize: unsigned = 0; wndHandle: hWnd = 0): MMRESULT; | 
function formatIsPCM(format: pWAVEFORMATEX): bool; overload; | 
function formatIsPCM(format: pWAVEFORMATEXTENSIBLE): bool; overload; | 
function fillPCMFormat(var format: WAVEFORMATEX; samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; bitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels): pWAVEFORMATEX; overload; | 
function fillPCMFormat(samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; bitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels): WAVEFORMATEX; overload; | 
function fillPCMFormatExt(var format: PWAVEFORMATEXTENSIBLE; samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; containerSize: unsigned = c_defSamplingBitsPerSample; validBitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels; channelMask: DWORD = SPEAKER_DEFAULT): PWAVEFORMATEXTENSIBLE; overload; | 
function fillPCMFormatExt(var format: PWAVEFORMATEXTENSIBLE; const subtype: tGuid; samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; containerSize: unsigned = c_defSamplingBitsPerSample; validBitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels; channelMask: DWORD = SPEAKER_DEFAULT): PWAVEFORMATEXTENSIBLE; overload; | 
function fillFormatExt(var format: PWAVEFORMATEXTENSIBLE; source: pWAVEFORMATEX): PWAVEFORMATEXTENSIBLE; | 
function waveExt2wave(format: PWAVEFORMATEXTENSIBLE; var fmt: pWAVEFORMATEX; ignoreChannelLayout: bool = false; allocSize: uint = 0): bool; | 
function waveExt2str(format: PWAVEFORMATEXTENSIBLE): string; | 
function str2waveFormatExt(const str: string; var format: PWAVEFORMATEXTENSIBLE): bool; | 
function waveFormatExt2str(format: PWAVEFORMATEXTENSIBLE): string; | 
function duplicateFormat(source: pWAVEFORMATEX; var dup: pWAVEFORMATEX; allocSize: unsigned = 0): unsigned; overload; | 
function duplicateFormat(source: pWAVEFORMATEX; var dup: PWAVEFORMATEXTENSIBLE; allocSize: unsigned = 0): unsigned; overload; | 
function duplicateFormat(source: PWAVEFORMATEXTENSIBLE; var dup: PWAVEFORMATEXTENSIBLE; allocSize: unsigned = 0): unsigned; overload; | 
function duplicateFormat(source: PWAVEFORMATEXTENSIBLE; var dup: pWAVEFORMATEX; allocSize: unsigned = 0): unsigned; overload; | 
function getFormatTagExt(fmt: PWAVEFORMATEXTENSIBLE): DWORD; | 
function formatEqual(const format1, format2: WAVEFORMATEX): bool; | 
function sampling2str(samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; bitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels): string; | 
function formatTag2str(formatTag: unsigned): string; | 
function format2str(const format: WAVEFORMATEX): string; | 
function newWaveHdr(device: unaWaveDevice; size: unsigned; data: pointer = nil; prepare: bool = true): unaWaveHeader; | 
function removeWaveHdr(var hdr: unaWaveHeader; device: unaWaveDevice): bool; | 
tunaAcmDetailsType = (...); | 
punaAcmDetails = ˆunaAcmDetails; | 
unaWaveDataEvent = procedure (sender: tObject; data: pointer; size: Cardinal) of object; | 
unaWaveOnThresholdEvent = procedure (sender: tObject; var passThrough: bool) of object; | 
unaWaveGetProviderFormatEvent = procedure (var f: PWAVEFORMATEXTENSIBLE) of object; | 
unaWaveInSDMethods = (...); | 
unaDspSignalData 	= array[byte] of pdspl_float; | 
unaDspSignalDataSize	= array[byte] of unsigned; | 
unaAcmCodecDriverMode = (...); | 
unaWaveHeader = pWAVEHDR; | 
unaVCWaveEngine = (...); | 
unaOnRiffStreamIsDone = procedure(sender: tObject) of object; | 
c_defSamplingBitsPerSample	= 16; | 
c_defSamplingChannelMask      = KSAUDIO_SPEAKER_STEREO; | 
c_defSamplingNumChannels	= 2; | 
c_defSamplingSamplesPerSec	= 44100; | 
c_max_wave_headers	= 200; | 
c_unaRiffFileType_mpeg	= 2; | 
c_unaRiffFileType_riff	= 1; | 
c_unaRiffFileType_unknown	= 0; | 
c_defChunksPerSecond: unsigned		= 50; | 
c_defRecordingChunksAheadNum: unsigned	= 10; | 
c_waveOut_unpause_after: unsigned	= 2; | 
function mmNoError(errorCode: MMRESULT): bool; | 
| 
 Returns true if specified errorCode is equal to MMSYSERR_NOERROR.  | 
function mmGetErrorCodeTextEx(errorCode: MMRESULT): string; | 
| 
 Same as mmGetErrorCodeText(), but additionally prefixes the result with numeric presentation of error code. Also encloses text in ( ) pair.  | 
function formatChoose(bufW: pACMFORMATCHOOSEW; const title: wString = ''; style: unsigned = ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT; enumFlag: unsigned = 0; enumFormat: pWAVEFORMATEX = nil): MMRESULT; | 
| 
 Helper function for acm_formatChoose routine. Fills cbStruct, fdwStyle and pszTitle members before calling Win API.  | 
function formatChooseAlloc(var format: pWAVEFORMATEX; defFormatTag: unsigned = WAVE_FORMAT_PCM; defSamplesPerSec: unsigned = c_defSamplingSamplesPerSec; const title: wString = ''; style: unsigned = ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT; enumFlag: unsigned = 0; enumFormat: pWAVEFORMATEX = nil; formatSize: unsigned = 0; wndHandle: hWnd = 0): MMRESULT; | 
| 
 Displays format choose dialog. Allocates wave format if necessary.  | 
function formatIsPCM(format: pWAVEFORMATEX): bool; overload; | 
function formatIsPCM(format: pWAVEFORMATEXTENSIBLE): bool; overload; | 
function fillPCMFormat(var format: WAVEFORMATEX; samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; bitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels): pWAVEFORMATEX; overload; | 
| 
 Fills the WAVEFORMATEX structure according to the specified sampling parameters. Returns pointer on format parameter (result := @format).  | 
function fillPCMFormat(samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; bitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels): WAVEFORMATEX; overload; | 
| 
 Fills the WAVEFORMATEX structure according to the specified sampling parameters. Returns filled PCM format.  | 
function fillPCMFormatExt(var format: PWAVEFORMATEXTENSIBLE; samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; containerSize: unsigned = c_defSamplingBitsPerSample; validBitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels; channelMask: DWORD = SPEAKER_DEFAULT): PWAVEFORMATEXTENSIBLE; overload; | 
| 
 Fills the PWAVEFORMATEXTENSIBLE structure according to the specified sampling parameters. Returns pointer on format parameter (result := @format).  | 
function fillPCMFormatExt(var format: PWAVEFORMATEXTENSIBLE; const subtype: tGuid; samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; containerSize: unsigned = c_defSamplingBitsPerSample; validBitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels; channelMask: DWORD = SPEAKER_DEFAULT): PWAVEFORMATEXTENSIBLE; overload; | 
function fillFormatExt(var format: PWAVEFORMATEXTENSIBLE; source: pWAVEFORMATEX): PWAVEFORMATEXTENSIBLE; | 
function waveExt2wave(format: PWAVEFORMATEXTENSIBLE; var fmt: pWAVEFORMATEX; ignoreChannelLayout: bool = false; allocSize: uint = 0): bool; | 
function waveExt2str(format: PWAVEFORMATEXTENSIBLE): string; | 
function str2waveFormatExt(const str: string; var format: PWAVEFORMATEXTENSIBLE): bool; | 
function waveFormatExt2str(format: PWAVEFORMATEXTENSIBLE): string; | 
function duplicateFormat(source: pWAVEFORMATEX; var dup: pWAVEFORMATEX; allocSize: unsigned = 0): unsigned; overload; | 
| 
 – –  | 
function duplicateFormat(source: pWAVEFORMATEX; var dup: PWAVEFORMATEXTENSIBLE; allocSize: unsigned = 0): unsigned; overload; | 
function duplicateFormat(source: PWAVEFORMATEXTENSIBLE; var dup: PWAVEFORMATEXTENSIBLE; allocSize: unsigned = 0): unsigned; overload; | 
function duplicateFormat(source: PWAVEFORMATEXTENSIBLE; var dup: pWAVEFORMATEX; allocSize: unsigned = 0): unsigned; overload; | 
function getFormatTagExt(fmt: PWAVEFORMATEXTENSIBLE): DWORD; | 
function formatEqual(const format1, format2: WAVEFORMATEX): bool; | 
| 
 Returns true if two formats are equal.  | 
function sampling2str(samplesPerSecond: unsigned = c_defSamplingSamplesPerSec; bitsPerSample: unsigned = c_defSamplingBitsPerSample; numChannels: unsigned = c_defSamplingNumChannels): string; | 
| 
 Returns string representation of PCM sampling parameters.  | 
function formatTag2str(formatTag: unsigned): string; | 
| 
 Returns string representation of some audio format tags, or #NNN if tag is unknown.  | 
function format2str(const format: WAVEFORMATEX): string; | 
| 
 Returns string representation of audio format.  | 
function newWaveHdr(device: unaWaveDevice; size: unsigned; data: pointer = nil; prepare: bool = true): unaWaveHeader; | 
| 
 Creates new wave header. 
 Parameters
 ReturnsNew wave header.  | 
function removeWaveHdr(var hdr: unaWaveHeader; device: unaWaveDevice): bool; | 
| 
 Destroys header object. 
 Parameters
 ReturnsTrue if successfull (header is not nil).  | 
tunaAcmDetailsType = (...); | 
| 
 ACM Details enumeration. Values
  | 
punaAcmDetails = ˆunaAcmDetails; | 
| 
 ACM Details record.  | 
unaWaveOnThresholdEvent = procedure (sender: tObject; var passThrough: bool) of object; | 
| 
 Fired when switching from silence to voice and back.  | 
unaWaveGetProviderFormatEvent = procedure (var f: PWAVEFORMATEXTENSIBLE) of object; | 
| 
 Returns external provider format  | 
unaDspSignalData 	= array[byte] of pdspl_float; | 
unaDspSignalDataSize	= array[byte] of unsigned; | 
unaAcmCodecDriverMode = (...); | 
| 
 – – Values
  | 
unaWaveHeader = pWAVEHDR; | 
unaVCWaveEngine = (...); | 
| 
 DS is not supported yet. Values
  | 
unaOnRiffStreamIsDone = procedure(sender: tObject) of object; | 
c_defSamplingBitsPerSample	= 16; | 
c_defSamplingChannelMask      = KSAUDIO_SPEAKER_STEREO; | 
c_defSamplingNumChannels	= 2; | 
c_defSamplingSamplesPerSec	= 44100; | 
c_max_wave_headers	= 200; | 
| 
 Max number of headers to utilize  | 
c_unaRiffFileType_mpeg	= 2; | 
c_unaRiffFileType_riff	= 1; | 
c_unaRiffFileType_unknown	= 0; | 
c_defChunksPerSecond: unsigned		= 50; | 
| 
 Number of chunks per second (in real time mode) Default value was changed from 20 to 25 (for 11025 rate to be handled better) AUG'03: changed to 50, for 11025 it will be 49  | 
c_defRecordingChunksAheadNum: unsigned	= 10; | 
| 
 Number of chunks to put into waveIn recording queue (does not afftect the latency). Default value is 10  | 
c_waveOut_unpause_after: unsigned	= 2; | 
| 
 Number of chunks to put into waveOut before unpausing. Default value is 2  | 
(c) 2012 Lake of Soft