如何在Delphi代码中将Speex解压器连接到音频混音器(Mitov AudioLab组件)

如何在Delphi代码中将Speex解压器连接到音频混音器(Mitov AudioLab组件),delphi,audio,Delphi,Audio,首先,这是我关于SO的第一个问题——如果我犯了任何错误,请不要批评我;) 我有一个简单的测试应用程序,可以在DelphiXe6中使用Mitov AudioLab组件(www.Mitov.com)版本7。在我的表格中,有一个TALWavePlayer、一个TalSpexCompressor、一个TalSpexDecompressor、一个TALAudioMixer和一个TALAudioOut,构建了一个简单的音频处理链。我可以在设计时(在OpenWire视图中)直观地连接输入和输出。当我运行测试应

首先,这是我关于SO的第一个问题——如果我犯了任何错误,请不要批评我;)

我有一个简单的测试应用程序,可以在DelphiXe6中使用Mitov AudioLab组件(www.Mitov.com)版本7。在我的表格中,有一个TALWavePlayer、一个TalSpexCompressor、一个TalSpexDecompressor、一个TALAudioMixer和一个TALAudioOut,构建了一个简单的音频处理链。我可以在设计时(在OpenWire视图中)直观地连接输入和输出。当我运行测试应用程序时,我可以通过扬声器听到波形文件,而不需要一行代码。这是容易的部分

(grrrr…无法发布图像,会让事情更清楚;)

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

我尝试了与运行时连接其他AudioLab组件(音频输出引脚->音频输入引脚)完全相同的optoins

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

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

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

解决方案:

动态连接解压器和混频器后,停止并再次启动wave player。这在某种程度上解决了这个问题。我不知道引擎盖下发生了什么,但重启TALWavePlayer后,信号离开TalspeEx减压器,进入TALAudioMixer。当我在代码中而不是在属性编辑器中设置TALWavePlayer组件的“filename”属性时,我偶然发现了这个解决方案。由于另一个(默认)设置“RestartOnNewFile”=True,wave播放器在内部重新启动,信号流工作

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客户端和服务器,因此当我动态地将解压器连接到服务器端的混合器时,我无法控制客户端的wave player。显然,需要对这些组件有更深入的了解,也许是来自经验。这将是我的下一个问题。

为组件中的文档不足向大家道歉:-(。 我们正在努力获得一个新的版本在未来3-4周,将再次包含F1的帮助,我们正在努力使它尽可能完整

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

请直接与我联系-mitov@mitov.com因此,我可以帮助您解决Speex问题,并连接引脚

致以最良好的祝愿


Boian Mitov

您可以在ImageShack等网站上发布图片,然后编辑您的帖子并添加链接。其他人将再次编辑您的帖子并将实际图片放入其中。我看到您已经找到了答案,但请添加图片,以便您的帖子对其他人(更)有价值。