zoukankan      html  css  js  c++  java
  • WinAPI: waveOutOpen 打开波形输出设备

    提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了
    PostMessage
    timeGetSystemTime
    timeGetTime
    timeSetEvent
    timeKillEvent
    midiOutShortMsg
    midiOutLongMsg
    OutputDebugString 外, 也不能有其他系统调用.
    //声明:
    waveOutOpen(
      lphWaveOut: PHWaveOut;   {用于返回设备句柄的指针; 如果 dwFlags=WAVE_FORMAT_QUERY, 这里应是 nil}
      uDeviceID: UINT;         {设备ID; 可以指定为: WAVE_MAPPER, 这样函数会根据给定的波形格式选择合适的设备}
      lpFormat: PWaveFormatEx; {TWaveFormat 结构的指针; TWaveFormat 包含要申请的波形格式}
      dwCallback: DWORD        {回调函数地址或窗口句柄; 若不使用回调机制, 设为 nil}
      dwInstance: DWORD        {给回调函数的实例数据; 不用于窗口}
      dwFlags: DWORD           {打开选项}
    ): MMRESULT;               {成功返回 0; 可能的错误值见下:}
    
    MMSYSERR_BADDEVICEID = 2;  {设备ID超界}
    MMSYSERR_ALLOCATED   = 4;  {指定的资源已被分配}
    MMSYSERR_NODRIVER    = 6;  {没有安装驱动程序}
    MMSYSERR_NOMEM       = 7;  {不能分配或锁定内存}
    WAVERR_BADFORMAT     = 32; {设备不支持请求的波形格式}
    
    //TWaveFormatEx 结构:
    TWaveFormatEx = packed record
      wFormatTag: Word;       {指定格式类型; 默认 WAVE_FORMAT_PCM = 1;}
      nChannels: Word;        {指出波形数据的通道数; 单声道为 1, 立体声为 2}
      nSamplesPerSec: DWORD;  {指定样本速率(每秒的样本数)}
      nAvgBytesPerSec: DWORD; {指定数据传输的平均速率(每秒的字节数)}
      nBlockAlign: Word;      {指定块对齐(单位字节), 块对齐是数据的最小单位}
      wBitsPerSample: Word;   {采样大小(字节)}
      cbSize: Word;           {附加信息大小; PCM 格式没这个字段}
    end;
    {16 位立体声 PCM 的块对齐是 4 字节(每个样本2字节, 2个通道)}
    
    //打开选项 dwFlags 的可选值:
    WAVE_FORMAT_QUERY = $0001;     {只是判断设备是否支持给定的格式, 并不打开}
    WAVE_ALLOWSYNC    = $0002;     {当是同步设备时必须指定}
    CALLBACK_WINDOW   = $00010000; {当 dwCallback 是窗口句柄时指定}
    CALLBACK_FUNCTION = $00030000; {当 dwCallback 是函数指针时指定}
    
    //如果选择窗口接受回调信息, 可能会发送到窗口的消息有:
    MM_WOM_OPEN  = $3BB;
    MM_WOM_CLOSE = $3BC;
    MM_WOM_DONE  = $3BD;
    
    //如果选择函数接受回调信息, 可能会发送给函数的消息有:
    WOM_OPEN  = MM_WOM_OPEN;
    WOM_CLOSE = MM_WOM_CLOSE;
    WOM_DONE  = MM_WOM_DONE;
    
    //举例:
  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/del/p/1075638.html
Copyright © 2011-2022 走看看