Skip to content

Commit 1c3d562

Browse files
committed
first upload
0 parents  commit 1c3d562

15 files changed

Lines changed: 2566 additions & 0 deletions

KeyboardHook.sln

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 16
4+
VisualStudioVersion = 16.0.33529.622
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KeyboardHook", "KeyboardHook\KeyboardHook.vcxproj", "{D6C195A5-B306-45CD-9E5A-044C90290F82}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|x64 = Debug|x64
11+
Debug|x86 = Debug|x86
12+
Release|x64 = Release|x64
13+
Release|x86 = Release|x86
14+
EndGlobalSection
15+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Debug|x64.ActiveCfg = Debug|x64
17+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Debug|x64.Build.0 = Debug|x64
18+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Debug|x86.ActiveCfg = Debug|Win32
19+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Debug|x86.Build.0 = Debug|Win32
20+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Release|x64.ActiveCfg = Release|x64
21+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Release|x64.Build.0 = Release|x64
22+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Release|x86.ActiveCfg = Release|Win32
23+
{D6C195A5-B306-45CD-9E5A-044C90290F82}.Release|x86.Build.0 = Release|Win32
24+
EndGlobalSection
25+
GlobalSection(SolutionProperties) = preSolution
26+
HideSolutionNode = FALSE
27+
EndGlobalSection
28+
GlobalSection(ExtensibilityGlobals) = postSolution
29+
SolutionGuid = {E9A48BD7-FC27-4951-9118-B6920000C18D}
30+
EndGlobalSection
31+
EndGlobal

KeyboardHook/Audio.cpp

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
#define _CRT_SECURE_NO_WARNINGS
2+
3+
#include "Audio.h"
4+
5+
static int patestCallback( const void *inputBuffer, void *outputBuffer,
6+
unsigned long framesPerBuffer,
7+
const PaStreamCallbackTimeInfo* timeInfo,
8+
PaStreamCallbackFlags statusFlags,
9+
void *userData )
10+
{
11+
paTestData *data = (paTestData*)userData;
12+
float* rptr = &data->bufferOfSndfile[data->frameIndex * data->sfinfo.channels]; // read buffer continuely
13+
float *wptr = (float*)outputBuffer;
14+
unsigned long i;
15+
int finished;
16+
unsigned int framesLeft = data->sfinfo.frames - data->frameIndex;
17+
18+
(void) timeInfo; /* Prevent unused variable warnings. */
19+
(void) statusFlags;
20+
(void) inputBuffer;
21+
22+
if (framesLeft < framesPerBuffer) /* final buffer... */
23+
{
24+
for (i = 0; i < framesLeft; i++)
25+
{
26+
*wptr++ = *rptr++; /* left */
27+
if (data->sfinfo.channels == 2) *wptr++ = *rptr++; /* right */
28+
}
29+
for (; i < framesPerBuffer; i++)
30+
{
31+
*wptr++ = 0; /* left */
32+
if (data->sfinfo.channels == 2) *wptr++ = 0; /* right */
33+
}
34+
data->frameIndex += framesLeft;
35+
finished = paComplete;
36+
}
37+
else
38+
{
39+
for (i = 0; i < framesPerBuffer; i++)
40+
{
41+
*wptr++ = *rptr++; /* left */
42+
if (data->sfinfo.channels == 2) *wptr++ = *rptr++; /* right */
43+
}
44+
data->frameIndex += framesPerBuffer;
45+
finished = paContinue;
46+
}
47+
48+
return finished;
49+
}
50+
51+
/*******************************************************************/
52+
Audio::Audio(const char* audioFile)
53+
{
54+
audioPath = audioFile;
55+
Setup(audioFile);
56+
}
57+
58+
int Audio::Setup(const char* audioFile)
59+
{
60+
PaStreamParameters outputParameters;
61+
int i;
62+
63+
SNDFILE* infile = NULL;
64+
memset(&data.sfinfo, 0, sizeof(data.sfinfo));
65+
infile = sf_open(audioFile, SFM_READ, &data.sfinfo);
66+
67+
/* read sound file */
68+
data.bufferOfSndfile = (float*)malloc(data.sfinfo.frames * data.sfinfo.channels * sizeof(float));
69+
sf_read_float(infile, data.bufferOfSndfile, data.sfinfo.frames * data.sfinfo.channels);
70+
sf_close(infile);
71+
72+
data.frameIndex = 0;
73+
numsSec = data.sfinfo.frames / data.sfinfo.samplerate; // get file's seconds
74+
75+
err = Pa_Initialize();
76+
if( err != paNoError ) goto error;
77+
78+
outputParameters.device = Pa_GetDefaultOutputDevice(); /* default output device */
79+
if (outputParameters.device == paNoDevice) goto error;
80+
81+
outputParameters.channelCount = data.sfinfo.channels; /* stereo output */
82+
outputParameters.sampleFormat = paFloat32;
83+
outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
84+
outputParameters.hostApiSpecificStreamInfo = NULL;
85+
86+
err = Pa_OpenStream(
87+
&stream,
88+
NULL, /* no input */
89+
&outputParameters,
90+
data.sfinfo.samplerate,
91+
FRAMES_PER_BUFFER,
92+
paClipOff, /* we won't output out of range samples so don't bother clipping them */
93+
patestCallback,
94+
&data );
95+
if( err != paNoError ) goto error;
96+
97+
return err;
98+
error:
99+
Pa_Terminate();
100+
return err;
101+
}
102+
103+
int Audio::Play()
104+
{
105+
err = Pa_StartStream(stream);
106+
if (err != paNoError) goto error;
107+
108+
Pa_Sleep(numsSec * 1000);
109+
110+
return err;
111+
error:
112+
Pa_Terminate();
113+
return err;
114+
}
115+
116+
int Audio::End()
117+
{
118+
err = Pa_StopStream(stream);
119+
if (err != paNoError) goto error;
120+
121+
err = Pa_CloseStream(stream);
122+
if (err != paNoError) goto error;
123+
124+
Pa_Terminate();
125+
126+
free(data.bufferOfSndfile);
127+
return err;
128+
error:
129+
Pa_Terminate();
130+
return err;
131+
}

