程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 操作 Wave 文件(10): 輸入輸出設備與格式支持

操作 Wave 文件(10): 輸入輸出設備與格式支持

編輯:Delphi

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; 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved