如何在Delphi代码中将Speex Decompressor连接到Audio Mixer(Mitov AudioLab组件)

问题描述 投票:0回答:2

首先,这是我的第一个问题 - 如果我犯了任何错误,请不要焦油和羽毛我;)

我有一个简单的测试应用程序可以在 Delphi XE6 中使用 Mitov AudioLab 组件 (www.mitov.com) 版本 7。在我的表单上,有一个 TALWavePlayer、一个 TALSpeexCompressor、一个 TALSpeexDecompressor、一个 TALAudioMixer 和一个 TALAudioOut,构建了一个简单的音频处理链。我可以在设计时(在 OpenWire 视图中)直观地连接输入和输出。当我运行测试应用程序时,我可以通过扬声器听到波形文件 - 无需任何代码。这是最简单(有效)的部分。

(grrrr...无法发布图片,这样会让事情变得更清晰;)

现在,我在设计时直观地断开 TALSpeexDecompressor 输出引脚与 TALAudioMixer 输入引脚的连接(OpenWire 视图)。我想在运行时替换代码中的相同连接。 (为了简单起见,我保留了 TALAudioMixer 的单个输入引脚和通道,因此不需要在代码中创建它们)。

我尝试了完全相同的选项,可以在运行时连接其他 AudioLab 组件(音频输出引脚 -> 音频输入引脚)。

1.)

decomp.OutputPin.Connect(mixer.InputPins[0]);

2.)

decomp.OutputPin.Connect(mixer.Channels.Items[0].InputPin);

但是对于 TALSpeexDecompressor,这不起作用 - 没有信号离开解压器。我没有组件的源代码,因此我无法调试应用程序以找出问题所在。

delphi audio mitov-audio-lab
2个回答
1
投票

解决方案:

动态连接解压器和混音器后,停止并重新启动波形播放器。这在某种程度上解决了这个问题。我不知道幕后发生了什么,但重新启动 TALWavePlayer 后,信号离开 TALSpeexDecompressor 并进入 TALAudioMixer。当我在代码中而不是在属性编辑器中设置 TALWavePlayer 组件的“文件名”属性时,我偶然发现了该解决方案。由于另一个(默认)设置“RestartOnNewFile”= True,波形播放器在内部重新启动并且信号流正常工作。

procedure Tform1.Button1Click(Sender: TObject);
var
  channel: TALAudioMixerChannelItem;
begin
    channel := mixer.Channels.Add;
    waveplayer.Stop;
    channel.InputPin.Connect(decomp.OutputPin);
    waveplayer.Start;
end;

很明显,AudioLab 组件可以使简单的任务变得更加简单,但由于 DocuWiki 中的文档很差,您必须经常遵循“尝试和错误”路径,有时甚至需要几天。不幸的是,我真正的问题比我提供的简单测试用例更复杂。我在链中有一个 UDP 客户端和服务器,因此当我将解压缩器动态连接到服务器端的混音器时,我无法控制客户端的波形播放器。显然,需要对这些组件有更深入的了解,也许来自经验。所以这将是我的下一个问题。


1
投票

对于组件中的文档不足向大家致歉:-( 。 我们正在努力在未来 3-4 周内发布新版本,其中将再次包含 F1 帮助,并且我们正在努力使其尽可能完整。

不幸的是,我们不得不在没有文档的情况下发布 7.0,以便按时为 RAD Studio XE6 提供 :-( .

请直接与我联系 - [电子邮件受保护],以便我可以帮助您解决 Speex 问题并连接引脚。

致以最诚挚的问候,

博伊安·米托夫

© www.soinside.com 2019 - 2024. All rights reserved.