N
nullstring
Hallo Leute,
gerade sitze ich vor dem problem, das ich eine
Klasse schreiben muss dir mir ne Wav datei vom mikro aufnimmt und
wieder abspielt.
Mein Problem ist nun, das mir meine callbackfunction nie ein
MM_WIM_DATA liefert
und augenscheinlich auch nix aufnimmt.
Tja und wie es halt so ist, bin ein newbie was Winprogrammierung
angeht.
vielen dank schonmal
ich verwende folgenden code
Die ausgabe ist bisher:
hierher0012FF40
blub:958 //<--- ausgabe UINT uMsg in der
callbackfunktion
wimopen0
hwavein:00162A08
waveinhatgeklappt
resulstprepere0
resulstprepere0
resultaddbuffer0
resultaddbuffer0
result waveInStart0
dorthinPress any key to continue . . .
Sound.h
#pragma once
class GSound
{
public:
static BOOL CALLBACK GSound::GVoiceWaveInProc(
HWAVEIN hwi,
UINT uMsg,
DWORD dwInstance,
DWORD dwParam1,
DWORD dwParam2
);
public:
GSound(void);
public:
~GSound(void);
public:
void play(void);
public:
void record(void);
public:
void setRecordTime(int milliSec);
public:
void setBits(int bits);
public:
void setSampleRate(int sampleRate);
public:
void setChannels(int channels);
public:
// bool setFile(QString fileName);
public:
// bool createFile(QString fileName);
public:
void setPlaybackDevice(int deviceId);
public:
void setRecordDevice(int deviceId);
void printMe();
void open();
public:
MMRESULT res;
HWAVEIN hWaveIn;
PWAVEHDR header1;
PWAVEHDR header2;
PBYTE saveBuffer;
private:
PBYTE soundBuffer;
};
Die dazugehoerige
sound.cpp
#include "StdAfx.h"
#include <mmsystem.h>
#include <windows.h>
#include "Sound.h"
#include <iostream>
#define INP_BUFFER_SIZE 16384
BOOL CALLBACK GSound::GVoiceWaveInProc(HWAVEIN hwi, UINT uMsg, DWORD
dwInstance, DWORD dwParam1, DWORD dwParam2)
{
GSound* s = (GSound*) dwInstance;
std::cout << s;
std::cout << "\n";
MMRESULT result;
std::cout <<"blub:";
std::cout << uMsg;
if (uMsg==MM_WIM_OPEN)
{
std::cout << "wimopen";
return true;
}
if (uMsg==MM_WIM_DATA) // signal daten kommen
{
std::cout << "wimdata";
//Sound* pVoice=(Sound*) dwInstance;
s->printMe();
//pVoice->res=waveInUnprepareHeader(pVoice->hWaveIn,
&pVoice-
//pVoice->RecordFinished();
//if (pVoice->res!=MMSYSERR_NOERROR)
// return FALSE;
//else
return TRUE;
}
return TRUE;
}
GSound::GSound(void)
{
}
GSound::~GSound(void)
{
}
void GSound:
pen(){
}
void GSound:
lay(void)
{
}
void GSound:
rintMe(void)
{
std::cout << "juhu\n";
}
void GSound::record(void)
{
PBYTE pBuffer1;
PBYTE pBuffer2;
WAVEFORMATEX waveform;
MMRESULT result;
header1 = (PWAVEHDR)malloc(sizeof(WAVEHDR));
header2 = (PWAVEHDR)malloc(sizeof(WAVEHDR));
saveBuffer = (PBYTE) malloc(1);
pBuffer1 = (PBYTE )malloc(INP_BUFFER_SIZE);
pBuffer2 = (PBYTE )malloc(INP_BUFFER_SIZE);
waveform.wFormatTag = WAVE_FORMAT_PCM;
waveform.nChannels = 1;
waveform.nSamplesPerSec = 11025;
waveform.nAvgBytesPerSec = 11025;
waveform.nBlockAlign = 1;
waveform.wBitsPerSample = 8;
waveform.cbSize = 0;
std::cout << "hierher";
MMRESULT tmp = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform,
(DWORD)
GSound::GVoiceWaveInProc,(DWORD ) this, CALLBACK_FUNCTION);
std::cout << tmp;
std::cout << "\n";
std::cout << "hwavein:";
std::cout << hWaveIn;
std::cout << "\n";
if ( tmp == 0 ){
std::cout << "waveinhatgeklappt";
// Set up and prepare header for input
header1->lpData = (LPSTR)pBuffer1;
header1->dwBufferLength = INP_BUFFER_SIZE;
header1->dwBytesRecorded=0;
header1->dwUser = 0L;
header1->dwFlags = 0L;
header1->dwLoops = 1;
header1->lpNext = NULL;
header1->reserved =0;
header2->lpData = (LPSTR) pBuffer2;
header2->dwBufferLength = INP_BUFFER_SIZE;
header2->dwBytesRecorded=0;
header2->dwUser = 0L;
header2->dwFlags = 0L;
header2->dwLoops = 1;
header2->lpNext = NULL;
header2->reserved =0;
result = waveInPrepareHeader(
hWaveIn,header1,sizeof(WAVEHDR) );
std::cout << "resulstprepere" << result;
result = waveInPrepareHeader(
hWaveIn,header2,sizeof(WAVEHDR) );
std::cout << "resulstprepere" << result << "\n";
result = waveInAddBuffer( hWaveIn,header1,sizeof(WAVEHDR));
std::cout << "resultaddbuffer" << result << "\n";
result = waveInAddBuffer(
hWaveIn,header2,sizeof(WAVEHDR));
std::cout << "resultaddbuffer" << result << "\n";
result = waveInStart(hWaveIn);
std::cout << "result waveInStart" << result << "\n";
}
std::cout << "dorthin";
}
void GSound::setRecordTime(int milliSec)
{
}
void GSound::setBits(int bits)
{
}
void GSound::setSampleRate(int sampleRate)
{
}
void GSound::setChannels(int channels)
{
}
//bool Sound::setFile(QString fileName)
//{/
// return false;
//}
//bool Sound::createFile(QString fileName)
//{/
// return false;
//}
void GSound::setPlaybackDevice(int deviceId)
{
}
void GSound::setRecordDevice(int deviceId)
{
}
und last but not least
meine main
// GSound.cpp : Definiert den Einstiegspunkt für die
Konsolenanwendung.
//
#include "stdafx.h"
#include <iostream>
#include "sound.h"
#include "VoicePlaying.h"
#include "VoiceRecording.h"
int _tmain(int argc, _TCHAR* argv[])
{
GSound s;
s.record();
return 0;
}
Das ganze soll unter der konsole laufen.
Uber gute Dokuhinweise wuerd ich mich auch schon freuen
gerade sitze ich vor dem problem, das ich eine
Klasse schreiben muss dir mir ne Wav datei vom mikro aufnimmt und
wieder abspielt.
Mein Problem ist nun, das mir meine callbackfunction nie ein
MM_WIM_DATA liefert
und augenscheinlich auch nix aufnimmt.
Tja und wie es halt so ist, bin ein newbie was Winprogrammierung
angeht.
vielen dank schonmal
ich verwende folgenden code
Die ausgabe ist bisher:
hierher0012FF40
blub:958 //<--- ausgabe UINT uMsg in der
callbackfunktion
wimopen0
hwavein:00162A08
waveinhatgeklappt
resulstprepere0
resulstprepere0
resultaddbuffer0
resultaddbuffer0
result waveInStart0
dorthinPress any key to continue . . .
Sound.h
#pragma once
class GSound
{
public:
static BOOL CALLBACK GSound::GVoiceWaveInProc(
HWAVEIN hwi,
UINT uMsg,
DWORD dwInstance,
DWORD dwParam1,
DWORD dwParam2
);
public:
GSound(void);
public:
~GSound(void);
public:
void play(void);
public:
void record(void);
public:
void setRecordTime(int milliSec);
public:
void setBits(int bits);
public:
void setSampleRate(int sampleRate);
public:
void setChannels(int channels);
public:
// bool setFile(QString fileName);
public:
// bool createFile(QString fileName);
public:
void setPlaybackDevice(int deviceId);
public:
void setRecordDevice(int deviceId);
void printMe();
void open();
public:
MMRESULT res;
HWAVEIN hWaveIn;
PWAVEHDR header1;
PWAVEHDR header2;
PBYTE saveBuffer;
private:
PBYTE soundBuffer;
};
Die dazugehoerige
sound.cpp
#include "StdAfx.h"
#include <mmsystem.h>
#include <windows.h>
#include "Sound.h"
#include <iostream>
#define INP_BUFFER_SIZE 16384
BOOL CALLBACK GSound::GVoiceWaveInProc(HWAVEIN hwi, UINT uMsg, DWORD
dwInstance, DWORD dwParam1, DWORD dwParam2)
{
GSound* s = (GSound*) dwInstance;
std::cout << s;
std::cout << "\n";
MMRESULT result;
std::cout <<"blub:";
std::cout << uMsg;
if (uMsg==MM_WIM_OPEN)
{
std::cout << "wimopen";
return true;
}
if (uMsg==MM_WIM_DATA) // signal daten kommen
{
std::cout << "wimdata";
//Sound* pVoice=(Sound*) dwInstance;
s->printMe();
//pVoice->res=waveInUnprepareHeader(pVoice->hWaveIn,
&pVoice-
//pVoice->GetMMResult(pVoice->res);header1, sizeof(WAVEHDR));
//pVoice->RecordFinished();
//if (pVoice->res!=MMSYSERR_NOERROR)
// return FALSE;
//else
return TRUE;
}
return TRUE;
}
GSound::GSound(void)
{
}
GSound::~GSound(void)
{
}
void GSound:
}
void GSound:
{
}
void GSound:
{
std::cout << "juhu\n";
}
void GSound::record(void)
{
PBYTE pBuffer1;
PBYTE pBuffer2;
WAVEFORMATEX waveform;
MMRESULT result;
header1 = (PWAVEHDR)malloc(sizeof(WAVEHDR));
header2 = (PWAVEHDR)malloc(sizeof(WAVEHDR));
saveBuffer = (PBYTE) malloc(1);
pBuffer1 = (PBYTE )malloc(INP_BUFFER_SIZE);
pBuffer2 = (PBYTE )malloc(INP_BUFFER_SIZE);
waveform.wFormatTag = WAVE_FORMAT_PCM;
waveform.nChannels = 1;
waveform.nSamplesPerSec = 11025;
waveform.nAvgBytesPerSec = 11025;
waveform.nBlockAlign = 1;
waveform.wBitsPerSample = 8;
waveform.cbSize = 0;
std::cout << "hierher";
MMRESULT tmp = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform,
(DWORD)
GSound::GVoiceWaveInProc,(DWORD ) this, CALLBACK_FUNCTION);
std::cout << tmp;
std::cout << "\n";
std::cout << "hwavein:";
std::cout << hWaveIn;
std::cout << "\n";
if ( tmp == 0 ){
std::cout << "waveinhatgeklappt";
// Set up and prepare header for input
header1->lpData = (LPSTR)pBuffer1;
header1->dwBufferLength = INP_BUFFER_SIZE;
header1->dwBytesRecorded=0;
header1->dwUser = 0L;
header1->dwFlags = 0L;
header1->dwLoops = 1;
header1->lpNext = NULL;
header1->reserved =0;
header2->lpData = (LPSTR) pBuffer2;
header2->dwBufferLength = INP_BUFFER_SIZE;
header2->dwBytesRecorded=0;
header2->dwUser = 0L;
header2->dwFlags = 0L;
header2->dwLoops = 1;
header2->lpNext = NULL;
header2->reserved =0;
result = waveInPrepareHeader(
hWaveIn,header1,sizeof(WAVEHDR) );
std::cout << "resulstprepere" << result;
result = waveInPrepareHeader(
hWaveIn,header2,sizeof(WAVEHDR) );
std::cout << "resulstprepere" << result << "\n";
result = waveInAddBuffer( hWaveIn,header1,sizeof(WAVEHDR));
std::cout << "resultaddbuffer" << result << "\n";
result = waveInAddBuffer(
hWaveIn,header2,sizeof(WAVEHDR));
std::cout << "resultaddbuffer" << result << "\n";
result = waveInStart(hWaveIn);
std::cout << "result waveInStart" << result << "\n";
}
std::cout << "dorthin";
}
void GSound::setRecordTime(int milliSec)
{
}
void GSound::setBits(int bits)
{
}
void GSound::setSampleRate(int sampleRate)
{
}
void GSound::setChannels(int channels)
{
}
//bool Sound::setFile(QString fileName)
//{/
// return false;
//}
//bool Sound::createFile(QString fileName)
//{/
// return false;
//}
void GSound::setPlaybackDevice(int deviceId)
{
}
void GSound::setRecordDevice(int deviceId)
{
}
und last but not least
meine main
// GSound.cpp : Definiert den Einstiegspunkt für die
Konsolenanwendung.
//
#include "stdafx.h"
#include <iostream>
#include "sound.h"
#include "VoicePlaying.h"
#include "VoiceRecording.h"
int _tmain(int argc, _TCHAR* argv[])
{
GSound s;
s.record();
return 0;
}
Das ganze soll unter der konsole laufen.
Uber gute Dokuhinweise wuerd ich mich auch schon freuen