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 */