Acoustic Word-Recognizer
Quelltext - Dokumentation
Beschreibung:
Die Klasse CAWRApp ist die Anwendungsklasse der MFC-Applikation AWR. D.h. hier sind alle Operationen definiert um die Anwendung zu instanzirren und auszuführen.
Klassen-Deklaration:
class CAWRApp : public CWinApp
{
public:
CAWRApp();
// der Konstruktor der Klasse CAWRApp
public:
// Membervariablen der Applikation
CWave am_Wave;
// enthält die Instanz der Klasse CWave für das Programm AWR
CTransform am_Trans;
// enthält die Instanz der Klasse CTransform für das
Programm AWR
CKohonen am_Kohon;
// enthält die Instanz der Klasse CKohonen für das
Programm AWR
CBackprop am_Bkprp;
// enthält die Instanz der Klasse CBackprop für das
Programm AWR
char **am_Words;
// in diesem Datenfeld sind die Wörter gespeichert, die
das Netz lernt bzw. gelernt hat
int am_anzwrd;
// hier ist die Anzahl der Wörter, die im obigen
Datenfeld gespeichert sind, abgelegt
bool am_working;
// hier wird gespeichert ob ein Thread aktiv ist (TRUE -
aktiv, FALSE - nicht aktiv)
// Programmkonstanten,
das sind hauptsächlich Standardwerte für die Berechnungen der Netze
const double c_kon;
// der Aktivwert (0.5) für die Neuronen der Kartenschicht
des Kohonennetz
const double c_koff;
// der Inaktivwert (-0.5) für die Neuronen der
Kartenschicht des Kohonennetz
const double c_bon;
// der angestrebte Aktivwert (0.8) für die
Ausgabeneuronen des Backpropagationnetz
const double c_boff;
// der angestrebte Inaktivwert (0.2) für die
Ausgabeneuronen des Backpropagationnetz
const double c_bias;
// der Biaswert (bzw. Schwellwert) (1.0) der Neuronen des Backpropagationnetz
};
extern CAWRApp theApp;
// Programmglobale der Instanz von CAWRApp, um von jedem
Programmpunkt aus auf
die Membervariablen von CAWRApp zugreifen zu können
Beschreibung:
Die Klasse CAWRSheet bildet den Dialogcontainer für die Karteikarten-Dialoge des Programms. Sie hat als Membervariablen die Dialog-Klasse der Karteikarten.
Klassen-Deklaration:
class CAWRSheet : public CPropertySheet
{
DECLARE_DYNAMIC(CAWRSheet)
// Konstruktion
public:
CAWRSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
CAWRSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
// Implementierung
public:
virtual ~CAWRSheet();
// Generierte Nachrichtenzuordnungsfunktionen
protected:
//{{AFX_MSG(CAWRSheet)
virtual BOOL OnInitDialog();
afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Membervariablen
CPage1 m_page1;
// enthält die Instanz der Dialogklasse CPage1 des
Dialoges m_page1
CPage2 m_page2;
// enthält die Instanz der Dialogklasse CPage2 des
Dialoges m_page2
CPage3 m_page3;
// enthält die Instanz der Dialogklasse CPage3 des
Dialoges m_page3
};
Beschreibung:
Die Klasse CBackprop beinhaltet alle Operationen und Variablen,
die nötig sind um ein Feedforward-Backpropagation-Netz zu erstellen, zu
trainieren und abzufragen.
Außerdem können Netze gespeichert und wieder geladen werden.
Klassen-Deklaration:
class CBackprop
{
public:
CBackprop();
// Konstruktor, Setzten von Startwerten.
virtual ~CBackprop();
// Dekonstruktor, Freigeben von allociertem Speicher.
//
Create erstellt ein neues Netz entsprechend den übergebenen Werten und
allociert den Speicher für die Matrix der Verbindungsgewichte.
void Create(
int layer,
// number layers of the backpropagation net
int *num_neurons,
// vector for number of neurons per layer,
// first the input layer, then the hidden layer,
// last the output layer
double bias,
// value of bias
double on,
// value of active output neuron
double off );
// value of inactive output neuron
// Delete löscht die
Matrix der Verbindungsgewichte und das Feld der Trainingsdaten, dann wird der
Speicher wieder freigegeben.
void Delete(
void );
// InitWeights
setzt die Startwerte der Verbindungsgewichte zufällig und gleichverteilt
innerhalb des angegebenen Bereiches.
void InitWeights(
double bottom,
// bottom border of weights
double top );
// top border of weights
// Learn führt die Berechnungen für
den Lernvorgang des Netzes aus.
void Learn(
double lvalue,
// value of learn installment
double moment,
// value of momentum
int num_LSteps,
// number of learn steps
CProgressCtrl *progr, // pointer
to progress-control of train-dialog to display the learn progress
CPage2 *page2 );
// SetLearn
setzt die Zahl der zu erwartenden Eingabevektoren und allociert dementsprechend
den benötigten Speicherplatz.
// Diese Funktion wird benötigt,
wenn die Trainingsdatenvektoren nicht auf einmal, sondern der Reihe nach vektorenweise dem Objekt übergeben werden.
void SetLearn(
int num );
// number of vectors
// SetLearnData
übergibt das gesamte Feld der Trainingsdatenvektoren dem Objekt.
void SetLearnData(
double **lData, // array of data vectors to learn
int num );
// number of vectors
// AddLearnData übergibt die
Trainingsdaten vektorenweise dem Objekt.
void AddLearnData(
double *lData, //
vector of learn data
int learntarget ); //
number of output neuron, which must be activate by this data vector
// DelLearnData löscht das Feld der
Trainingsdaten des Objektes um neue Daten aufnehmen zu können.
void DelLearnData(
void );
// Recognize
führt eine Erkennung der übergebenen Daten durch, dann wird die Nummer des
aktiven Ausgabeneurons zurückgegeben.
int Recognize(
double *inData );
// data vector to recognize
// LoadNet lädt das Netz das in der
Datei fname gespeichert ist.
bool LoadNet(
char *fname );
// name of file
// SaveNet
speichert das Netz in der Datei fname.
bool SaveNet(
char *fname,
// name of file
char *progname = "CBackprop",
// name of program, define the header of file, default:
CBackprop
char *version = "1.0" );
// name of program version
// GetNetInfo liefert
die Anzahl der Schichten des Backpropagationnetz und einen Vektor der die
Anzahl der Neuronen pro Schicht enthält
void
GetNetInfo( int &layer,
// number of layers
int *&numneuro );
// vector of number of neurons per layer, start with input
layer
protected:
// Activation
berechnet den Aktivationswert für das aktuelle Neuron während einer Lernphase
oder einer Erkennungsphase.
void Activation(
int layer,
// current layer to activate
int neuron );
// current neuron to activate
friend UINT BLearnThread( LPVOID pParam ); // Lern-Thread für das Backpropagation-Netz
double ***m_Weights;
// array for the weights map
double **m_Activation;
// array of activation values for neurons
double **m_LearnVectors;
// array of training vectors
double m_bias;
// value of bias
double m_on;
// value of active output neuron
double m_off;
// value of inactive output neuron
bool m_create;
// flag if a net is created with function create
bool m_winit;
// flag if weights are initialize with function
InitWeights
int m_layer;
// number layers of the backpropagation net
int m_numlv;
// number of learn vectors
int m_ldidx;
// index for adding train data vector count
int *m_numneuro;
// vector for number of neurons per layer,
// first the input layer, then the hidden layer,
// last the output layer
};
Beschreibung:
Die Klasse CKohonen beinhaltet alle Operationen und Variablen,
die nötig sind um ein Kohonen-Netz (SOM) zu erstellen, zu
trainieren und abzufragen.
Außerdem können Netze gespeichert und wieder geladen werden.
Klassen-Deklaration:
class CKohonen
{
public:
CKohonen(); // Konstruktor, Setzten von Startwerten.
virtual ~CKohonen();
// Dekonstruktor, Freigeben von allociertem Speicher.
//
Create erstellt ein neues Netz entsprechend den übergebenen Werten und
allociert den Speicher für die Matrix der Verbindungsgewichte.
void Create(
int inNeurons, // number of input neurons
int col_Map,
// number columns of feature map
int row_Map,
// number rows of feature map
double on,
// value of active output neuron
double off ); // value of inactive output neuron
// Delete löscht die
Matrix der Verbindungsgewichte und das Feld der Trainingsdaten, dann wird der
Speicher wieder freigegeben.
void Delete(
void );
// InitWeights
setzt die Startwerte der Verbindungsgewichte zufällig und gleichverteilt
innerhalb des angegebenen Bereiches.
void InitWeights(
double bottom, // bottom border of weights
double top );
// top border of weights
// Learn führt die Berechnungen für
den Lernvorgang des Netzes aus.
void Learn(
double lvalue,
// value of learn installment
int radius,
// radius of weight adaption range
int num_LSteps, // number of learn steps
CProgressCtrl *progr, // pointer to progress-control of train-dialog to display the learn progress
CPage2 *page2 );
// SetLearn
setzt die Zahl der zu erwartenden Eingabevektoren und allociert dementsprechend
den benötigten Speicherplatz.
// Diese Funktion wird benötigt,
wenn die Trainingsdatenvektoren nicht auf einmal, sondern der Reihe nach vektorenweise dem Objekt übergeben werden.
void SetLearn(
int num );
// number of vectors
// SetLearnData
übergibt das gesamte Feld der Trainingsdatenvektoren dem Objekt.
void SetLearnData(
double **lData, // array of data vectors to learn
int num );
// number of vectors
// AddLearnData übergibt die
Trainingsdaten vektorenweise dem Objekt.
void AddLearnData(
double **lData, //
array of learn data of frequency points
int sampl ); //
number of vectors of frequency points
in lData
// DelLearnData löscht das Feld der
Trainingsdaten des Objektes um neue Daten aufnehmen zu können.
void DelLearnData(
void );
// Recognize
führt eine Erkennung der übergebenen Daten durch, dann wird ein Vektor der die
Aktivationswerte der Ausgabeneuronen enthält zurückgegeben.
double *Recognize(
double **inData, // array of data vectors to recognize
int num );
// number of vectors
// LoadNet lädt das Netz das in der
Datei fname gespeichert ist.
bool LoadNet(
char *fname );
// name of file
// SaveNet
speichert das Netz in der Datei fname.
bool SaveNet(
char *fname,
// name of file
char *progname =
"CKohonen", //
name of program, define the header of file, default: CKohonen
char *version = "1.0" );
// name of program version
// GetNetInfo liefert
die Anzahl der Inputneuronen des Kohonennetz, sowie die Breite und die
Länge der Kohonenkarte in Neuronen zurück.
void GetNetInfo(
int &numin,
// number of input neurons
int &koh_h,
// number columns of feature map
int &koh_v );
// number rows of feature map
protected:
// Stimulation berechnet den
Nettoinput für das aktuelle Neuron der Merkmalskarte während einer Lernphase
oder einer Erkennungsphase.
void Stimulation(
int ind_row, // index row of feature (weights) map
int ind_col ); // index column of feature (weights) map
friend UINT KLearnThread( LPVOID pParam ); // Lern-Thread für das Kohonen-Netz
double ***m_Weights;
// array for the weights map
double **m_InputVector;
// array for the feature vectors
double
*m_InputNeurons;
// vector of input neurons
double m_on;
// value of active output neuron
double m_off;
// value of inactive output neuron
int m_numin;
// number of input neurons
int m_numv;
// number of input vectors
int m_numcol;
// number columns of feature map
int m_numrow;
// number rows of feature map
int m_maxcol;
// column of winner neuron
int m_maxrow;
// row of winner neuron
int m_ldidx;
// index for adding train data vector count
bool m_create;
// flag if a net is created with function create
bool m_winit;
// flag if weights are initialize with function
InitWeights
};
Beschreibung:
Die Klasse CPage1 ist für das Aussehen und Verhalten der Karteikarte "Projekt verwalten" verantwortlich. Sie enthält die Deklaration und Definition der Dialog-Controls.
Klassen-Deklaration:
class CPage1 : public CPropertyPage
{
DECLARE_DYNCREATE(CPage1)
// Konstruktion
public:
CPage1();
~CPage1();
// Dialogfelddaten
//{{AFX_DATA(CPage1)
enum { IDD = IDD_PAGE1 };
int m_anzwrd;
// Variable für das Editfeld "Anzahl der zu
lernenden Wörter"
int m_anzfrq;
// Variable für das Editfeld "Anzahl der Frequenzstützpunkte"
int m_anzbks;
// Variable für das Editfeld
"Anzahl der versteckten Schichten" (Backpropagationnetz)
CString m_anzbkn;
// Variable für das Editfeld
"Anzahl von Neuronen pro Schicht" (Backpropagationnetz)
int m_kohon_h;
// Variable für das Editfeld "Anzahl der Neuronen in horizontaler
Richtung" (Kohonennetz)
int m_kohon_v;
// Variable für das Editfeld "Anzahl der Neuronen in vertikaler
Richtung" (Kohonennetz)
CString m_words;
// Variable für das Editfeld "zu lernende Wörter"
//}}AFX_DATA
// Überschreibungen
// Der Klassen-Assistent generiert virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CPage1)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CPage1)
afx_msg void OnCreate();
// Definiert das Verhalten des Button "Projekt erstellen"
afx_msg void OnLoad();
// Definiert das Verhalten des Button "Projekt laden"
afx_msg void OnSave();
// Definiert das Verhalten des Button "Projekt speichern"
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// DelWords löscht die Liste der Wörter die das Netz lernen soll bzw. gelernt
hat um eine neue Liste anlegen zu können, oder um den für die Liste allocierten
// Speicher beim Programmende wieder
freizugeben.
void DelWords();
// Membervariablen
bool m_create;
// Flag welches auf TRUE gesetzt wird, wenn ein Netz
erstellt wurde (wird für die Speicherfunktion benötigt)
};
Beschreibung:
Die Klasse CPage2 ist für das Aussehen und Verhalten der Karteikarte "Netz trainieren" verantwortlich. Sie enthält die Deklaration und Definition der Dialog-Controls.
Klassen-Deklaration:
class CPage2 : public CPropertyPage
{
DECLARE_DYNCREATE(CPage2)
// Konstruktion
public:
CPage2();
~CPage2();
// Dialogfelddaten
//{{AFX_DATA(CPage2)
enum { IDD = IDD_PAGE2 };
CProgressCtrl m_datprogr;
// Steuervariable für das Progress-Control zum
Anzeigen des Ladenfortschritts der Trainingsdaten
CProgressCtrl m_backprogr;
// Steuervariable für das Progress-Control zum
Anzeigen des Lernfortschritts des Backpropagationnetz
CProgressCtrl m_kohprogr;
// Steuervariable für das Progress-Control zum
Anzeigen des Lernfortschritts des Kohonennetz
double m_blrate;
// Variable für das Editfeld "Lernrate"
(Backpropagationnetz)
int m_blschritte;
// Variable für das Editfeld
"Lernschritte" (Backpropagationnetz)
double m_bmoment;
// Variable für das Editfeld "Momentum"
(Backpropagationnetz)
double m_bogr;
// Variable für das Editfeld
"Gewicht-Obergrenze" (Backpropagationnetz)
double m_bugr;
// Variable für das Editfeld "Gewicht-Untergrenze"
(Backpropagationnetz)
double m_klrate;
// Variable für das Editfeld "Lernrate"
(Kohonennetz)
int m_klschritte;
// Variable für das Editfeld
"Lernschritte" (Kohonennetz)
double m_kogr;
// Variable für das Editfeld
"Gewicht-Obergrenze" (Kohonennetz)
int m_kradius;
// Variable für das Editfeld
"Anpassungsradius" (Kohonennetz)
double m_kugr;
// Variable für das Editfeld
"Gewicht-Untergrenze" (Kohonennetz)
int m_anzmst;
// Variable für das Editfeld "Anzahl der Muster pro
Wort"
CString m_lstatusk;
// Variable für das Staticfeld
"Lernstatus" (Kohonennetz)
CString m_lstatusb;
// Variable für das Staticfeld
"Lernstatus" (Backpropagationnetz)
//}}AFX_DATA
// Überschreibungen
// Der Klassen-Assistent generiert virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CPage2)
public:
virtual BOOL OnSetActive();
// setzt einige Startwerte wenn der Dialog
angezeigt bzw. aktiviert wird
virtual BOOL OnKillActive();
// prüft ob ein Thread aktiv ist, dann kann die
Karteikarte nicht verlassen werden
protected:
virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CPage2)
afx_msg void OnTLoad();
// Definiert das Verhalten des Button "Trainingsdaten laden"
afx_msg void OnBackWeights();
// Definiert das Verhalten des Button "Gewichte initialisieren"
(Backpropagationnetz)
afx_msg void OnBackTrain();
// Definiert das Verhalten des Button "Netz trainieren" (Backpropagationnetz)
afx_msg void OnKohWeights();
// Definiert das Verhalten des Button "Gewichte initialisieren" (Kohonennetz)
afx_msg void OnKohonTrain();
// Definiert das Verhalten des Button "Netz trainieren" (Kohonennetz)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
friend UINT TLoadThread( LPVOID pParam ); // Laden-Thread für die Trainingsdaten
// Membervariablen
double ****m_FeatureVec;
// Das 4-dimensionale Feld enthält die Merkmalsvektoren
der Musterdateien jedes Wortes, die aus den Wave-Dateien
// mittels der FFT berechnet wurden. D.h. dieses Feld
enthält alle Trainingsdaten, die dem Netz zum Lernen vorgelegt
// werden sollen.
int m_anzsampl;
// Diese Variable enthält die Anzahl, wie häufig einer
Wave-Datei Werte für eine Fouriertransformation entnommen werden.
int m_anzwrd;
// speichert die Anzahl der gelernten Wörter, wird
benötigt um m_FeatureVec wieder freizugeben
bool m_newktdat;
// Dieses Flag wird auf TRUE gesetzt wenn neue
Trainingsdaten geladen wurden, d.h. wenn das Kohonennetz
// die Daten neu einlesen muss, danach wird das Flag auf FALSE gesetzt.
bool m_newbtdat;
// Dieses Flag wird auf TRUE gesetzt wenn neue
Trainingsdaten geladen wurden oder wenn das Kohonennetz neu trainiert wurde,
// d.h. wenn das Backpropagationnetz die Daten neu einlesen muss, danach wird das Flag auf FALSE gesetzt.
};
Beschreibung:
Die Klasse CPage3 ist für das Aussehen und Verhalten der Karteikarte "Erkennen" verantwortlich. Sie enthält die Deklaration und Definition der Dialog-Controls.
Klassen-Deklaration:
class CPage3 : public CPropertyPage
{
DECLARE_DYNCREATE(CPage3)
// Konstruktion
public:
CPage3();
~CPage3();
// Dialogfelddaten
//{{AFX_DATA(CPage3)
enum { IDD = IDD_PAGE3 };
CListBox m_wlist;
// Steuervariable für das ListBox-Control, hier
werden die gelernten Wörter des Netzes angezeigt
CString m_rwort;
// Variable für das Staticfeld "erkanntes
Wort", hier wird das Wort angezeigt, das das Netz aus der Wave-Datei
erkannt hat
CString m_wavedat;
// Variable für das Staticfeld "geöffnete
WAVE-Datei", hier wird der Name der aktuell geöffneten Wave-Datei
angezeigt
BOOL m_showb;
// enthält den Status der Checkbox "Ausgabe
des Backpropagationnetz anzeigen"
BOOL m_showk;
// enthält den Status der Checkbox "Ausgabe
des Kohonennetz anzeigen"
//}}AFX_DATA
// Überschreibungen
// Der Klassen-Assistent generiert virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CPage3)
public:
virtual BOOL OnSetActive();
// setzt einige Startwerte wenn der Dialog
angezeigt bzw. aktiviert wird
virtual BOOL OnKillActive();
// deaktiviert die Ausgabefenster der Netze, wenn
der Dialog inaktiv wird
protected:
virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CPage3)
afx_msg void OnRecognize();
// Definiert das Verhalten des Button "Wort
erkennen"
afx_msg void OnWave();
// Definiert das Verhalten des Button "WAVE-Datei
öffnen"
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Membervariablen
bool m_load;
// Dieses Flag wird auf TRUE gesetzt, wenn eine Wave-Datei
geladen wurde.
char
m_pfile[200]; // Auf
diesem Vektor wird der Name der geöffneten Wave-Datei gespeichert, um sie zur
akustischen Kontrolle abspielen zu können.
CDialog m_pDlgK;
// Steuervariable für den Ausgabedialog des Kohonennetz
CDialog m_pDlgB;
// Steuervariable für den Ausgabedialog des
Backpropagationnetz
};
Beschreibung:
Die Klasse CTransform enthält die Operationen um aus den Daten
einer Wave-Datei eine Diskrete-Fouriertransformation durchführen zu können.
Dazu wird der Algorithmus der Fast-Fouriertransformation benutzt.
Klassen-Deklaration:
class CTransform
{
public:
CTransform();
// Konstruktor, initialisiert den Wert der Konstante
"c_nsptchk"
virtual ~CTransform();
// Dekonstruktor, gibt allocierten Speicher wieder frei
void
Init( int samples );
// initialisiert das Objekt mit den benötigten Werten,
// samples - enthält die Anzahl der zu ermittelten Frequenzstützpunkte
void
SetWavData( int *pData, int
nDataSize ); // übergibt die Wave-Daten aus denen die Frequenzstützpunkte
berechnet werden sollen
// pData - enthält den Vektor der Wave-Daten
// nDataSize - enthält die Größe des Wave-Daten-Vektors
double **GetFreqData(
void ); //
gibt ein Array zurück, das die berechneten Frequenzdaten enthält
// der erste Index bezeichnet den jeweiligen Abtastpunkt des Wave-Stroms,
// der zweite Index bezeichnet die einzelnen ermittelten Frequenzstützpunkte des jeweiligen Abtastpunktes
void Transform(
void ); //
initiiert die Berechnung der Frequenzdaten
int GetAnzSamples(
void ) { return c_nsptchk; }
// gibt die Anzahl der Abtastpunkte des Wave-Stroms zurück
protected:
void
FFT(int start, int vektor);
// Funktion die die Fast-Fourier-Transformation durchführt
int
Permute(int index, int samples,
int power); //
wird für die FFT-Funktion benötigt
int m_Samples;
// enthält die Anzahl der zu ermittelten Frequenzstützpunkte
bool m_Freq;
// Flag, das auf TRUE gesetzt wird nachdem die
Frequenzdaten ermittelt wurden
int m_nDataSize;
// enthält die Größe des Wave-Daten Vektors
double *m_pWavData;
// enthält den Pointer auf den Wave-Daten Vektor
double **m_FreqData;
// enthält das Array der ermittelten Frequenzdaten,
// der erste Index bezeichnet den jeweiligen Abtastpunkt des Wave-Stroms,
// der zweite Index bezeichnet die einzelnen ermittelten Frequenzstützpunkte des jeweiligen Abtastpunktes
const
int c_nsptchk;
// Wert der Konstante wird im Konstruktor gesetzt, enthält
die Anzahl der Abtastpunkte des Wave-Stroms, aktuell 100
};
Beschreibung:
Die Klasse CWave enthält die Operationen um eine Wave-Datei öffnen und die für die Fouriertransformation benötigten akustischen Daten extrahieren zu können.
Klassen-Deklaration:
class CWave
{
public:
CWave();
// Konstruktor, initialisiert die Startwerte
virtual ~CWave();
// Dekonstruktor, gibt allocierten Speicher wieder frei
bool
Read(char *fname);
// liest die Daten der Wave-Datei "fname" ein
int
*GetWavData(int &size); // gibt einen Datenvektor
zurück, der die Datenwerte
// der Wave-Datei enthält
protected:
BYTE *m_pFmt;
// Pointer zum Speichern der Wave-Datei Format-Informationen
BYTE *m_pData;
// Pointer zum Speichern der Wave-Daten
int m_nFmtSize;
// enthält die Groesse des Formatblockes der Wave-Datei in Byte
int m_nDataSize;
// enthält die Groesse des Datenblockes der Wave-Datei in Byte
const int
m_RecordSize;
// hier wird im Konstruktor die Groesse des Datenblockes, bzw.
// die Anzahl der Datenelemente, der Wave-Datei festgelegt die dem Programm zur
// weiteren Verarbeitung übergeben werden sollen.
// Momentan ist sie auf eine Aufnahmedauer von 1s bei einer Samplingrate von
22050Hz
// festgelegt, d.h. auf 22050.
};
Jens Fiedler, 22. November 2001