1 /* 2 $VER: sound.h 51.16 (15.12.2025) 3 */ 4 5 /* sound objects methods and attributes */ 6 7 #ifndef CLASSES_MULTIMEDIA_SOUND_H 8 #define CLASSES_MULTIMEDIA_SOUND_H 9 10 #include <classes/multimedia/multimedia.h> 11 12 /* formats */ 13 14 #define MMF_AUDIO_PCM8 (MMF_AUDIOMASK | 1) /* 8-bit PCM integer signed */ 15 #define MMF_AUDIO_PCM16BE (MMF_AUDIOMASK | 2) /* 16-bit PCM integer signed big endian */ 16 #define MMF_AUDIO_PCM24BE (MMF_AUDIOMASK | 3) /* 24-bit PCM integer signed big endian */ 17 #define MMF_AUDIO_PCM32BE (MMF_AUDIOMASK | 4) /* 32-bit PCM integer signed big endian */ 18 #define MMF_AUDIO_PCM16LE (MMF_AUDIOMASK | 5) /* 16-bit PCM integer signed little endian */ 19 #define MMF_AUDIO_PCM24LE (MMF_AUDIOMASK | 6) /* 24-bit PCM integer signed little endian */ 20 #define MMF_AUDIO_PCM32LE (MMF_AUDIOMASK | 7) /* 32-bit PCM integer signed little endian */ 21 #define MMF_AUDIO_PCM8U (MMF_AUDIOMASK | 8) /* 8-bit PCM integer unsigned */ 22 #define MMF_AUDIO_MPEG (MMF_AUDIOMASK | 9) /* MPEG audio, norm 1, 2, 2.5, layer II, III */ 23 #define MMF_AUDIO_PCMF32LE (MMF_AUDIOMASK | 10) /* 32-bit PCM floating point low endian */ 24 #define MMF_AUDIO_MULAW (MMF_AUDIOMASK | 11) /* 8-bit nonlinear mu-law PCM */ 25 #define MMF_AUDIO_ALAW (MMF_AUDIOMASK | 12) /* 8-bit nonlinear A-law PCM */ 26 #define MMF_AUDIO_IMA_ADPCM (MMF_AUDIOMASK | 13) /* 3/4 bit IMA ADPCM */ 27 #define MMF_AUDIO_PCMF32BE (MMF_AUDIOMASK | 14) /* 32-bit PCM floating point big endian */ 28 #define MMF_AUDIO_MS_ADPCM (MMF_AUDIOMASK | 15) /* 4 bit MS ADPCM */ 29 #define MMF_AUDIO_FIB_DPCM (MMF_AUDIOMASK | 16) /* 4 bit Fibonacci delta PCM (IFF 8SVX) */ 30 #define MMF_AUDIO_EXP_DPCM (MMF_AUDIOMASK | 17) /* 4 bit exponential delta PCM (IFF 8SVX) */ 31 #define MMF_AUDIO_PCM16UBE (MMF_AUDIOMASK | 18) /* 16-bit PCM integer unsigned big endian */ 32 #define MMF_AUDIO_PCM16ULE (MMF_AUDIOMASK | 19) /* 16-bit PCM integer unsigned little endian */ 33 #define MMF_AUDIO_FLAC (MMF_AUDIOMASK | 20) /* encoded FLAC data stream */ 34 #define MMF_AUDIO_PCM24UBE (MMF_AUDIOMASK | 21) /* 24-bit PCM integer unsigned big endian */ 35 #define MMF_AUDIO_PCM24ULE (MMF_AUDIOMASK | 22) /* 24-bit PCM integer unsigned little endian */ 36 #define MMF_AUDIO_PCM32UBE (MMF_AUDIOMASK | 23) /* 32-bit PCM integer unsigned big endian */ 37 #define MMF_AUDIO_PCM32ULE (MMF_AUDIOMASK | 24) /* 32-bit PCM integer unsigned little endian */ 38 #define MMF_AUDIO_QOA (MMF_AUDIOMASK | 25) /* Quite OK Audio */ 39 #define MMF_AUDIO_VORBIS (MMF_AUDIOMASK | 26) /* Ogg Vorbis */ 40 #define MMF_AUDIO_IFFSMUS (MMF_AUDIOMASK | 27) /* IFF SMUS */ 41 42 /* methods */ 43 44 /* backward compatibility for obsolete methods */ 45 46 #define MMM_Sound_SignalAtEnd MMM_SignalAtEnd 47 48 /* attributes */ 49 50 /*--------------------------------*/ 51 /* applicability: */ 52 /* I - init */ 53 /* S - set on object */ 54 /* G - get from object */ 55 /* P - set on port */ 56 /* Q - get from port */ 57 /* . - not applicable */ 58 /* ? - class dependent */ 59 /* Refer to autodocs for details. */ 60 /*--------------------------------*/ 61 62 63 #define MMA_Sound_Channels (MMA_Dummy + 300) /* [??G?Q] number of sound channels */ 64 #define MMA_Sound_SampleRate (MMA_Dummy + 301) /* [??G?Q] sampling rate */ 65 66 /* SNDA_FrameCount attribute is 64-bit, it takes a pointer to QUAD. */ 67 68 #define MMA_Sound_FrameCount (MMA_Dummy + 302) /* [??G?Q] total frame count */ 69 #define MMA_Sound_Volume (MMA_Dummy + 303) /* [??G?Q] default sound volume (max if not specified) */ 70 #define MMA_Sound_BitsPerSample (MMA_Dummy + 304) /* [??G.Q] 64 max */ 71 #define MMA_Sound_AhiUnit (MMA_Dummy + 305) /* [I.G.Q] audio.output */ 72 #define MMA_Sound_LoopedPlay (MMA_Dummy + 306) /* [ISGPQ] audio.output */ 73 #define MMA_Sound_FrameScan (MMA_Dummy + 307) /* [I....] various demuxers/decoders */ 74 #define MMA_Sound_FrameScanHook (MMA_Dummy + 308) /* [I....] mpegaudio.demuxer */ 75 #define MMA_Sound_Mute (MMA_Dummy + 309) /* [ISGPQ] audio.output */ 76 77 /*----------------------------------------------------------------------------*/ 78 /* fir.filter */ 79 /*----------------------------------------------------------------------------*/ 80 81 #define MMA_FirFilter_Table (MMA_Dummy + 1000) /* filter taps */ 82 #define MMA_FirFilter_Taps (MMA_Dummy + 1001) /* number of filter taps */ 83 84 /*----------------------------------------------------------------------------*/ 85 /* soundloop.filter */ 86 /*----------------------------------------------------------------------------*/ 87 88 #define MMA_SoundLoop_Start (MMA_Dummy + 1002) /* [I....] */ 89 #define MMA_SoundLoop_End (MMA_Dummy + 1003) /* [I....] */ 90 #define MMA_SoundLoop_Count (MMA_Dummy + 1004) /* [I....] */ 91 92 /*----------------------------------------------------------------------------*/ 93 /* normalize.filter */ 94 /*----------------------------------------------------------------------------*/ 95 96 #define MMA_Normalize_Gain (MMA_Dummy + 1005) /* [..G.Q], DOUBLE*, normalizer gain */ 97 98 /*----------------------------------------------------------------------------*/ 99 /* gapless.filter */ 100 /*----------------------------------------------------------------------------*/ 101 102 #define MMA_Gapless_ActiveInput (MMA_Dummy + 1006) /* [..G.Q] active input port */ 103 104 /*----------------------------------------------------------------------------*/ 105 /* audiomixer.filter */ 106 /*----------------------------------------------------------------------------*/ 107 108 #define MMA_AudioMixer_Inputs (MMA_Dummy + 1007) /* [I.G.Q] number of inputs */ 109 #define MMA_AudioMixer_Balance (MMA_Dummy + 1008) /* [ISGPQ] input or master balance */ 110 #define MMA_AudioMixer_GainMatrix (MMA_Dummy + 1008) /* [...PQ] input gain matrix */ 111 #define MMA_AudioMixer_StopOnSilence (MMA_Dummy + 1009) /* [ISGPQ] error at end of all inputs */ 112 #define MMA_AudioMixer_Volume (MMA_Dummy + 1010) /* [ISGPQ] input or master volume */ 113 #define MMA_AudioMixer_Mode (MMA_Dummy + 1011) /* [ISG.Q] mixing mode */ 114 115 116 /*============================================================================*/ 117 /* SPECIAL VALUES FOR ATTRIBUTES */ 118 /*============================================================================*/ 119 120 #define MMV_Sound_FrameScan_Never 0 121 #define MMV_Sound_FrameScan_IfNeeded 1 122 #define MMV_Sound_FrameScan_Always 2 123 124 125 /* MMA_Sound_FrameScanHook hook message. */ 126 127 struct FrameScanHookMsg 128 { 129 QUAD BytesTotal; // total length of the scanned stream in bytes 130 QUAD BytesScanned; // number of bytes scanned so far 131 QUAD FramesFound; // number of compressed (MPEG) frames detected 132 QUAD AudioFound; // number of so far scanned PCM audio frames (after decoding) 133 LONG FrameBitrate; // bitrate of the last scanned frame, in kilobits per second 134 }; 135 136 137 138 #endif /* CLASSES_MULTIMEDIA_SOUND_H */