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

时间:2014-08-21 19:05:04

标签: delphi audio

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

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

解决方案:

在动态连接解压缩器和混音器后停止然后再启动wave播放器。这以某种方式解决了这个问题。我不知道幕后发生了什么,但重新启动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客户端和服务器,所以当我将解压缩器动态连接到服务器端的混音器时,我无法控制客户端的wave播放器。显然,需要更深入地了解这些组件,可能来自经验。所以这将是我在SO的下一个问题。

答案 1 :(得分:1)

向所有人道歉,因为组件中的文档不足:-(。 我们正在努力在接下来的3-4周内发布一个新的版本,它将再次包含F1帮助,我们正努力使其尽可能完整。

不幸的是,为了让RAD Studio XE6按时可用,我们不得不发布没有文档的7.0 :-(。

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

最诚挚的问候,

Boian Mitov