gpt4 book ai didi

delphi - 如何在delphi中同时播放多个.wav文件

转载 作者:行者123 更新时间:2023-12-02 20:18:24 26 4
gpt4 key购买 nike

我希望在delphi 中同时处理多个.wav 文件。

当我打开并放置时,首先一切都很好。然而,第二个在尝试打开时会导致错误。

看来我一次只能使用一个媒体播放器......有什么办法可以解决这个问题,我该怎么办?

最佳答案

你会如何播放单个声音?当我想要精细控制时,我使用 waveOut 函数,如 this answer 中。我的回答还允许您使用线程(即,异步地)播放声音。我认为,如果您只用全局 替换全局 var,只需同时启动两个这样的线程,您就可以同时播放两种声音threadvars.

更新

播放单个声音的最简单方法是使用PlaySound。这可以异步使用,但既然你问这个问题,我假设这不允许你连续两次使用这个函数来开始同时播放两个文件。但是:如果您创建一个仅播放声音的线程(同步,以便线程在播放完成之前不会终止),那么您可能可以使用两个这样的线程线程同时播放两个音频文件。 (我现在无法访问 Delphi 编译器,所以我担心我无法测试我的假设。)

更新2

我的假设是,如果仅从两个不同的线程调用该函数,则可以使用两次对 PlaySound 的调用,但显然这还不够好。看来你确实需要两个不同的过程,这很糟糕(显而易见)。我试过了

procedure TForm1.FormCreate(Sender: TObject);
begin
with TSoundPlayerThread.Create(true) do
begin
SetFileName('C:\Users\Andreas Rejbrand\Downloads\Anna.wav');
FreeOnTerminate := true;
Resume;
end;

with TSoundPlayerThread.Create(true) do
begin
SetFileName('C:\Users\Andreas Rejbrand\Downloads\Mike.wav');
FreeOnTerminate := true;
Resume;
end;
end;

unit SoundPlayerThread;

interface

uses
Classes, MMSystem, Windows;

type
TSoundPlayerThread = class(TThread)
private
{ Private declarations }
FAudioFileName: string;
protected
procedure Execute; override;
public
procedure SetFileName(const FileName: string);
end;

implementation

procedure TSoundPlayerThread.Execute;
begin
PlaySound(PChar(FAudioFileName), 0, SND_SYNC);
end;

procedure TSoundPlayerThread.SetFileName(const FileName: string);
begin
FAudioFileName := FileName;
end;

end.

并且只播放了后一个波形文件。

更新3

我实际上写了一个小的WAV文件库。使用它,我可以加载两个 WAV 文件,合并它们,并将结果发送到音频驱动程序。但是,这里发布的代码太多。如果有一天我还有时间,我可能会编写一个更轻量级的 PlaySimultaneously 程序并将其发布。

否则:DirectX?

关于delphi - 如何在delphi中同时播放多个.wav文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3563974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com