Wave 文件(10): 输入输出设备与格式支持
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; ListBox2: TListBox; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses MMSystem; //设备列表; 指定设备时经常使用 WAVE_MAPPER 参数, 这样会自动选用合适的设备. procedure TForm1.Button1Click(Sender: TObject); var i: Integer; waveOutCaps: TWaveOutCaps; waveInCaps: TWaveInCaps; begin ListBox1.Items.Add('音频输出设备列表:'); for i := 0 to waveOutGetNumDevs do begin ZeroMemory(@waveOutCaps, SizeOf(TWaveOutCaps)); waveOutGetDevCaps(i, @waveOutCaps, SizeOf(TWaveOutCaps)); ListBox1.Items.Add(waveOutCaps.szPname); end; ListBox2.Items.Add('音频输入设备列表:'); for i := 0 to waveInGetNumDevs do begin ZeroMemory(@waveInCaps, SizeOf(TWaveInCaps)); waveOutGetDevCaps(i, @waveInCaps, SizeOf(TWaveInCaps)); ListBox2.Items.Add(waveInCaps.szPname); end; end; //判断是否支持指定的 Wave 格式 procedure TForm1.Button2Click(Sender: TObject); var fmt: TPCMWaveFormat; begin fmt.wf.wFormatTag := WAVE_FORMAT_PCM; fmt.wf.nChannels := 2; fmt.wf.nSamplesPerSec := 22050; fmt.wf.nAvgBytesPerSec := 88200; fmt.wf.nBlockAlign := 4; fmt.wBitsPerSample := 16; if waveOutOpen(nil, 0, PWaveFormatEx(@fmt), 0, 0, WAVE_FORMAT_QUERY) = 0 then ShowMessage('第一个输出设备支持此格式'); if waveInOpen(nil, 0, PWaveFormatEx(@fmt), 0, 0, WAVE_FORMAT_QUERY) = 0 then ShowMessage('第一个输入设备支持此格式'); end; end.
有把格式支持的判断写成函数的, 如:
function IsFormatSupported(fmt: Pointer; DeviceId: DWORD): Boolean; begin Result := (waveOutOpen(nil, DeviceId, PWaveFormatEx(fmt), 0, 0, WAVE_FORMAT_QUERY) = 0); end;
欢迎沟通及共同进步
QQ:1441299
Email:1441299@qq.com
越折腾越快乐!
分类:
vb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端