我正在尝试将Delphi连接到Windows VolumeControl API以显示WaveOut声音。 我找到了以下代码,但它不起作用:
function Wave_SuportaControleVolume: boolean;
var
Caps: TWaveOutCaps;
begin
if WaveOutGetDevCaps(WAVE_MAPPER, @Caps,
SizeOf(Caps)) = MMSYSERR_NOERROR then
Result := Caps.dwSupport and WAVECAPS_VOLUME <> 0
else
Result := false;
end;
type
TVolume = record
Esquerdo: Word;
Direito: Word;
end;
function Wave_ObterVolume: TVolume;
begin
waveOutGetVolume(integer(WAVE_MAPPER), @Result);
end;
procedure Wave_DefinirVolume(Volume: TVolume);
begin
waveOutSetVolume(integer(WAVE_MAPPER), LongWord(Volume));
end;
当我使用此代码时,无论我做什么,Wave_ObterVolume的值总是65535。
我的目标非常简单: 当我播放一些MP4或MP3文件时,我希望将声音值视为进度条。 我已经连接了布局和计时器组件,因为它应该在进度条上显示声音。事实上,我会使用一种VUMeter组件来做到这一点。
细节:使用Delphi 7。 我知道,它已经很老了,但它是我可用的工具。
那么,问题是我使用什么代码来访问WaveOut Windows VolumeControl?
答案 0 :(得分:0)
答案 1 :(得分:0)
我担心您使用的代码无法为您提供所需的结果。为什么?
您正在使用的代码旨在以编程方式检索或设置波形输出的音量,就像您通过在混音器中移动滑块一样。
现在,为了能够获得播放声音输出的直观表示,您实际需要录制声音输出,然后从录制的数据中获取声音值。
如果您使用的是Windows XP,只需录制来自&#34;软件输出&#34;的音频即可。频道,但是如果您使用的是Windows Vista及更新版本,除非您使用的是某些非正式的软件驱动程序,否则它将不再可用。为什么?
为Windows Vista或更新版本制作的所有声音驱动程序都不得使用&#34;软件输出&#34;过去,这通常被用来传播任何数字版权保护措施。例如,Pepole只在Window Media播放器中播放受数字保护的内容,然后同时在另一个节目中录制声音输出。这意味着所有数字保护机制都已经过时了。