![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как смиксовать 2 файла ?
NetKnight © (2003-06-10 11:27:00)Вот простой пример запуска звукого файла:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, mmsystem, StdCtrls;
type TSoundThread = class(TThread)
private
fname:string;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended:Boolean;filename:string);
end;
type
TForm1 = class(TForm)
Button1: TButton;
dlg: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
snd:TSoundThread;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if dlg.Execute then
snd:=TSoundThread.Create(false,dlg.FileName);
end;
{ SoundThread }
constructor TSoundThread.Create(CreateSuspended: Boolean; filename:string);
begin
FreeOnTerminate := True;
fname:=filename;
inherited Create(CreateSuspended);
end;
procedure TSoundThread.Execute;
begin
( PChar(fname)
Вот простой пример запуска звукого файла:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, mmsystem, StdCtrls;
type TSoundThread = class(TThread)
private
fname:string;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended:Boolean;filename:string);
end;
type
TForm1 = class(TForm)
Button1: TButton;
dlg: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
snd:TSoundThread;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if dlg.Execute then
snd:=TSoundThread.Create(false,dlg.FileName);
end;
{ SoundThread }
constructor TSoundThread.Create(CreateSuspended: Boolean; filename:string);
begin
FreeOnTerminate := True;
fname:=filename;
inherited Create(CreateSuspended);
end;
procedure TSoundThread.Execute;
begin
playsound(PChar(fname),0,SND_FILENAME);
end;
end.
Но есть необходимость смиксовывать звук из 2 файлов, для этого волны нужно сложить (возможно создать какой-нибудь MemoryStream). Но я понятия не имею как это сделать на практике. :(
Кто-нибудь знаком с подобными вещами ? Расскажите, как это правильно делается.
По идее до проигрыша звуковые файлы должны складываться, формула примерно такая: NewY=(Y1-Y1*0.5)*Vol1+(Y2-Y2*0.5)*Vol2
NewY - показание результирующей волны по Y на данную позицию X
Y1 & Y2 - исходные показатели первой и второй волны
Vol1 & Vol2 - мультипликаторы со значением от 0 до 1 для того, чтоб задавать громкость входных волн.
Можно добавить громкость на выход.
NetKnight (2003-06-10 11:36:00) [1]
Тьфу совсем торможу вот правильно:
NewY=(((Y1-Ymax*0.5)*Vol1+(Y2-Ymax*0.5)*Vol2)+Ymax*0.5)*VolMaster
NetKnight (2003-06-10 11:34:00) [2]
В формуле ошибочка:
NewY=((Y1-Ymax*0.5)*Vol1+(Y2-Ymax*0.5)*Vol2)*VolMaster+Ymax*0.5
Ymax - Максимальне значение Y, сейчас не помню сколько это.
VolMaster - Мультипликатор для выходной громкости от 0 до 1.