Initial import
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/avwavio@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
Executable
+211
@@ -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;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Executable
+96
@@ -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
|
||||
Executable
+29
@@ -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>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
+27
@@ -0,0 +1,27 @@
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Erstellungsprotokoll</h1>
|
||||
<h3>
|
||||
--------------------Konfiguration: waveio - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Befehlszeilen</h3>
|
||||
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 "
|
||||
<h3>Ausgabefenster</h3>
|
||||
Kompilierung läuft...
|
||||
avwaveio.c
|
||||
Bibliothek wird erstellt...
|
||||
|
||||
|
||||
|
||||
<h3>Ergebnisse</h3>
|
||||
avwaveio.lib - 0 Fehler, 0 Warnung(en)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user