/* * (c) Copyright Ascensio System SIA 2010-2014 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ #pragma once #include #include "mmsystem.h" #include #include #include #include #include #include "ASCmmreg.h" extern SAFEARRAY* SafeArrayCreateVector(VARTYPE vt,unsigned int size); extern HRESULT SafeArrayGetUBound(SAFEARRAY* sa,long lo,__int64* size); extern LPCSTR OLE2T_my(BSTR bstrStr); extern BSTR T2OLE_my(LPSTR ansiStr); extern void CheckChannelsMask(long& Channels,DWORD& Mask); extern void SetChannelsMaskPreset(long& Channels,DWORD& Mask); extern inline CComBSTR GetSampleRateStr(long SampleRate); extern inline CComBSTR GetSampleSizeStr(long SampleSize); extern inline CComBSTR GetChannelsStr(long Channels,DWORD ChannelsMask); extern inline CComBSTR GetBitrateStr(double Bitrate,double BitrateMax=0,double BitrateAvg=0); extern __int64 abs64(__int64 Value); extern __int64 xabs64(__int64 Value); #pragma pack(1) struct WAVEFORMATEX_LPCM { WAVEFORMATEX format; DWORD ChannelsMask1; WORD Group2Enabled; DWORD OffsetGroup; DWORD ChannelsMask2; WORD Reserved[2]; }; struct OGGWAVEFORMAT { WAVEFORMATEX wfx; DWORD dwVorbisACMVersion; DWORD dwLibVorbisVersion; DWORD dwChannelsMask; }; struct WAVEFORMATEX_AC3 { WAVEFORMATEX wfx; DWORD dwChannelMask; }; struct WAVEFORMATEX_AAC { WAVEFORMATEX wfx; DWORD dwChannelMask; WORD wVersion; WORD wProfile; BYTE arnExtraData[]; }; struct WAVEFORMAT_FLAC { WAVEFORMATEX wfx; DWORD dwChannelsMask; }; struct WAVEFORMATEX_APPLE_LOSSLESS { WAVEFORMATEX wfx; DWORD dwChannelsMask; BYTE arnExtraData[]; }; struct WAVEFORMAT_BPCM { WAVEFORMATEX wfx; DWORD dwChannelsMask; }; #pragma pack() typedef G723_ADPCMWAVEFORMAT G726_ADPCMWAVEFORMAT; struct _ExtraInfo { CComBSTR Copyright; CComBSTR Title; CComBSTR Artist; CComBSTR Album; CComBSTR Comments; CComBSTR Composer; CComBSTR URL; CComBSTR EncodedBy; CComBSTR Genre; CComBSTR OriginalArtist; long Year; long Track; struct _Additional { CComBSTR Name; CComBSTR Value; _Additional() { Name = ""; Value = ""; } }; struct _Marker { double Position; double Length; CComBSTR Note; CComBSTR Label; _Marker() { Position = 0; Length = 0; Note = ""; Label = ""; } }; CAtlArray<_Additional> Additional; CAtlArray<_Marker> Marker; IPictureDisp* Picture; _ExtraInfo() { Copyright = ""; Title = ""; Artist = ""; Album = ""; Comments = ""; Composer = ""; URL = ""; EncodedBy = ""; Genre = ""; OriginalArtist = ""; Year = 0; Track = 0; Picture=NULL; } void Clear() { Copyright=""; Title=""; Artist=""; Album=""; Comments=""; Composer=""; URL=""; EncodedBy=""; Genre=""; OriginalArtist=""; Year=0; Track=0; if (Picture) { Picture->Release(); } Picture=NULL; Additional.RemoveAll(); Marker.RemoveAll(); } }; #define RANGE_NONE 0 #define RANGE_48_DB 1 #define RANGE_96_DB 2 #define RANGE_144_DB 3 #define RANGE_192_DB 4 #define NORMALPLAY 1 #define PLAYTOEND 2 #define PLAYLOOPED 3 #define READ 1 #define READWRITE 2 #define ACM_DRIVER_OUT 1 #define X_AUDIO 2 #define MAD 3 #define ACM_DRIVER_IN 1 #define LAME 2 #define MONO 1 #define STEREO 2 #define CHANNELS_2_1 3 #define CHANNELS_3_0 4 #define CHANNELS_3_1 5 #define CHANNELS_2_2 6 #define CHANNELS_3_2 7 #define CHANNELS_4_1 8 #define CHANNELS_5_1 9 #define CHANNELS_4_2 10 #define CHANNELS_5_2 11 #define CHANNELS_7_1 12 #define BPS_2_BIT 2 #define BPS_3_BIT 3 #define BPS_4_BIT 4 #define BPS_5_BIT 5 #define BPS_8_BIT 8 #define BPS_16_BIT 16 #define BPS_24_BIT 24 #define BPS_32_BIT 32 #define VBR_NONE -1 #define VBR_DEFAULT 0 #define VBR_OLD 1 #define VBR_NEW 2 #define VBR_MTRH 3 #define VBR_ABR 4 #define SIMPLY 1 #define JOINTSTEREO 2 #define FORCEDJOINTSTEREO 3 #define DUALCHANNEL 4 #define F_ALL 1 #define F_MP3 2 #define F_MP2 3 #define F_OGG 4 #define F_VOX 5 #define F_G721 6 #define F_G723 7 #define F_G726 8 #define F_G723_1 9 #define F_G729 10 #define F_SPEEX 11 #define F_MPC 12 #define F_AC3 14 #define F_MSADPCM 15 #define F_IMAADPCM 16 #define F_ALAW 17 #define F_ULAW 18 #define F_GSM 19 #define F_PCM 20 #define F_DTS 21 #define F_AAC 22 #define F_AMR 23 #define F_QCELP 25 #define F_QUICKTIME 30 #define F_FLAC 36 #define F_WMA 40 #define F_LPCM 43 #define F_APPLELOSSLESS 44 #define F_QDM2 45 #define F_MLP 46 #define F_BPCM 47 #define F_TRUEHD 48 #define F_TRANSF 999 #define F_LastSet 1000 #define rawALAW 1 #define rawULAW 2 #define rawGSM 3 #define rawMS_ADPCM 4 #define rawIMA_ADPCM_MS 5 #define rawIMA_ADPCM_QT 6 #define aifcALAW 1 #define aifcULAW 2 #define aifcGSM 3 #define aifcIMA_ADPCM 4 #define aifcG721 5 #define aifcG723 6 #define aifcVOX 7 #define CURRENT_POS 1 #define END_POS 2 #define BEGIN_POS 3 #define LOWPASSFILTER 1 #define HIGHPASSFILTER 2 #define NOTCHFILTER 3 #define BANDPASSFILTER 4 #define LOWSHELFFILTER 5 #define HIGHSHELFFILTER 6 #define DELAY 1 #define PHASER 2 #define FLANGER 3 #define CHORUS 4 #define COMPRESSOR 5 #define EXPANDER 6 #define FASTRESAMPLING 1 #define QUALITYRESAMPLING 2 #define TRIM_LEFT 0 #define TRIM_RIGHT 1 #define TRIM_BOTH 2 #define WAVEFORM 0 #define SPECTRAL 1 #define ENVELOPE 2 #define RECORD_CLEAR 1 #define RECORD_MIX 2 static const long g_carlModeAMR[] = { 4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200, 0 }; static const long g_carlModeAWB[] = { 6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850 }; #define VORBISACM_VERSION 0x20020201 #define LIBVORBIS_VERSION 0x20020717