Frequenzen erkennen
-
Sollte das Prog selber machen
(sorry für die lange wartezeit)
-
Ich hoffe ihr könnt mir helfen:
Ich hab den obigen Code ausprobiert und die Fehler behoben.
Jetzt kommt aber beim Linken die Fehler Meldung:*-------------------Konfiguration: WaveIn - Win32 Debug--------------------
Linker-Vorgang läuft...
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInClose@4
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInReset@4
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInUnprepareHeader@12
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInAddBuffer@12
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInPrepareHeader@12
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInStart@4
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInOpen@24
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInGetDevCapsA@12
Main.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__waveInGetNumDevs@0
Debug/WaveIn.exe : fatal error LNK1120: 9 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.WaveIn.exe - 10 Fehler, 0 Warnung(en)*
mmsystem.h und winmm.lib hab ich eingfügt.. an was kanns den noch liegen?
-
Kann es sein, dass du die lib nur in der Release-Version hinzugefügt hast?
-
Hallo !
Wenn ich die Schnellüberwachung für WaveData einschalte stehen da nur Zahlen und Zeichen drin z.B. " -51 '€' ". Kann mir da jemand helfen oder ist das normal ?
-
Evtl. versucht die Schnellüberwachung einfach die Daten als ASCI-Zeichen zu interpretieren
-
Sieht eher so aus als ob WaveData nicht initialisiert ist...
Wann genau sieht das denn so aus?
Bevor die Struktur befüllt wird oder hinterher?
-
Das ist mein Sourcecode vielleicht hilft der ja das Problem zu lösen.
VOID GetAudioData() { #define CHK(mmr) if(mmr!=MMSYSERR_NOERROR){MessageBox(0,"Fehler",0,0);} HWAVEIN hWaveIn; MMRESULT mmR; WAVEFORMATEX lpWaveFormatEx; WAVEHDR lpWaveHeader; char pBuff[512]; int i=0; lpWaveFormatEx.wFormatTag =1; lpWaveFormatEx.nChannels =1; lpWaveFormatEx.nSamplesPerSec =11025; lpWaveFormatEx.nAvgBytesPerSec=11025; lpWaveFormatEx.nBlockAlign =1; lpWaveFormatEx.wBitsPerSample =8; lpWaveHeader.lpData =&pBuff[0]; lpWaveHeader.dwBufferLength=512; lpWaveHeader.dwFlags =0L; lpWaveHeader.dwLoops =0L; mmR=waveInOpen(&hWaveIn,0,&lpWaveFormatEx,0,0,0); CHK(mmR); mmR=waveInStart(hWaveIn); CHK(mmR); mmR=waveInPrepareHeader(hWaveIn,&lpWaveHeader,sizeof(WAVEHDR)); CHK(mmR); while (i<1000) //nicht sehr sinnvoll aber praktisch (Testschleife) { waveInAddBuffer(hWaveIn,&lpWaveHeader,sizeof(WAVEHDR)); i++; pBuff; //Stelle für Schnellüberwachung } waveInUnprepareHeader(hWaveIn,&lpWaveHeader,sizeof(WAVEHDR)); waveInReset(hWaveIn); waveInClose(hWaveIn); }
-
pBuff ist ja ein Array vom Typ char - deswegen versucht die Schnellüberwachung den Inhalt als Sting zu interpretieren

-
Aber wie komme ich denn nun genau an diese Werte die in dem Array stehen ?
Ich habe schonint wert=atoi(pBuff[0]);probiert aber da kommt eine unbehandelte Ausnahme.
-
Ich würde denken, dass du einfach casten kannst, also:
int wert = (int)pBuff[0];Wenn du den Wert unbedingt in einem Int haben musst - eigentlich kannst du ja auch direkt mit pBuff[0] arbeiten (ist ja auch schon eine Zahl)
-
Jetzt habe ich nur noch ein Problem und zwar: in dem Array stehen keine Zahlen von 0-256 sonder sehr große und sehr kleine auch negative Zahlen.
-
erst nach dem casten? und wenn du Zahlen zw. 0 und 255 willst solltest du für pBuff unsigned char verwenden

-
Wenn ich mit Hilfe einer Timernachricht alle 25 oder 50 ms den Puffer fülle gibt es immer eine kleine Unterbrechung des Sound wie kann ich das denn verhindern ? Ich mal irgendwas mit einem Thread gesehen weiß aber nicht wie genau ich das anstellen muss das es auch wirklich funktioniert.
-
Hallo ! Wenn ich mir den Puffer so füllen lasse dann höre ich gar nichts mehr !
Was ist ist denn da nur falsch ? Ich werde bald verrückt.#define SAMPLERATE 44100 VOID PrepareAnalyzer() { MMRESULT mmR; lpWaveFormatEx.cbSize =0; lpWaveFormatEx.nAvgBytesPerSec=SAMPLERATE*2; lpWaveFormatEx.nBlockAlign =2; lpWaveFormatEx.nChannels =1; lpWaveFormatEx.nSamplesPerSec =SAMPLERATE; lpWaveFormatEx.wBitsPerSample =16; lpWaveFormatEx.wFormatTag =WAVE_FORMAT_PCM; mmR=waveInOpen(&hWaveIn,WAVE_MAPPER,&lpWaveFormatEx,(DWORD)g_hWnd,0L,CALLBACK_WINDOW); CHECK_MMR(mmR); lpWaveHdr.dwBufferLength=WAVEDATA; lpWaveHdr.dwBytesRecorded=0; lpWaveHdr.dwFlags=0L; lpWaveHdr.dwLoops=0L; lpWaveHdr.dwUser=0L; lpWaveHdr.lpData=(LPSTR)chWaveData; mmR=waveInPrepareHeader(hWaveIn,&lpWaveHdr,sizeof(WAVEHDR)); CHECK_MMR(mmR); mmR=waveInAddBuffer(hWaveIn,&lpWaveHdr,sizeof(WAVEHDR)); CHECK_MMR(mmR); } VOID GetAudioData() { MMRESULT mmR; mmR=waveInStart(hWaveIn); CHECK_MMR(mmR); } VOID CloseAnalyzer() { if(hWaveIn!=NULL) { waveInUnprepareHeader(hWaveIn,&lpWaveHdr,sizeof(WAVEHDR)); waveInReset(hWaveIn); waveInClose(hWaveIn); } } LRESULT CALLBACK WindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_COMMAND: { switch(LOWORD(wParam)) { case BTN_GETAUDIODATA: { GetAudioData(); return 0; } return 0; } } case WM_DESTROY: { CloseAnalyzer(); return 0; } case MM_WIM_DATA: { waveInAddBuffer(hWaveIn,&lpWaveHdr,sizeof(WAVEHDR)); return 0; } } return DefWindowProc(hWnd,msg,wParam,lParam); }
-
Kommen die Nachrichten denn an? Und sind hWaveIn und lpWaveHdr dort gültig?
-
Ja ich komme an den Puffer ran es ist auch alles gültig nur der Sound kommt nicht.