commit 4702f3b3f943c643dc5e55dfdd126afdedcf4f3c Author: Jens Ahrensfeld Date: Sat Jul 19 07:44:42 2014 +0000 Initial import git-svn-id: http://moon:8086/svn/software/trunk/libsrc/avwavio@1 b431acfa-c32f-4a4a-93f1-934dc6c82436 diff --git a/avwaveio.c b/avwaveio.c new file mode 100755 index 0000000..8ca58ad --- /dev/null +++ b/avwaveio.c @@ -0,0 +1,211 @@ +/* + *------------------------------------------------------------------------- + * file_io.cpp Wav/Raw I/O methods + * $Id: file_io.cpp 1.2 2000/07/18 09:45:41Z JA Exp $ + *------------------------------------------------------------------------- + * + * Copyright (C) 1999-2000 Algo Vision Systems GmbH + * + * This file is part of the Algo Vision platform independent software + * library. + * All rights reserved. Copying, compilation, modification, distribution + * or any other use whatsoever of this material is strictly prohibited + * except in accordance with a Software License Agreement with + * Algo Vision. + * + *------------------------------------------------------------------------- + */ +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include "avwaveio.h" + +/******************************************************************************/ +/* C definitions +/******************************************************************************/ +void WavInit(struct _sWAV *pObj, UINT32 nSamplesPerSec, UINT16 nBits, UINT16 nChannels, UINT16 format) +{ + WavSetFormat(pObj, nSamplesPerSec, nBits, nChannels, format); + pObj->m_FileType = FILETYPE_RAW; + pObj->m_FileSize = 0; + pObj->m_HeaderSize = 0; + pObj->m_DataSize = 0; + pObj->pHndWavFile = 0; + pObj->m_numSamples = 0; +} + +/******************************************************************************/ +UINT32 WavSetFormat(struct _sWAV *pObj, UINT32 nSamplesPerSec, UINT16 nBits, UINT16 nChannels, UINT16 format) +{ + pObj->m_Format.wFormatTag = format; + pObj->m_Format.nChannels = nChannels; + pObj->m_Format.wBitsPerSample = nBits; + pObj->m_Format.nBlockAlign = (nChannels * nBits)/ 8; + pObj->m_Format.nSamplesPerSec = nSamplesPerSec; + pObj->m_Format.nAvgBytesPerSec = (UINT32)pObj->m_Format.nBlockAlign * nSamplesPerSec; + pObj->m_Format.cbSize = 0; + + return 0; +} + +/******************************************************************************/ +UINT32 WavOpen (struct _sWAV *pObj, char* FileName) +{ + UINT32 stat; + + //Wav-File öffnen + strcpy(pObj->m_Name, FileName); + + pObj->pHndWavFile = fopen (pObj->m_Name,"rb"); + if (pObj->pHndWavFile == 0) + return -1; + + stat=ReadHeader(pObj); + if (stat != 0) + { + pObj->m_FileType = FILETYPE_RAW; + fseek(pObj->pHndWavFile, 0L, SEEK_END); + pObj->m_DataSize = ftell(pObj->pHndWavFile); + pObj->m_FileSize = pObj->m_DataSize; + pObj->m_numSamples = pObj->m_DataSize/pObj->m_Format.nBlockAlign; + fseek(pObj->pHndWavFile, 0L, SEEK_SET); + pObj->WREAD = 1; + return 0; + } + + pObj->m_numSamples = pObj->m_DataSize /pObj->m_Format.nBlockAlign; + pObj->m_FileType = FILETYPE_WAV; + pObj->WREAD = 1; + +return 0; +} +/******************************************************************************/ +UINT32 WavClose(struct _sWAV *pObj) +{ + if (!pObj->WREAD && (pObj->m_FileType == FILETYPE_WAV)) + WriteHeader(pObj); + + fclose(pObj->pHndWavFile); + return 0; +} + +/******************************************************************************/ +UINT32 WavCreate (struct _sWAV *pObj, char *fileName, UINT32 fileType) +{ + pObj->m_FileType = fileType; + + strcpy(pObj->m_Name, fileName); + + //Wav-File öffnen + pObj->pHndWavFile = fopen (pObj->m_Name,"wb"); + if (pObj->pHndWavFile == 0) + return -1; + + pObj->WREAD = 0; + if (pObj->m_FileType == FILETYPE_WAV) + WriteHeader(pObj); + return 0; +} + +/******************************************************************************/ +UINT32 WavRead(struct _sWAV *pObj, char *data, UINT32 nSamples) +{ + UINT32 count; + count = fread(data, sizeof(char), nSamples*pObj->m_Format.nBlockAlign, pObj->pHndWavFile); + + return count /pObj->m_Format.nBlockAlign; +} + +/******************************************************************************/ +UINT32 WavWrite(struct _sWAV *pObj, char *data, UINT32 nSamples) +{ + + UINT32 count; + + fseek(pObj->pHndWavFile, 0L, SEEK_END); + count = fwrite(data, sizeof(char), nSamples*pObj->m_Format.nBlockAlign, pObj->pHndWavFile); + + pObj->m_DataSize = pObj->m_DataSize + count; + pObj->m_numSamples = pObj->m_DataSize /pObj->m_Format.nBlockAlign; + pObj->m_FileSize = pObj->m_DataSize; + + if (pObj->m_FileType == FILETYPE_WAV) + pObj->m_FileSize += pObj->m_HeaderSize + 20; + + return count/pObj->m_Format.nBlockAlign; +} + +/******************************************************************************/ +UINT32 ReadHeader (struct _sWAV *pObj) +{ + char buf[80]; + + // 1. 'RIFF' abprüfen + fread(buf, sizeof(char), 4,pObj->pHndWavFile); + buf[4]=0; + if (strcmp (buf,"RIFF")) + return -1; + + // 2. FILESIZE ermitteln + fread(&pObj->m_FileSize, sizeof(UINT32), 1,pObj->pHndWavFile); + + // 3. 'WAVEfmt' abprüfen + fread(buf, sizeof(char), 8,pObj->pHndWavFile); + buf[8]=0; + if (strcmp (buf,"WAVEfmt ")) + return -1; + + // 3. HeaderSize ermitteln + fread(&pObj->m_HeaderSize, sizeof(pObj->m_HeaderSize), 1,pObj->pHndWavFile); + + // 4. Den ganzen Infoblock einlesen + fread(&pObj->m_Format, pObj->m_HeaderSize, 1,pObj->pHndWavFile); + + // 5. 'data' abprüfen + fseek(pObj->pHndWavFile,(INT32)(pObj->m_HeaderSize+20), SEEK_SET); + fread(buf, sizeof(char), 4, pObj->pHndWavFile); + buf[4]=0; + if (strcmp (buf,"data")) + return -1; + + // 6. Datenlänge ermitteln + fread(&pObj->m_DataSize, sizeof(pObj->m_DataSize), 1,pObj->pHndWavFile); + + return 0; +} + +/******************************************************************************/ +UINT32 WriteHeader (struct _sWAV *pObj) +{ + + pObj->m_HeaderSize = bs; + pObj->m_FileSize = pObj->m_HeaderSize + pObj->m_DataSize + 20; + + fseek(pObj->pHndWavFile,0L, SEEK_SET); + + // 1. 'RIFF' schreiben + fwrite("RIFF",sizeof(char), 4, pObj->pHndWavFile); + + // 2. FILESIZE schreiben + fwrite(&pObj->m_FileSize, sizeof(pObj->m_FileSize), 1, pObj->pHndWavFile); + + // 3. 'WAVEfmt ' schreiben + fwrite("WAVEfmt ", sizeof(char), 8, pObj->pHndWavFile); + + // 3. HeaderSize schreiben + fwrite(&pObj->m_HeaderSize, sizeof(pObj->m_HeaderSize), 1, pObj->pHndWavFile); + + // 4. Infoblock schreiben + fwrite(&pObj->m_Format, pObj->m_HeaderSize, 1, pObj->pHndWavFile); + + // 5. 'data' schreiben + fseek(pObj->pHndWavFile, (INT32)(pObj->m_HeaderSize+20), SEEK_SET); + fwrite("data",sizeof(char), 4, pObj->pHndWavFile); + + // 6. Datenlänge schreiben + fwrite(&pObj->m_DataSize, sizeof(pObj->m_DataSize), 1, pObj->pHndWavFile); + +return 0; +} + +/******************************************************************************/ diff --git a/avwaveio.dsp b/avwaveio.dsp new file mode 100755 index 0000000..eb8a230 --- /dev/null +++ b/avwaveio.dsp @@ -0,0 +1,96 @@ +# Microsoft Developer Studio Project File - Name="waveio" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=waveio - Win32 Debug +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "avwaveio.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "avwaveio.mak" CFG="waveio - Win32 Debug" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "waveio - Win32 Release" (basierend auf "Win32 (x86) Static Library") +!MESSAGE "waveio - Win32 Debug" (basierend auf "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "waveio - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\lib\Release\avwaveio.lib" + +!ELSEIF "$(CFG)" == "waveio - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\lib\Debug\avwaveio.lib" + +!ENDIF + +# Begin Target + +# Name "waveio - Win32 Release" +# Name "waveio - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\avwaveio.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/avwaveio.dsw b/avwaveio.dsw new file mode 100755 index 0000000..fb88a6f --- /dev/null +++ b/avwaveio.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! + +############################################################################### + +Project: "waveio"=.\avwaveio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/avwaveio.ncb b/avwaveio.ncb new file mode 100755 index 0000000..3d83cdf Binary files /dev/null and b/avwaveio.ncb differ diff --git a/avwaveio.opt b/avwaveio.opt new file mode 100755 index 0000000..da1e5bd Binary files /dev/null and b/avwaveio.opt differ diff --git a/avwaveio.plg b/avwaveio.plg new file mode 100755 index 0000000..4acfd02 --- /dev/null +++ b/avwaveio.plg @@ -0,0 +1,27 @@ + + +
+

Erstellungsprotokoll

+

+--------------------Konfiguration: waveio - Win32 Release-------------------- +

+

Befehlszeilen

+Erstellen der temporären Datei "E:\WIN98SE\TEMP\RSPD1.TMP" mit Inhalten +[ +/nologo /ML /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/avwaveio.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c +"H:\Develop\80X86\LIBSRC\avwavio\avwaveio.c" +] +Creating command line "cl.exe @E:\WIN98SE\TEMP\RSPD1.TMP" +Erstellen der Befehlzeile "link.exe -lib /nologo /out:"..\..\lib\Release\avwaveio.lib" .\Release\avwaveio.obj " +

Ausgabefenster

+Kompilierung läuft... +avwaveio.c +Bibliothek wird erstellt... + + + +

Ergebnisse

+avwaveio.lib - 0 Fehler, 0 Warnung(en) +
+ +