You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Delphi的WindowsMediaPlayer获取WAV文件播放时的音频流输出?

在Windows Media Player中播放WAV时获取音频流输出

Windows Media Player控件本身并没有直接暴露获取原始音频流输出的接口,但你可以通过以下两种常见方案实现需求:

方案1:使用WASAPI捕获系统回送音频

这种方式可以捕获包括Windows Media Player在内的所有系统播放的音频流,适合需要获取最终输出音频的场景。

以下是Delphi环境下的简化示例代码:

// 引用相关单元:MMSystem, Windows, Classes
procedure CaptureLoopbackAudio;
var
  hWaveIn: HWAVEIN;
  WaveFormat: TWaveFormatEx;
begin
  // 设置音频格式(匹配WMP输出的格式,通常是44100Hz、16位、立体声)
  ZeroMemory(@WaveFormat, SizeOf(TWaveFormatEx));
  WaveFormat.wFormatTag := WAVE_FORMAT_PCM;
  WaveFormat.nChannels := 2;
  WaveFormat.nSamplesPerSec := 44100;
  WaveFormat.wBitsPerSample := 16;
  WaveFormat.nBlockAlign := (WaveFormat.nChannels * WaveFormat.wBitsPerSample) div 8;
  WaveFormat.nAvgBytesPerSec := WaveFormat.nSamplesPerSec * WaveFormat.nBlockAlign;

  // 打开回送设备(需要Windows Vista及以上系统)
  if waveInOpen(@hWaveIn, WAVE_MAPPER, @WaveFormat, 0, 0, WAVE_FORMAT_DIRECT) = MMSYSERR_NOERROR then
  begin
    // 准备缓冲区并开始捕获
    // 这里需要实现缓冲区回调来处理捕获到的音频数据
    waveInStart(hWaveIn);
  end;
end;

方案2:通过DirectShow拦截WMP的媒体流

如果你使用的是嵌入在程序中的Windows Media Player控件,可以通过DirectShow的接口获取播放中的音频流数据:

// 假设WindowsMediaPlayer1是嵌入的控件
procedure GetWMPAudioStream;
var
  MediaObject: IWMPEvents;
  // 需引用WMP相关类型库
begin
  // 获取WMP的媒体对象接口,进而获取音频流
  if WindowsMediaPlayer1.MediaSource.QueryInterface(IWMPEvents, MediaObject) = S_OK then
  begin
    // 这里可以通过DirectShow过滤器连接到音频输出引脚,获取原始采样数据
    // 具体实现需要处理DirectShow的过滤器图构建
  end;
end;

你提供的示例代码仅实现了WMP的播放功能,ProgressBar.Position := VolumeOutput只是模拟音量输出的示例,要真正获取音频流数据,需要结合上述方案处理原始音频采样。

内容的提问来源于stack exchange,提问作者Underhood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:45:39