ghy
Alejandro Acuña
2025-03-12 26319e4c5bfbee722c15b8e7ccca9b6127bb1cb8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// WaveAudioSource.h: interface for the WaveAudioSource class.
//
//////////////////////////////////////////////////////////////////////
 
#ifndef AFX_WAVEAUDIOSOURCE_H__1FF46522_ECF5_44DC_9C3F_EE7E509676D6__INCLUDED_
#define AFX_WAVEAUDIOSOURCE_H__1FF46522_ECF5_44DC_9C3F_EE7E509676D6__INCLUDED_
 
#include <windows.h>    // required by mmsystem.h
#include <mmsystem.h>
#include <list>
 
#include "AudioSource.h"
#include "Parameters.h"
 
class AudioSampleManager;
 
class WaveAudioSource : public AudioSource
{
public:
    WaveAudioSource();
    virtual ~WaveAudioSource();
    int SetFormat(int waveFormatNumber);
    int SetVolume(unsigned long volume);
    int SetDeviceID(unsigned int deviceID);
    int SetNumBuffers(int n);
    int SetBufferSize(int s);
    int SourceStarted();
    int SourceStopped();
    int SourceThreadStarted(HANDLE sourceThreadHandle, DWORD sourceThreadID);
    int SourceThreadStopped(HANDLE sourceThreadHandle, DWORD sourceThreadID);
protected:
    virtual int GenerateData(AudioSample **ppAudioSample);
    virtual int SetTraceLevel();
private:
    int BeginAudioCapture();
    int ResetAudioCapture();
    int EndAudioCapture();
    int AddBuffer(int i);
    static void CALLBACK WaveInCallback(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
 
private:
    WAVEFORMATEX        format;
    HANDLE              dataEvent;
    HWAVEIN             hWaveIn;
    WAVEHDR             waveHdr[WAVESOURCE_MAX_WAVEHDR];
    char                dataBuffer[WAVESOURCE_MAX_WAVEHDR][WAVESOURCE_MAX_WAVEHDR_SIZE];
    int                 numBuffers;
    int                 bufferSize;
    std::list<WAVEHDR*> buffersToAdd;
    bool                bEnableAddBuffer;
    CRITICAL_SECTION    waveInMutex;
    CRITICAL_SECTION    bufferListMutex;
    CRITICAL_SECTION    filterMutex;
    AudioSampleManager  *audioSampleManager;
    bool                bRunning;
    unsigned int        waveinDeviceID;
    bool                needToSetVolume;
    unsigned int        micVolume;
};
 
#endif // !defined(AFX_WAVEAUDIOSOURCE_H__1FF46522_ECF5_44DC_9C3F_EE7E509676D6__INCLUDED_)