H
Danke! Also diese Pointerunion ist Teil einer Klasse namens Buffer, der dann später in die zu speichernde Wav-datei geschrieben wird.
// Buffer.cpp: implementation of the CBuffer class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Buffer.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBuffer::CBuffer(DWORD size, bool AutoDelete)
{
m_bAutoDelete = AutoDelete;
try
{
ptr.b = new BYTE[size];
if(ptr.b) ByteLen = size;
}
catch(...)
{
ErrorMsg("Out of memory!");
}
}
CBuffer::CBuffer(void* buffer, DWORD length)
{
m_bAutoDelete = false;
if(buffer)
{
ptr.v = buffer;
ByteLen = length;
}
else
{
ptr.b = NULL;
ByteLen = 0;
}
}
CBuffer::~CBuffer()
{
// remember to delete the memory
if(m_bAutoDelete && ptr.b != NULL) delete ptr.b;
}
void CBuffer::Erase()
{
if(ptr.b) ZeroMemory(ptr.b,ByteLen);
}
// Buffer.h: interface for the CBuffer class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_BUFFER_H__B4B9CF06_B948_49A5_9145_ECB3E318BF05__INCLUDED_)
#define AFX_BUFFER_H__B4B9CF06_B948_49A5_9145_ECB3E318BF05__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "errorprint.h"
class CBuffer
{
public:
void Erase();
CBuffer(DWORD size, bool AutoDelete = true);
CBuffer(void* buffer, DWORD length);
virtual ~CBuffer();
union PointerUnion{
BYTE* b;
char* c;
WORD* w;
short int* s;
DWORD* d;
int* i;
float* f;
double* r; // real
void* v;
}ptr;
int ByteLen; // length in bytes
private:
bool m_bAutoDelete;
};
#endif // !defined(AFX_BUFFER_H__B4B9CF06_B948_49A5_9145_ECB3E318BF05__INCLUDED_)
Also so werden dann die Sampledaten in die Wavdatei geschrieben:
mmioWrite(m_hFile, buffer->ptr.c, buffer->ByteLen);
Aber wenn ich buffer->ptr.c mit memcpy in einen Array x kopiere, ist der Array x immer 0. Deshalb kann ich natürlich auch die FFT-Funktion nicht aufrufen.
Wie komm ich denn an die Sampledaten ran?
Danke
MFG
Hansi