KeyboardHook/Audio.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#ifndef IS_DEFINED_AUDIO
2+
#define IS_DEFINED_AUDIO
3+
4+
#include "portaudio.h"
5+
#include "sndfile.h"
6+
#include <iostream>
7+
#include <math.h>
8+
9+
#define NUM_SECONDS (5)
10+
#define SAMPLE_RATE (44100)
11+
#define FRAMES_PER_BUFFER (64)
12+
13+
typedef struct
14+
{
15+
float* bufferOfSndfile;
16+
SF_INFO sfinfo;
17+
int frameIndex;
18+
}
19+
paTestData;
20+
21+
class Audio
22+
{
23+
public:
24+
Audio(const char* audioFile);
25+
26+
private:
27+
PaStream* stream;
28+
paTestData data;
29+
PaError err;
30+
31+
int numsSec;
32+
const char* audioPath;
33+
34+
public:
35+
int Setup(const char* audioFile);
36+
int Play();
37+
int End();
38+
};
39+
40+
#endif // !IS_DEFINED_AUDIO
51.4 KB
Binary file not shown.
468 KB
Binary file not shown.

KeyboardHook/KeyboardHook.vcxproj

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup Label="ProjectConfigurations">
4+
<ProjectConfiguration Include="Debug|Win32">
5+
<Configuration>Debug</Configuration>
6+
<Platform>Win32</Platform>
7+
</ProjectConfiguration>
8+
<ProjectConfiguration Include="Release|Win32">
9+
<Configuration>Release</Configuration>
10+
<Platform>Win32</Platform>
11+
</ProjectConfiguration>
12+
<ProjectConfiguration Include="Debug|x64">
13+
<Configuration>Debug</Configuration>
14+
<Platform>x64</Platform>
15+
</ProjectConfiguration>
16+
<ProjectConfiguration Include="Release|x64">
17+
<Configuration>Release</Configuration>
18+
<Platform>x64</Platform>
19+
</ProjectConfiguration>
20+
</ItemGroup>
21+
<PropertyGroup Label="Globals">
22+
<VCProjectVersion>16.0</VCProjectVersion>
23+
<Keyword>Win32Proj</Keyword>
24+
<ProjectGuid>{d6c195a5-b306-45cd-9e5a-044c90290f82}</ProjectGuid>
25+
<RootNamespace>KeyboardHook</RootNamespace>
26+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
27+
</PropertyGroup>
28+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
29+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
30+
<ConfigurationType>Application</ConfigurationType>
31+
<UseDebugLibraries>true</UseDebugLibraries>
32+
<PlatformToolset>v142</PlatformToolset>
33+
<CharacterSet>Unicode</CharacterSet>
34+
</PropertyGroup>
35+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
36+
<ConfigurationType>Application</ConfigurationType>
37+
<UseDebugLibraries>false</UseDebugLibraries>
38+
<PlatformToolset>v142</PlatformToolset>
39+
<WholeProgramOptimization>true</WholeProgramOptimization>
40+
<CharacterSet>Unicode</CharacterSet>
41+
</PropertyGroup>
42+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
43+
<ConfigurationType>Application</ConfigurationType>
44+
<UseDebugLibraries>true</UseDebugLibraries>
45+
<PlatformToolset>v142</PlatformToolset>
46+
<CharacterSet>Unicode</CharacterSet>
47+
</PropertyGroup>
48+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
49+
<ConfigurationType>Application</ConfigurationType>
50+
<UseDebugLibraries>false</UseDebugLibraries>
51+
<PlatformToolset>v142</PlatformToolset>
52+
<WholeProgramOptimization>true</WholeProgramOptimization>
53+
<CharacterSet>Unicode</CharacterSet>
54+
</PropertyGroup>
55+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
56+
<ImportGroup Label="ExtensionSettings">
57+
</ImportGroup>
58+
<ImportGroup Label="Shared">
59+
</ImportGroup>
60+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
61+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
62+
</ImportGroup>
63+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
64+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
65+
</ImportGroup>
66+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
67+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
68+
</ImportGroup>
69+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
70+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
71+
</ImportGroup>
72+
<PropertyGroup Label="UserMacros" />
73+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
74+
<LinkIncremental>true</LinkIncremental>
75+
</PropertyGroup>
76+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
77+
<LinkIncremental>false</LinkIncremental>
78+
</PropertyGroup>
79+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
80+
<LinkIncremental>true</LinkIncremental>
81+
</PropertyGroup>
82+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
83+
<LinkIncremental>false</LinkIncremental>
84+
</PropertyGroup>
85+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
86+
<ClCompile>
87+
<WarningLevel>Level3</WarningLevel>
88+
<SDLCheck>true</SDLCheck>
89+
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
90+
<ConformanceMode>true</ConformanceMode>
91+
<AdditionalIncludeDirectories>../include/PortAudio/;../include/Sndfile/</AdditionalIncludeDirectories>
92+
</ClCompile>
93+
<Link>
94+
<SubSystem>Console</SubSystem>
95+
<GenerateDebugInformation>true</GenerateDebugInformation>
96+
<AdditionalDependencies>../lib/PortAudio/portaudio_x86.lib;../lib/Sndfile/sndfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
97+
</Link>
98+
</ItemDefinitionGroup>
99+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
100+
<ClCompile>
101+
<WarningLevel>Level3</WarningLevel>
102+
<FunctionLevelLinking>true</FunctionLevelLinking>
103+
<IntrinsicFunctions>true</IntrinsicFunctions>
104+
<SDLCheck>true</SDLCheck>
105+
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
106+
<ConformanceMode>true</ConformanceMode>
107+
<AdditionalIncludeDirectories>../include/PortAudio/;../include/Sndfile/</AdditionalIncludeDirectories>
108+
</ClCompile>
109+
<Link>
110+
<SubSystem>Console</SubSystem>
111+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
112+
<OptimizeReferences>true</OptimizeReferences>
113+
<GenerateDebugInformation>true</GenerateDebugInformation>
114+
<AdditionalDependencies>../lib/PortAudio/portaudio_x86.lib;../lib/Sndfile/sndfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
115+
</Link>
116+
</ItemDefinitionGroup>
117+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
118+
<ClCompile>
119+
<WarningLevel>Level3</WarningLevel>
120+
<SDLCheck>true</SDLCheck>
121+
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
122+
<ConformanceMode>true</ConformanceMode>
123+
<AdditionalIncludeDirectories>../include/PortAudio/;../include/Sndfile/</AdditionalIncludeDirectories>
124+
</ClCompile>
125+
<Link>
126+
<SubSystem>Console</SubSystem>
127+
<GenerateDebugInformation>true</GenerateDebugInformation>
128+
<AdditionalDependencies>../lib/PortAudio/portaudio_x86.lib;../lib/Sndfile/sndfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
129+
</Link>
130+
</ItemDefinitionGroup>
131+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
132+
<ClCompile>
133+
<WarningLevel>Level3</WarningLevel>
134+
<FunctionLevelLinking>true</FunctionLevelLinking>
135+
<IntrinsicFunctions>true</IntrinsicFunctions>
136+
<SDLCheck>true</SDLCheck>
137+
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
138+
<ConformanceMode>true</ConformanceMode>
139+
<AdditionalIncludeDirectories>../include/PortAudio/;../include/Sndfile/</AdditionalIncludeDirectories>
140+
</ClCompile>
141+
<Link>
142+
<SubSystem>Console</SubSystem>
143+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
144+
<OptimizeReferences>true</OptimizeReferences>
145+
<GenerateDebugInformation>true</GenerateDebugInformation>
146+
<AdditionalDependencies>../lib/PortAudio/portaudio_x86.lib;../lib/Sndfile/sndfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
147+
</Link>
148+
</ItemDefinitionGroup>
149+
<ItemGroup>
150+
<ClCompile Include="Audio.cpp" />
151+
<ClCompile Include="main.cpp" />
152+
</ItemGroup>
153+
<ItemGroup>
154+
<ClInclude Include="..\include\PortAudio\portaudio.h" />
155+
<ClInclude Include="..\include\Sndfile\sndfile.h" />
156+
<ClInclude Include="Audio.h" />
157+
</ItemGroup>
158+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
159+
<ImportGroup Label="ExtensionTargets">
160+
</ImportGroup>
161+
</Project>

0 commit comments

Comments
 (0)