热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Wave文件(13):waveOutGetVolume、waveOutSetVolume

左右声道的音量是单调的;表示音量的32位整数的低16位是左声道、高16位是右声道.代码文件:Unit1;Windows,Messages,SysUtils,Variants,Cla
左右声道的音量是单调的; 表示音量的 32 位整数的低 16 位是左声道、高 16 位是右声道.

代码文件:

Unit1;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;TForm1 = (TForm)Button1: TButton;Button2: TButton;Button3: TButton;ScrollBar1: TScrollBar;ScrollBar2: TScrollBar;FormCreate(Sender: TObject);Button1Click(Sender: TObject);Button2Click(Sender: TObject);Button3Click(Sender: TObject);ScrollBar1Change(Sender: TObject);FormDestroy(Sender: TObject);;Form1: TForm1;MMSystem;GetWaveFmtData(path: ; fmt: TWaveFormatEx; buf: TBytes): Boolean;hFile: HMMIO;ckiRIFF,ckiFmt,ckiData: TMMCKInfo;Result := False;hFile := mmioOpen(PChar(path), , MMIO_READ);hFile = Exit;ZeroMemory(@ckiRIFF, SizeOf(TMMCKInfo));ZeroMemory(@ckiFmt, SizeOf(TMMCKInfo));ZeroMemory(@ckiData, SizeOf(TMMCKInfo));ckiRIFF.fccType := mmioStringToFOURCC(, );ckiFmt.ckid := mmioStringToFOURCC(, );ckiData.ckid := mmioStringToFOURCC(, );ZeroMemory(@fmt, SizeOf(TWaveFormatEx));mmioDescend(hFile, @ckiRIFF, , MMIO_FINDRIFF);(ckiRIFF.ckid = FOURCC_RIFF) (ckiRIFF.fccType = mmioStringToFOURCC(,)) (mmioDescend(hFile, @ckiFmt, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) (mmioRead(hFile, @fmt, ckiFmt.cksize) = ckiFmt.cksize) (mmioAscend(hFile, @ckiFmt, ) = MMSYSERR_NOERROR) (mmioDescend(hFile, @ckiData, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) SetLength(buf, ckiData.cksize);Result := (mmioRead(hFile, PAnsiChar(buf), ckiData.cksize) = ckiData.cksize);;mmioClose(hFile, );
;wh: TWaveHdr;hWaveOut: HWAVE;fmt: TWaveFormatEx;buf: TBytes;TForm1.FormCreate(Sender: TObject);Button1.Caption := ;Button2.Caption := ;Button3.Caption := ;ScrollBar1.Min := ;ScrollBar1.Max := ;ScrollBar2.Min := ;ScrollBar2.Max := ;ScrollBar2.OnChange := ScrollBar1.OnChange;
;TForm1.ScrollBar1Change(Sender: TObject);L,R: Word;hWaveOut = Exit;L := Trunc(ScrollBar1.Position / * MAXWORD);R := Trunc(ScrollBar2.Position / * MAXWORD);waveOutSetVolume(hWaveOut, MakeLong(L, R));
;WaveProc(hWave: HWAVE; uMsg, dwInstance, dwParam1, dwParam2: DWORD); ;uMsg MM_WOM_DONE: waveOutUnprepareHeader(hWave, PWaveHdr(dwParam1), SizeOf(TWaveHdr));;
;TForm1.Button1Click(Sender: TObject);path = ;volume: DWORD;GetWaveFmtData(path, fmt, buf);wh.lpData := PAnsiChar(buf);wh.dwBufferLength := Length(buf);wh.dwBytesRecorded := ;wh.dwUser := ;wh.dwFlags := WHDR_BEGINLOOP WHDR_ENDLOOP;wh.dwLoops := ;wh.lpNext := ;wh.reserved := ;waveOutOpen(@hWaveOut, WAVE_MAPPER, @fmt, DWORD(@WaveProc), , CALLBACK_FUNCTION);waveOutGetVolume(hWaveOut, @volume);ScrollBar1.Position := Trunc(LoWord(volume) / MAXWORD * );ScrollBar2.Position := Trunc(HiWord(volume) / MAXWORD * );waveOutPrepareHeader(hWaveOut, @wh, SizeOf(TWaveHdr));waveOutWrite(hWaveOut, @wh, SizeOf(TWaveHdr));
;TForm1.Button2Click(Sender: TObject);waveOutPause(hWaveOut);
;TForm1.Button3Click(Sender: TObject);waveOutRestart(hWaveOut);
;TForm1.FormDestroy(Sender: TObject);hWaveOut <> waveOutClose(hWaveOut);
;.

窗体文件:



Form1: TForm1Left &#61; Top &#61; Caption &#61; ClientHeight &#61; ClientWidth &#61; Color &#61; clBtnFaceFont.Charset &#61; DEFAULT_CHARSETFont.Color &#61; clWindowTextFont.Height &#61; -Font.Name &#61; Font.Style &#61; []OldCreateOrder &#61; FalseOnCreate &#61; FormCreateOnDestroy &#61; FormDestroyPixelsPerInch &#61; TextHeight &#61; Button1: TButtonLeft &#61; Top &#61; Width &#61; Height &#61; Caption &#61; TabOrder &#61; OnClick &#61; Button1ClickButton2: TButtonLeft &#61; Top &#61; Width &#61; Height &#61; Caption &#61; TabOrder &#61; OnClick &#61; Button2ClickButton3: TButtonLeft &#61; Top &#61; Width &#61; Height &#61; Caption &#61; TabOrder &#61; OnClick &#61; Button3ClickScrollBar1: TScrollBarLeft &#61; Top &#61; Width &#61; Height &#61; PageSize &#61; TabOrder &#61; OnChange &#61; ScrollBar1ChangeScrollBar2: TScrollBarLeft &#61; Top &#61; Width &#61; Height &#61; PageSize &#61; TabOrder &#61;

转:https://www.cnblogs.com/lzh-boy/archive/2010/01/13/1646593.html



推荐阅读
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法
    本文介绍了修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法。首先解释了UEFI的概念和作用,然后提供了两种解决方法。第一种方法是在bios界面中将Boot Mode设置为Legacy Support,Boot Priority设置为Legacy First,并关闭UEFI。第二种方法是使用U盘启动盘进入PE系统,运行磁盘分区工具DiskGenius,将硬盘的分区表设置为gpt格式,并留出288MB的内存。最后,通过运行界面输入命令cmd来完成设置。 ... [详细]
author-avatar
mobiledu2502868835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有