# TAK SDK

Software Development Kit for TAK, (T)om's lossless (A)udio (K)ompressor.

Version: TAK SDK 2.3.3, 2022-06-30

Copyright 2007 by Thomas Becker, D-49080 Osnabrück.
All rights reserved.

## About

The SDK is intended to enable other developers to use TAK's technology in their own applications. It consists of a Dynamic Link Library for Microsoft Windows (DLL) as well as header files for Borland Delphi (Pascal) and C.

This version is limited to decoding functions. Once it has stood the test of time in practical use, an extended version with encoding functions will follow.

The library is compatible to the TAK versions 1.0 to 2.3.3.

#### Files

- The "Doc" directory contains the documentation. The main file is "Sdk.html".
- The "Header" directory contains the header files for the decoder library "tak_deco_lib.dll".
- The "Source" directory contains parts of TAK's source code.

#### Links and contact information

My homepage provides up-to-date information about TAK, sadly only in German at present.

If you want to contact me via e-mail, please keep in mind that I won't always have the time to answer.

I am regularly active in the "Lossless Audio Compression" forum at Hydrogenaudio; therefore it is a good place to get information about TAK or ask questions.

#### Thanks to...

Many thanks for the energetic collaboration go to

- Holger Stenger, who tested parts of the library, created a *.lib and gave good advice for interface improvements, and to
- Thomas Weiler (alias Silversight at Hydrogenaudio.org), who fortunately took pleasure in translating my often "longish" wording from German to English, and to
- Wieslaw Soltes (alias wisodev at Hydrogenaudio.org), who very quickly wrote the first file decoding application based upon the SDK to verify it's function.

## Terms of use

#### License

This software is provided as FREEWARE, but only for private, non-commercial use. It's also free for educational and scientific use and for use in charity and humanitarian organisations.

The use of this software in a commercial application is only allowed with prior written approval by the author (Thomas Becker).

#### Disclaimer of warranty

The software is provided "as is" without warranty of any kind. To the maximum extent permitted by applicable law, the author further disclaims all warranties, including without limitation any implied warranties of merchantability, fitness for a particular purpose, and non-infringement. The entire risk arising out of the use or performance of the product and documentation remains with recipient.

To the maximum extent permitted by applicable law, in no event shall the author be liable for any consequential, incidental, direct, indirect, special, punitive, or other damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of this agreement or the use of or inability to use the product, even if the author has been advised of the possibility of such damages.

#### Distribution

The software may be freely distributed provided that it is not modified and the original archive remains intact with all accompanying files, and provided that no fee is charged (except for any reasonable fees necessary to cover costs of distribution media).

It is permitted to distribute the binary libraries (DLLs) separated from the rest of the SDK along with a compiled, non-commercial application, provided that the libraries used remain unmodified, discrete files with their original file names.

For the end user, it is recommended to refer to the official download locations for up-to-date library modules.

# History

### V2.3.3 / 22-06-30

Interface changes:

- The pascal declaration of the functions tak_SSD_Create_FromFile, tak_SSD_Create_FromFileW and tak_SSD_Create_FromStream has changed. The parameter AOptions is now var instead of const. This is technically equivalent for the 32-bit version (in both cases a pointer would be passed) and required for the 64-bit version.

### V2.3.2 / 22-05-06

Resources:

- Long overdue update of the documentation.

Interface changes:

- New function tak_SSD_Create_FromFileW with support for unicode file pathes.
- New function tak_SSD_GetMD5 to retrieve the MD5 checksum of the audio data from the meta data.
- New function tak_SSD_GetStreamInfo_V22 to retrieve extended information about the stream.
- New types TtakAnsiChar and TtakWideChar for 8 respectively 16 bit wide characters, among others used for ANSI (Windows codepage) respectively unicode file pathes.
- Several new types, constants and a function to provide extended information about multi channel audio formats.
- New cpu flags: tak_Cpu_SSE2 to tak_Cpu_AVX2.

Important: "tak_deco_lib.lib" has not yet been updated and therefore does not contain definitions for the new functions. Sorry, i currently don't have the right tools at hand (e.g. Visual Studio).

### V1.1.1 / 9-03-11

Resources:

- German documentation removed.
- Source for TAK's container added.

Interface changes:

- New flag tak_ssd_opt_CheckMd5 in the structure TtakSSDOptions to enable the MD5 check of the decoded audio data.

### V1.1.0 / 8-12-21

Interface changes (Adaptions for TAK 1.1.0):

- Two constants for frame sizes (Ttak_str_FrameSizeTypes) removed: tak_FrameSizeType_6144 and tak_FrameSizeType_12288.

### V1.0.6 / 8-03-11

The library "tak_deco_lib.dll" is no longer part of the SDK.

### V1.0.5 / 7-12-05

Internal modifications of the bundled "tak_deco_lib.dll" (now V1.0.6):

New features to support TAK 1.0.3:

- The decoder had to be modified to guarantee error robustness (decoding through errors) for files created by pipe encoding with the -ihs (ignore header size) switch applied.

Interface changes (Adaptions for TAK 1.0.3):

- The tak_Preset_xxx-constants have been removed from the include files. TAK's presets are now named purely numerical (no more Turbo, Fast...).

### V1.0.4 / 7-11-05

Internal modifications and fixes of the bundled "tak_deco_lib.dll" (now V1.0.5):

New features to support TAK 1.0.2:

- Support for frame sizes of 512, 1024 and 2048 samples.
- Support for the additional preset INSANE.

Bug fixes:

- The decoder is expected to process any (damaged) data without any problems. But i have found and corrected two cases, where the decoder could crash. The chance for this was less than 1 : 1000 (for damaged files only!).
- In one place i used an invalid flag combination in a call of Windows' VirtualFree().

Interface changes (Adaptions for TAK 1.0.2):

- Added constants for the new frame sizes (Ttak_str_FrameSizeTypes): tak_FrameSizeType_512 to tak_FrameSizeType_12288.
- Added constant for the new preset INSANE (TtakPresets): tak_Preset_Insane.

Interface Compatibility:

- The decoder functions tak_SSD_GetStreamInfo and tak_SSD_GetEncoderInfo may now return the new values for the frame size (Ttak_str_FrameSizeTypes) and the encoder preset/profile (TtakPresets) which have been introduced with TAK 1.0.2 (see "Interface changes").

### V1.0.3 / 7-04-28

Internal modifications and fixes of the bundled "tak_deco_lib.dll" (now V1.0.4):

- The memory manager was not thread safe. Multithreaded applications using more than one decoder instance simultaneously could crash. This was most likely to happen with multi-core systems.
- Fix of a minor multithreading issue, which could cause suboptimal performance and possibly crashes (in very rare cases). The fix itself is not optimal performancewise; i will improve it when i have more time.

### V1.0.2 / 7-04-14

Internal modifications and fixes of the "tak_deco_lib.dll" (V1.0.2):

- The APEv2 tag reading functions are a bit more tolerant when reading invalid tag headers not following the official APEv2 specification.
- tak_SSD_GetCurFrameBitRate() reported wrong values when decoding high resolution audio.

### V1.0.1 / 7-04-10

First stable release.