
先弄明白什么是API,然后做几个小程序,如,获取鼠标位置。
做完后再来看你的程序。
先用findwindowex函数寻找标题为"111111"的窗口句柄(顺便把什么是句柄弄明白)。
接着,放一个TIMER,interval设为1,越短越好,用钩子或声音API时时刻刻监视。
如是,显示你那个,不是,显示F。
参数1描述要播放的声音文件的位置和文件名;参数2的取值能决定播放声音的模式。参数2的主要取值介绍如下:取&H0时:为同步播放模式;
取&H1时:为异步播放模式;
取&H2时:当声音文件未找到就停止播音返回;
取&H8时:为循环播放模式。
当调用函数成功,就播放有关声音文件,并且函数的返回值为非0;函数调用失败,函数的返回值为0。
定义调用声音文件函数的具体步骤如下:
①在C盘根目录上建立一个名为Sound的文件夹,在此文件夹中放入5个你所需要的声音文件;
②在VB5.0状态进入“工程”菜单中的“添加模块”再选用“新建”中的“模块”;
③在模块的“通用”中输入下面代码,进行调用API函数的声明;
Declare Function sndPlaySound Lib "winmm.dll" Alias
“sndPlaySoundA" (ByV al lpszSoundName As String, ByVal uFlags As Long) As Long
Dim fil As String
④在模块中输入以下代码,定义调用声音文件函数。
Public Function sound(n As Integer) As Integer
Dim x As Integer
Select Case n
Case 1
fil = "c:\sound\beep3.wav"
x = sndPlaySound(0, 0)
x = sndPlaySound(fil, &H1 Or &H2)
sound = x
Case 2
fil = "c:\sound\hit8.wav"
x = sndPlaySound(0, 0)
x = sndPlaySound(fil, &H1 Or &H2)
sound = x
Case 3
fil = "c:\sound\net7.wav"
x = sndPlaySound(0, 0)
x = sndPlaySound(fil, &H1 Or &H2)
sound = x
Case 4
fil = "c:\sound\out12.wav"
x = sndPlaySound(0, 0)
x = sndPlaySound(fil, &H1 Or &H2)
sound = x
Case 5
fil = "c:\sound\spin5.wav"
x = sndPlaySound(0, 0)
x = sndPlaySound(fil, &H1 Or &H2)
sound = x
Case Else
sound = 0
End Select
End Function
新定义的调用声音函数格式为:sound(n),其中n的取值为1至5的正整数。利用此函数可调用5个不同的声音文件。下面是使用sound函数的演示程序:
①如图在form窗口设置6个命令控件;
②在这些命令控件的Click事件中入分别输入以下代码。
Private Sub Command1_Click()
l = sound(1)
End Sub
Private Sub Command2_Click()
l = sound(2)
End Sub
Private Sub Command3_Click()
l = sound(3)
End Sub
Private Sub Command4_Click()
l = sound(4)
End Sub
Private Sub Command5_Click()
l = sound(5)
End Sub
Private Sub Command6_Click()
End
End Sub
运行程序后,单击有关按钮就能调用所指定的声音文件,发出各种声音
c++检测车载机是否有声音输出的方法如下:c++采集声卡输出_使用CoreAudio实现对声卡输出的捕捉。
涉及的接口有:
IMMDeviceEnumerator
IMMDevice
IAudioClient
IAudioCaptureClient
主要过程:
创建多媒体设备枚举器(IMMDeviceEnumerator)
通过多媒体设备枚举器获取声卡接口(IMMDevice)
通过声卡接口获取声卡客户端接口(IAudioClient)
通过声卡客户端接口(IAudioClient)可获取声卡输出的音频参数、初始化声卡、获取声卡输出缓冲区的大小、开启/停止对声卡输出的采集
通过声卡采集客户端接口(IAudioCaptureClient)可获取采集的声卡输出数据,并对内部缓冲区进行控制
通过声卡输出客户端接口(IAudioRenderClient)可将采集的声音数据写入声音输出设备的缓存单元,输出设备可以通过IAudioClient::GetService函数获取 IAudioRenderClient 接口。
代码示例:
//首先枚举你的音频设备,你可以在这个时候获取到你机器上所有可用的设备,并指定你需要用到的那个设备
hr = CoCreateInstance(
CLSID_MMDeviceEnumerator, NULL,
CLSCTX_ALL, IID_IMMDeviceEnumerator,
(void**)&pEnumerator)
EXIT_ON_ERROR(hr)
hr = pEnumerator->GetDefaultAudioEndpoint(
eCapture, eConsole, &pDevice)
EXIT_ON_ERROR(hr)
//创建一个管理对象,通过它可以获取到你需要的一切数据
hr = pDevice->Activate(
IID_IAudioClient, CLSCTX_ALL,
NULL, (void**)&pAudioClient)
EXIT_ON_ERROR(hr)
hr = pAudioClient->GetMixFormat(&pwfx)
EXIT_ON_ERROR(hr)
//初始化管理对象,在这里,你可以指定它的最大缓冲区长度,这个很重要,应用程序控制数据块的大小以及延时长短都靠这里的初始化,具体参数大家看看文档解释
hr = pAudioClient->Initialize(
AUDCLNT_SHAREMODE_SHARED,
0,
hnsRequestedDuration,
0,
pwfx,
NULL)
EXIT_ON_ERROR(hr)
//这个buffersize,指的是缓冲区最多可以存放多少帧的数据量
hr = pAudioClient->GetBufferSize(&bufferFrameCount)
EXIT_ON_ERROR(hr)
//创建采集管理接口,这个接口很简单,没什么重要的东西
hr = pAudioClient->GetService(
IID_IAudioCaptureClient,
(void**)&pCaptureClient)
EXIT_ON_ERROR(hr)
// Notify the audio sink which format to use.
hr = pMySink->SetFormat(pwfx)
EXIT_ON_ERROR(hr)
// Calculate the actual duration of the allocated buffer.
hnsActualDuration = (double)REFTIMES_PER_SEC *
bufferFrameCount / pwfx->nSamplesPerSec
hr = pAudioClient->Start()// Start recording.
EXIT_ON_ERROR(hr)
// Each loop fills about half of the shared buffer.
while(bDone == FALSE)
{
//让程序暂停运行一段时间,缓冲区里在这段时间会被填充数据
Sleep(hnsActualDuration/REFTIMES_PER_MILLISEC/2)
hr = pCaptureClient->GetNextPacketSize(&packetLength)
EXIT_ON_ERROR(hr)
while(packetLength != 0)
{
//锁定缓冲区,获取数据
hr = pCaptureClient->GetBuffer(
&pData,
&numFramesAvailable,
&flags, NULL, NULL)
EXIT_ON_ERROR(hr)
if(flags &AUDCLNT_BUFFERFLAGS_SILENT)
{
pData = NULL
}
hr = pMySink->CopyData(
pData, numFramesAvailable, &bDone)
EXIT_ON_ERROR(hr)
hr = pCaptureClient->ReleaseBuffer(numFramesAvailable)
EXIT_ON_ERROR(hr)
hr = pCaptureClient->GetNextPacketSize(&packetLength)
EXIT_ON_ERROR(hr)
}
}
hr = pAudioClient->Stop()
EXIT_ON_ERROR(hr)
查看录制的音频可以用 audacity 这个软件
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)