博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

CETK Waveform Audio Driver Test测试Case描述

Posted on 2011-11-12 23:00  RunForever  阅读(642)  评论(0编辑  收藏  举报

因为要对Audio Driver做CETK测试,所以今天了解了一下CETK测试中Audio Driver Test相关的源代码,简单的对各个Case列写如下:

Test ID

Test Name

测试目的

测试方法

100

Build Verification Test

驱动验证

遍历BuildIn下的流驱动并尝试同时打开wavein和waveout

1000

Easy Playback

播放wav文件

调用wave api sndPlaySound来播放wav文件

2000

Playback Capabilities

检查wave out支持的格式

调用wave api waveOutGetDevCaps()来获取wave out支持的格式

2001

Playback

播放音频

以wave out支持的音频格式来播放sine音频数据

2002

Playback Notifications

测试放音过程中的Notification机制

在调用waveout api waveoutopen时,通过参数传递不同通知方式(CALLBACK_NULL/CALLBACK_EVENT/CALLBACK_THREAD/CALLBACK_FUNCTION/CALLBACK_WINDOW),测试程序接收到通知信息后,将会去计算所耗费的时间并和标准时间做对比

2003

Playback Using Extended Functions

放音的过程中使用扩展功能函数

放音的同时调用调整增益的扩展功能函数

2004

Playback Buffer Freed During Playback

放音的同时释放内存

开始放音后释放内存,等待放音结束并记录所耗费的时间,并和标准时间做对比

2005

Playback Sample Rate Reporting

输出放音所支持的格式及具体的参数

调用waveOutGetDevCaps获取waveout所支持的格式,并打印其具体的参数信息,包括Channel/Sample Rate/BitsPerSample等信息

2006

Playback Initial Latency

测试放音耗时(WAVE_FORMAT_1M08)

依次调用waveout api以WAVE_FORMAT_1M08格式播放4毫秒数据量,记录时间并和标准时间做对比

2007

Playback Initial Latencies Series

测试放音耗时(所有格式)

1. 测试所有格式下的放音耗时,包括WAVE_FORMAT_1M08到WAVE_FORMAT_48000S16间的所有格式,并和标准的值做比较,在对每一种放音格式进行测试的时候,会以2^n(n介于1和12之间)毫秒为放音时常;
2. 具体的测试原理和方法与2006一样;

2008

Playback Interoperability

创建wav文件并播放

该测试按照标准的wav文件格式,创建wav文件,包含了多个chunk,然后进行播放,测试过程中Abort,原因不详

3000

Capture Capabilities

检查wave in支持的格式

调用wave api waveInGetDevCaps()来获取wave in支持的格式

3001

Capture

录音

以wave in支持的各种音频格式来录音,录音时长为1秒

3002

Capture Notifications

测试录音过程中的Notification机制

在调用wavein api waveinopen时,通过参数传递不同通知方式(CALLBACK_NULL/CALLBACK_EVENT/CALLBACK_THREAD/CALLBACK_FUNCTION/CALLBACK_WINDOW),测试程序接收到通知信息后,将会去计算所耗费的时间并和标准时间做对比

3003

Capture Buffer Freed During Capture

录音过程中释放内存

开始录音后释放内存,等待录音结束并记录所耗费的时间,并和标准时间做对比(之前的项目上出现过Wave Driver中发生Data Abort的情况,类似的其它项目却没有出现,原因不详)

3006

Capture Initial Latency

测试录音耗时(WAVE_FORMAT_1M08)

依次调用wavein api以WAVE_FORMAT_1M08格式录制4毫秒数据量大小的数据,记录时间并和标准时间做对比

3007

Capture Initial Latencies Series

测试录音耗时(所有格式)

1. 测试所有格式下的录音耗时,包括WAVE_FORMAT_1M08到WAVE_FORMAT_48000S16间的所有格式,并和标准的值做比较,在对每一种录音格式进行测试的时候,会以2^n(n介于1和12之间)毫秒为录音时常;
2. 具体的测试原理和方法与3006一样;

3008

Capture Multiple Streams

多个stream同时录音

1.线程中调用waveInPrepareHeader成功后开始计时,然后调用waveInAddBuffer和waveInStart开始录音(录音时长为2秒),录音结束后记录时间并计算录音所耗费的时间,最后和标准的时长做对比;
2. 创建最多257个线程,每个线程中都重复上述的动作;
注:
waveInPrepareHeader是阻塞式的么,当然不是,waveOutReset是阻塞式的

4000

Test Volume Control

测试混音器音量控制

测试混音器音量控制,目前的项目上不支持

4001

Test waveOutSetVolume & waveOutGetVolume

测试音量调整函数waveOutSetVolume

1. 函数waveOutSetVolume定义如下:
MMRESULT WINAPI waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume);
2. 第一个参数hwo可以传入音频设备的ID号,即0/1等,也可以传入waveout操作Handle(通过waveOutOpen可以获取到Handle);
3. 这个测试Case就是用来测试通过上述两种方式来调整音量;
注:
给函数waveOutSetVolume第一个参数传入设备号调整设备音量,而传入Stream句柄为调整Stream音量

