文档章节

WinAPI: midiInPrepareHeader - 为 MIDI 输入准备一个缓冲区

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 287
阅读 6
收藏 0
提示:
缓冲区写满后送回应用程序.
在缓冲区给 midiInAddBuffer 前, 先要调用 midiInPrepareHeader 准备; 还要调用 GlobalAlloc 给 TWaveHdr 和其中的 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定.
//声明:
midiInPrepareHeader(
  hMidiIn: HMIDIIN;      {设备句柄}
  lpMidiInHdr: PMidiHdr; {TMidiHdr 结构指针}
  uSize: UINT            {TMidiHdr 结构大小}
): MMRESULT;             {成功返回 0; 可能的错误值如下:}

MMSYSERR_INVALHANDLE = 5;  {设备句柄无效}
MMSYSERR_NOMEM       = 7;  {不能分配或锁定内存}
MIDIERR_UNPREPARED   = 64; {TMidiHdr 没有准备好}

//TMidiHdr 是 midihdr_tag 结构的重定义:
midihdr_tag = record
  lpData: PChar;               {专用缓冲区的指针}
  dwBufferLength: DWORD;       {指定缓冲区长度}
  dwBytesRecorded: DWORD;      {输入时, 指定缓冲区中的数据量}
  dwUser: DWORD;               {指定用户数据}
  dwFlags: DWORD;              {指定缓冲区信息标志}
  lpNext: PMidiHdr;            {保留(给设备)}
  reserved: DWORD;             {保留(给设备)}
  dwOffset: DWORD;             {回调开始时, 缓冲区的偏移}
  dwReserved: array[0..7] of DWORD; {保留(给系统)}
end;

//dwFlags 的可选值:
MHDR_DONE     = $00000001; {设备已把缓冲区交还给程序}
MHDR_PREPARED = $00000002; {已为 midiInPrepareHeader 或 midiOutPrepareHeader 准备好缓冲区}
MHDR_INQUEUE  = $00000004; {保留(给设备)}
MHDR_ISSTRM   = $00000008; {是流缓冲区}

 
 
 
 
 

 

 

  
//举例:

本文转载自:http://www.cnblogs.com/del/archive/2008/02/21/1076804.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
Jna报Invalid memory access错误是怎么回事?

1、各位大神,在用jna时,总是报错,如下 Exception in thread "main" java.lang.Error: Invalid memory access at com.sun.jna.Native.invokeInt(Native Method) at com.sun.jna.Function.i......

一叶知秋至
01/31
974
1
Windows 音频知识学习汇总

使用低级音频函数 WaveX : http://blog.csdn.net/kvw3000/article/details/68468 控制着不同的音频设备, 包括 wave, midi 和辅助音频设备. 低级服务包括: (1) 查询音频设备. (2) 打开和关闭设...

刘军兴
2015/12/16
19
0
Win32多语言IME应用程序编程接口(API)

十三、IMM函数 1、IMM用户界面函数 以下是用户界面窗口可以使用的输入法管理器函数。应用程序也可以使用它们改变输入法的状态。 ImmGetCompositionWindow ImmSetCompositionWindow ImmGetCa...

yousss
04/25
0
0
vc编程的ime输入法菜单开发

WINDOWS 下 IME 编程 IME 编程心得 第一章 Windows9x 系统下汉字输入法的基本原理 第二章 Windows9x 系统提供的 ime 管理函数 第三章 ime 文件中必须使用的结构 自由拼音输入法的测试 输入法...

crossmix
2014/12/07
0
3
Linux虚拟演播室--MusE

MusE 是一个多轨的Linux虚拟演播室。它支持在一个集成的环境中实时MIDI和音频实时编辑。它对于LADSPA和DSSI插件(与Win VST支持),插座的支持,和alsa - MIDI输出和输入以及内部softsynths。...

匿名
2009/12/22
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 修改导航显示选项

选择 子页面(Child pages)来在边栏中查看当前页面的子页面。 选择 页面树(Page tree)来查看整个空间的页面树,扩展当前的页面。 你也可以选择是否完全隐藏导航显示选项或者添加你希望可见...

honeymose
29分钟前
0
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部