Code cleanup; Reader classes renamed to Decoders, Writers to Encoders, every Decoder must have a corresponding Settings class now just like Encoders. UserDefinedEncoders renamed to CommandLineEncoders, etc.

This commit is contained in:
Grigory Chudov
2018-03-23 19:26:26 -04:00
parent 8a5946ae89
commit 16fccfe5c9
71 changed files with 4530 additions and 4576 deletions

View File

@@ -1,30 +1,30 @@
/*
* WavFile.cpp
*
* Description: Wraps working with WAV files
*
* Copyright (c) 2004 Alexander Djourik. All rights reserved.
* Copyright (c) 2004 Pavel Zhilin. All rights reserved.
*
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* aint with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Please see the file COPYING in this directory for full copyright
* information.
/*
* WavFile.cpp
*
* Description: Wraps working with WAV files
*
* Copyright (c) 2004 Alexander Djourik. All rights reserved.
* Copyright (c) 2004 Pavel Zhilin. All rights reserved.
*
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* aint with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Please see the file COPYING in this directory for full copyright
* information.
*/
#include "stdafx.h"
@@ -33,51 +33,51 @@
#include "TTAError.h"
#include "WavFile.h"
/************************** WAV functions ******************************/
TTALib::WaveFile::WaveFile () : fd (INVALID_HANDLE_VALUE)
{
}
TTALib::WaveFile::~WaveFile ()
{
if (fd != INVALID_HANDLE_VALUE)
CloseHandle (fd);
}
HANDLE TTALib::WaveFile::Create (const char *filename)
{
errNo = TTALib::TTA_NO_ERROR;
/************************** WAV functions ******************************/
TTALib::WaveFile::WaveFile () : fd (INVALID_HANDLE_VALUE)
{
}
TTALib::WaveFile::~WaveFile ()
{
if (fd != INVALID_HANDLE_VALUE)
CloseHandle (fd);
}
HANDLE TTALib::WaveFile::Create (const char *filename)
{
errNo = TTALib::TTA_NO_ERROR;
if ((fd = CreateFile (filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL)) == INVALID_HANDLE_VALUE)
{
errNo = TTALib::OPEN_ERROR;
return INVALID_HANDLE_VALUE;
}
return fd;
}
HANDLE TTALib::WaveFile::Open (const char *filename)
{
errNo = TTALib::TTA_NO_ERROR;
}
return fd;
}
HANDLE TTALib::WaveFile::Open (const char *filename)
{
errNo = TTALib::TTA_NO_ERROR;
if ((fd = CreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL)) == INVALID_HANDLE_VALUE)
errNo = TTALib::OPEN_ERROR;
return fd;
}
bool TTALib::WaveFile::ReadHeaders ()
{
unsigned long result;
// Read WAVE header
if (!ReadFile(fd, &wave_hdr, sizeof(wave_hdr), &result, NULL))
{
CloseHandle (fd);
errNo = TTALib::READ_ERROR;
return false;
}
bool TTALib::WaveFile::ReadHeaders ()
{
unsigned long result;
// Read WAVE header
if (!ReadFile(fd, &wave_hdr, sizeof(wave_hdr), &result, NULL))
{
CloseHandle (fd);
errNo = TTALib::READ_ERROR;
return false;
}
wave_hdr.ChunkID = ENDSWAP_INT32(wave_hdr.ChunkID);
wave_hdr.ChunkSize = ENDSWAP_INT32(wave_hdr.ChunkSize);
wave_hdr.Format = ENDSWAP_INT32(wave_hdr.Format);
@@ -89,54 +89,54 @@ bool TTALib::WaveFile::ReadHeaders ()
wave_hdr.ByteRate = ENDSWAP_INT32(wave_hdr.ByteRate);
wave_hdr.BlockAlign = ENDSWAP_INT16(wave_hdr.BlockAlign);
wave_hdr.BitsPerSample = ENDSWAP_INT16(wave_hdr.BitsPerSample);
// skip extra format bytes
if (wave_hdr.Subchunk1Size > 16) {
SetFilePointer (fd, wave_hdr.Subchunk1Size - 16, NULL, FILE_CURRENT);
}
// skip unsupported chunks
while (ReadFile(fd, &subchunk_hdr, sizeof(subchunk_hdr), &result, NULL) &&
subchunk_hdr.SubchunkID != ENDSWAP_INT32(data_SIGN)) {
char chunk_id[5];
subchunk_hdr.SubchunkSize = ENDSWAP_INT32(subchunk_hdr.SubchunkSize);
subchunk_hdr.SubchunkID = ENDSWAP_INT32(subchunk_hdr.SubchunkID);
if (subchunk_hdr.SubchunkSize & 0x80000000UL) {
CloseHandle (fd);
errNo = TTALib::FILE_ERROR;
return false;
}
CopyMemory(chunk_id, &subchunk_hdr.SubchunkID, 4);
chunk_id[4] = 0;
SetFilePointer(fd, subchunk_hdr.SubchunkSize, NULL, FILE_CURRENT);
}
// skip extra format bytes
if (wave_hdr.Subchunk1Size > 16) {
SetFilePointer (fd, wave_hdr.Subchunk1Size - 16, NULL, FILE_CURRENT);
}
// skip unsupported chunks
while (ReadFile(fd, &subchunk_hdr, sizeof(subchunk_hdr), &result, NULL) &&
subchunk_hdr.SubchunkID != ENDSWAP_INT32(data_SIGN)) {
char chunk_id[5];
subchunk_hdr.SubchunkSize = ENDSWAP_INT32(subchunk_hdr.SubchunkSize);
subchunk_hdr.SubchunkID = ENDSWAP_INT32(subchunk_hdr.SubchunkID);
if (subchunk_hdr.SubchunkSize & 0x80000000UL) {
CloseHandle (fd);
errNo = TTALib::FILE_ERROR;
return false;
}
CopyMemory(chunk_id, &subchunk_hdr.SubchunkID, 4);
chunk_id[4] = 0;
SetFilePointer(fd, subchunk_hdr.SubchunkSize, NULL, FILE_CURRENT);
}
subchunk_hdr.SubchunkSize = ENDSWAP_INT32(subchunk_hdr.SubchunkSize);
return true;
}
bool TTALib::WaveFile::WriteHeaders ()
{
unsigned long result;
errNo = TTALib::TTA_NO_ERROR;
wave_hdr.ChunkID = ENDSWAP_INT32(RIFF_SIGN);
wave_hdr.ChunkSize = ENDSWAP_INT32(wave_hdr.ChunkSize);
wave_hdr.Format = ENDSWAP_INT32(WAVE_SIGN);
wave_hdr.Subchunk1ID = ENDSWAP_INT32(fmt_SIGN);
wave_hdr.Subchunk1Size = ENDSWAP_INT32(16);
wave_hdr.AudioFormat = ENDSWAP_INT16(wave_hdr.AudioFormat);
wave_hdr.NumChannels = ENDSWAP_INT16(wave_hdr.NumChannels);
wave_hdr.SampleRate = ENDSWAP_INT32(wave_hdr.SampleRate);
wave_hdr.ByteRate = ENDSWAP_INT32(wave_hdr.ByteRate);
wave_hdr.BlockAlign = ENDSWAP_INT16(wave_hdr.BlockAlign);
wave_hdr.BitsPerSample = ENDSWAP_INT16(wave_hdr.BitsPerSample);
subchunk_hdr.SubchunkID = ENDSWAP_INT32(data_SIGN);
}
bool TTALib::WaveFile::WriteHeaders ()
{
unsigned long result;
errNo = TTALib::TTA_NO_ERROR;
wave_hdr.ChunkID = ENDSWAP_INT32(RIFF_SIGN);
wave_hdr.ChunkSize = ENDSWAP_INT32(wave_hdr.ChunkSize);
wave_hdr.Format = ENDSWAP_INT32(WAVE_SIGN);
wave_hdr.Subchunk1ID = ENDSWAP_INT32(fmt_SIGN);
wave_hdr.Subchunk1Size = ENDSWAP_INT32(16);
wave_hdr.AudioFormat = ENDSWAP_INT16(wave_hdr.AudioFormat);
wave_hdr.NumChannels = ENDSWAP_INT16(wave_hdr.NumChannels);
wave_hdr.SampleRate = ENDSWAP_INT32(wave_hdr.SampleRate);
wave_hdr.ByteRate = ENDSWAP_INT32(wave_hdr.ByteRate);
wave_hdr.BlockAlign = ENDSWAP_INT16(wave_hdr.BlockAlign);
wave_hdr.BitsPerSample = ENDSWAP_INT16(wave_hdr.BitsPerSample);
subchunk_hdr.SubchunkID = ENDSWAP_INT32(data_SIGN);
subchunk_hdr.SubchunkSize = ENDSWAP_INT32(subchunk_hdr.SubchunkSize);
// write WAVE header
if (!WriteFile(fd, &wave_hdr, sizeof(wave_hdr), &result, NULL) ||
result != sizeof(wave_hdr))
@@ -152,106 +152,106 @@ bool TTALib::WaveFile::WriteHeaders ()
return false;
}
return true;
}
bool TTALib::WaveFile::Read(long *data, long byte_size, unsigned long *len)
{
unsigned long res;
unsigned char *buffer, *src;
long *dst = data;
errNo = TTALib::TTA_NO_ERROR;
if (!(src = buffer = (unsigned char *)calloc(*len, byte_size)))
{
errNo = TTALib::MEMORY_ERROR;
return false;
}
if (!ReadFile (fd, buffer, *len * byte_size, &res, NULL))
{
errNo = TTALib::READ_ERROR;
return false;
}
switch (byte_size) {
case 1: for (; src < buffer + res; dst++)
*dst = (signed long) *src++ - 0x80;
break;
case 2: for (; src < buffer + res; dst++) {
*dst = (unsigned char) *src++;
*dst |= (signed char) *src++ << 8;
}
break;
case 3: for (; src < buffer + res; dst++) {
*dst = (unsigned char) *src++;
*dst |= (unsigned char) *src++ << 8;
*dst |= (signed char) *src++ << 16;
}
break;
case 4: for (; src < buffer + res; dst += 2) {
*dst = (unsigned char) *src++;
*dst |= (unsigned char) *src++ << 8;
*dst |= (unsigned char) *src++ << 16;
*dst |= (signed char) *src++ << 24;
}
break;
}
*len = res / byte_size;
free(buffer);
return true;
}
bool TTALib::WaveFile::Write(long *data, long byte_size, long num_chan, unsigned long *len)
{
unsigned long res;
unsigned char *buffer, *dst;
long *src = data;
errNo = TTALib::TTA_NO_ERROR;
if (!(dst = buffer = (unsigned char *)calloc(*len * num_chan, byte_size)))
{
errNo = TTALib::MEMORY_ERROR;
return false;
}
switch (byte_size) {
case 1: for (; src < data + (*len * num_chan); src++)
*dst++ = (unsigned char) (*src + 0x80);
break;
case 2: for (; src < data + (*len * num_chan); src++) {
*dst++ = (unsigned char) *src;
*dst++ = (unsigned char) (*src >> 8);
}
break;
case 3: for (; src < data + (*len * num_chan); src++) {
*dst++ = (unsigned char) *src;
*dst++ = (unsigned char) (*src >> 8);
*dst++ = (unsigned char) (*src >> 16);
}
break;
case 4: for (; src < data + (*len * num_chan * 2); src += 2) {
*dst++ = (unsigned char) *src;
*dst++ = (unsigned char) (*src >> 8);
*dst++ = (unsigned char) (*src >> 16);
*dst++ = (unsigned char) (*src >> 24);
}
break;
}
if (!WriteFile (fd, buffer, *len * num_chan * byte_size, &res, NULL)
|| res != *len * num_chan * byte_size)
{
errNo = TTALib::WRITE_ERROR;
return false;
}
*len = res / byte_size;
free(buffer);
return true;
}
}
bool TTALib::WaveFile::Read(long *data, long byte_size, unsigned long *len)
{
unsigned long res;
unsigned char *buffer, *src;
long *dst = data;
errNo = TTALib::TTA_NO_ERROR;
if (!(src = buffer = (unsigned char *)calloc(*len, byte_size)))
{
errNo = TTALib::MEMORY_ERROR;
return false;
}
if (!ReadFile (fd, buffer, *len * byte_size, &res, NULL))
{
errNo = TTALib::READ_ERROR;
return false;
}
switch (byte_size) {
case 1: for (; src < buffer + res; dst++)
*dst = (signed long) *src++ - 0x80;
break;
case 2: for (; src < buffer + res; dst++) {
*dst = (unsigned char) *src++;
*dst |= (signed char) *src++ << 8;
}
break;
case 3: for (; src < buffer + res; dst++) {
*dst = (unsigned char) *src++;
*dst |= (unsigned char) *src++ << 8;
*dst |= (signed char) *src++ << 16;
}
break;
case 4: for (; src < buffer + res; dst += 2) {
*dst = (unsigned char) *src++;
*dst |= (unsigned char) *src++ << 8;
*dst |= (unsigned char) *src++ << 16;
*dst |= (signed char) *src++ << 24;
}
break;
}
*len = res / byte_size;
free(buffer);
return true;
}
bool TTALib::WaveFile::Write(long *data, long byte_size, long num_chan, unsigned long *len)
{
unsigned long res;
unsigned char *buffer, *dst;
long *src = data;
errNo = TTALib::TTA_NO_ERROR;
if (!(dst = buffer = (unsigned char *)calloc(*len * num_chan, byte_size)))
{
errNo = TTALib::MEMORY_ERROR;
return false;
}
switch (byte_size) {
case 1: for (; src < data + (*len * num_chan); src++)
*dst++ = (unsigned char) (*src + 0x80);
break;
case 2: for (; src < data + (*len * num_chan); src++) {
*dst++ = (unsigned char) *src;
*dst++ = (unsigned char) (*src >> 8);
}
break;
case 3: for (; src < data + (*len * num_chan); src++) {
*dst++ = (unsigned char) *src;
*dst++ = (unsigned char) (*src >> 8);
*dst++ = (unsigned char) (*src >> 16);
}
break;
case 4: for (; src < data + (*len * num_chan * 2); src += 2) {
*dst++ = (unsigned char) *src;
*dst++ = (unsigned char) (*src >> 8);
*dst++ = (unsigned char) (*src >> 16);
*dst++ = (unsigned char) (*src >> 24);
}
break;
}
if (!WriteFile (fd, buffer, *len * num_chan * byte_size, &res, NULL)
|| res != *len * num_chan * byte_size)
{
errNo = TTALib::WRITE_ERROR;
return false;
}
*len = res / byte_size;
free(buffer);
return true;
}
TTALib::TTAError TTALib::WaveFile::GetErrNo () const
{