5000

Test Power Down/Up with PlaySound Synchronus

播音时改变音频设备状态(PlaySound(…,SND_SYNC))

1. 调用PlaySound(…,SND_SYNC)播音;
2. 调用SetKernelAlarm配置系统RTC唤醒,然后调用SetSystemPowerState(TEXT("Suspend"), NULL, POWER_FORCE)使系统进入Suspend,等待系统RTC唤醒成功;
3. 判断播音是否正常;
注:
PlaySound(…,SND_SYNC)调用为阻塞式的,所以该测试没有意义

5001

Test Power Down/Up with PlaySound Asynchronus

播音时改变音频设备状态(PlaySound(…,SND_ASYNC))

1. 调用PlaySound(…,SND_ASYNC)播音;
2. 调用SetKernelAlarm配置系统RTC唤醒,然后调用SetSystemPowerState(TEXT("Suspend"), NULL, POWER_FORCE)使系统进入Suspend,等待系统RTC唤醒成功;
3. 判断播音是否正常;

5002

Test Power Down/Up with sndPlaySound Synchronus

播音时改变音频设备状态(sndPlaySound(…,SND_SYNC))

1. 调用sndPlaySound(…,SND_SYNC)播音;
2. 调用SetKernelAlarm配置系统RTC唤醒,然后调用SetSystemPowerState(TEXT("Suspend"), NULL, POWER_FORCE)使系统进入Suspend,等待系统RTC唤醒成功;
3. 判断播音是否正常;
注:
sndPlaySound(…,SND_SYNC)调用为阻塞式的,所以该测试没有意义

5003

Test Power Down/Up with sndPlaySound Asynchronus

播音时改变音频设备状态(sndPlaySound(…,SND_ASYNC))

1. 调用sndPlaySound(…,SND_ASYNC)播音;
2. 调用SetKernelAlarm配置系统RTC唤醒,然后调用SetSystemPowerState(TEXT("Suspend"), NULL, POWER_FORCE)使系统进入Suspend,等待系统RTC唤醒成功;
3. 判断播音是否正常;

5004

Test Power Down/Up with waveOutWrite

播音时改变音频设备状态(waveOutOpen/waveOutPrepareHeader/waveOutWrite)

1. 调用waveOutOpen/waveOutPrepareHeader/waveOutWrite播音;
2. 调用SetKernelAlarm配置系统RTC唤醒,然后调用SetSystemPowerState(TEXT("Suspend"), NULL, POWER_FORCE)使系统进入Suspend,等待系统RTC唤醒成功;
3. 判断播音是否正常;

6000

Playback Mixing

测试混音(播音)

1. 调用Wave out API播音;
2. 创建多个完成第一步功能的线程,并等待播音结束;

6001

Capture Mixing

测试混音(录音)

与6000测试类似,只不过是测试录音

7000

International Audio File Names

常见wav标准格式的文件并播放

1. 使用内建类CWaveFileEx创建wav文件并填充chunk;
2. 分别调用PlaySound和sndPlaySound播放;

8000

Verify Handle Validation

测试wave api

调用各种各样的wave api进行测试,确定api可用

8001

Verify Device ID Validation

测试Device ID

1. 获取录音和播音设备个数;
2. 通过调用waveOutGetDevCaps/waveInGetDevCaps并传入设备ID来确定该设备ID是否可用;

8002

Verify GUID Validation

测试GUID

调用waveOutGetProperty获取GUID,然后调用waveOutSetProperty写入

以上仅仅是个人理解,可能有错误。