Задача вообще всего этого: есть одномерный массив AllSamples, в котором сэмплы на всю звуковую дорожку(т.е. не на одну секунду а на все) и вот нужно теперь чередуя массив Second[0, 0..7999] и Second[1, 0..7999] отыграть все сэмплы массива AllSamples. Попробовал так:
Код:
Код:
type
int16 = smallint;
Var
hdr: array[0..1] of WAVEHDR;
AllSamples: array of Int16;
Second: array[0..1, 0..7999] of int16;
CheckSec: Boolean;
CurSec: Byte;
...
WaveOutOpen(@wout, cardinal(-1), @fmt, 0, 0, 0);
if (0 <> wout) then
begin
CheckSec:= False;
For i:= 0 to nBlocks-1 do
Begin
if CheckSec then CurSec:= 1 else CurSec:= 0;
For j:= 0 to SPS-1 do
Begin
if (i = nBlocks-1) and (j+SPS*i > Length(AllSamples)-1) then Second[CurSec, j]:= 0 else Second[CurSec, j]:= AllSamples[j+(SPS)*i];
End;
fillChar(hdr[0], sizeof(hdr[CurSec]), #0);
hdr[CurSec].lpData := @second[CurSec];
hdr[CurSec].dwBufferLength := sizeof(second[CurSec]);
waveOutPrepareHeader(wout, @hdr[CurSec], sizeof(hdr[CurSec]));
WaveOutWrite(wout, @hdr[CurSec], sizeof(hdr[CurSec]));
CheckSec:= NOT CheckSec;
End;
waveOutUnprepareHeader(wout, @hdr, sizeof(TWAVEHDR));
WaveOutClose(wout);
end;
Сам массив Second заполняется весь как надо и и если на последней секунде дорожка кончилась то остаток заполняется нулями. то есть все как надо, но вот как теперь правильно указать на этот чередующийся массив головке?