При реализации данного алгоритма используются массивы информации, сформированные из входных данных. Массивы содержат информацию о величине амплитуды звукового сигнала в определенные моменты времени. Количество пар массивов определяется числом каналов (ЧК).
A = {A1,A2,…,An} – массив амплитуд звукового сигнала;
T = {T1,T2,…,Tn} – массив со значениями времени;
n зависит от частоты дискретизации (ЧД), битрейта (Б) и размера файла;
Ti – Ti-1 определяется частотой дискретизации;
При реализации алгоритма учитываются следующие параметры эффекта эха, которые подаются в качестве параметров на вход алгоритма:
To – время между откликами;
Гр – громкость отклика относительно предыдущего в процентах;
Kол – количество откликов.
В результате реализации алгоритма формируются новые массивы амплитуд и значений времени A’ и T’. Структура выходного файла при этом соответствует описанной в п.2.1.2.
Для получения выходных массивов A’ и T’ необходимо предварительно получить Кол пар дополнительных массивов А(А1,А2,…,Акол) и Т(Т1,Т2,…,Ткол) с откликами, а затем совместить их:
m – размерности получаемых массивов A’ и T’;
m = n + n*Кол + То;
T1i = Tn + Ti + То;
T2i = 2*Tn + Ti + 2*То;
…
ТКолi =Кол*Тn + Ti + Кол*То;
A1i = Гр/100*Ai;
A2i = Гр/100*A1i;
…
Aколi = Гр/100*A[кол-1]i
Описание используемых обозначений приведено в п.2.3.2.
Затем все полученные массивы амплитуд и времен объединяются в один общий массив (A’ и T’ соответственно).
1. i::=1;
2. MaxValue::=MaxValue*256;
3. i::=i+1;
4. Если i≤(AudioData.nBlockAlign/AudioData.nChannels),то переход к п.2 иначе к п.5;
5. MaxValue::=MaxValue/2 – 1;
6. TempAudio.nChannels ::= AudioData.nChannels;
7. TempAudio.nSamplesPerSec := AudioData.nSamplesPerSec;
8. TempAudio.nBitsPerSample := AudioData.nBitsPerSample;
9. DelaySmp := Round(Delay*AudioData.nSamplesPerSec/1000);
10. Channel :: =0;
11. Если Channel > (AudioData.nChannels-1),то переход к п.31 иначе к п.12;
12. i ::= Start;
13. Если i > (Start+Count-1), то переход к п.30 иначе к п.14;
14. Прочитать Smp;
15. SummSmp ::= Smp; Mult::=Volume;
16. j ::= 1;
17. Если j > Number, то переход к п.23 иначе к п.18;
18. Если (i – Start) < (DelaySmp*j), то переход к п.19 иначе к п.20;
19. Smp ::= 0;
20. Прочитать Smp;
21. SummSmp ::= SummSmp + Mult*Smp; Mult ::= Mult*Volume;
22. j ::= j+1; переход к 17;
23. Smp ::= SummSmp/(Number + 1);
24. Если |Smp|>MaxValue, то переход к п.25 иначе к п.28;
25. Если Smp<0, то переход к п.26 иначе к п.27;
26. Smp ::= -MaxValue;
27. Smp ::= MaxValue;
28. Запись Smp в TempAudio;
29. i ::= i+1; переход к п.13;
30. Сhannel :: = Channel+1; переход к п.11;
31. AudioData ::= TempAudio;
32. Конец.
Контрольный пример должен содержать примеры применения эффекта реверберации с различными параметрами.
AudioData – совокупность значений амплитуд и времен;
Start – указатель на место в массиве данных,с которого начинать обработку;
Count – количество элементов массивов, которые необходимо обработать;
Number – количество отражений;
Delay – время между отражениями;
Volume – громкость отклика относительно предыдущего;
TempAudio – получаемая совокупность значений амплитуд и времен;
SmpBuf – хранит выборку аудиоданных;
Mult – коэффициент для получения значения амплитуды отражения;
Smp – текущая амплитуда;
Channel – количество каналов;
MaxValue – макс. значение амплитуды в обрабатываемом фрагменте;
DelaySmp = Ti – Ti-1.
Данный алгоритм применяется для замедления или ускорения скорости воспроизведения звукового сигнала.
При реализации данного алгоритма используются массивы информации, сформированные из входных данных. Массивы содержат информацию о величине амплитуды звукового сигнала в определенные моменты времени. Количество пар массивов определяется числом каналов (ЧК).
A = {A1,A2,…,An} – массив амплитуд звукового сигнала;
T = {T1,T2,…,Tn} – массив со значениями времени, где n зависит от частоты дискретизации (ЧД), битрейта (Б) и размера файла;
Ti – Ti-1 определяется частотой дискретизации.
При реализации алгоритма учитываются следующие параметры, которые подаются в качестве параметров на вход алгоритма: величина новой скорости воспроизведения в процентах от текущей (Ск).
В результате реализации алгоритма формируется новый массив значений времени T’, массив с амлитудами A остается неизменным. Структура выходного файла при этом соответствует описанной в п.2.1.2.
Для получения выходного массива T’ используются следующие формулы:
T’1 = T1 * Ск/100;
T’2 = T2 * Ск/100;
…
T’n = Tn * Ск/100.
Описание используемых обозначений приведено в п.2.4.2.
1. Если (Speed=1)или(Speed=0), то переход к п.31 иначе к п.2;
2. TempAudio.nChannels := AudioData.nChannels;
3. TempAudio.nSamplesPerSec := AudioData.nSamplesPerSec;
4. TempAudio.nBitsPerSample := AudioData.nBitsPerSample;
5. TempAudio.nBlockAlign := AudioData.nBlockAlign;
6. NewCount := Round(Count/Speed);
7. Если Speed > 1 , то переход к п.8 иначе к п.14;
8. i ::= NewCount; Interval ::= Speed;
9. AudioData.Data.Position ::= Start*AudioData.nBlockAlign;
10. Если i <> 0 , то переход к п.11 иначе к п.14;
11. Прочитать Buf из AudioData; Записать Buf в TempAudio;
12. AudioData.Data.Position ::= AudioData.Data.Position - AudioData.nBlockAlign + ]Interval[*AudioData.nBlockAlign;
13. Interval := Interval-]Interval[+Speed; i ::= i – 1; переход к п.10;
14. Speed ::= 1/Speed;
15. Channel ::= 0;
16. Если Channel > (AudioData.nChannels-1), то переход к п.31 иначе к п.17;
17. i ::= 0; j ::= 0; Interval ::= Speed;
18. Если i<>Count, то переход к п.19 иначе к п.30;
19. Прочитать Smp1;
20. Если (i+1) <> Count, то переход к п.21 иначе к п.22;
21. Прочитать Smp2;
22. Smp2 ::= Smp1;
23. k ::= ]Interval[;
24. n::=0;
25. Если n > (k-1), то переход к п.28 иначе к п.26;
26. Записать в TempAudio (Smp1+(Smp2-Smp1)/k*n);
27. n ::= n+1; переход к п.25;
28. Interval ::= Interval - ]Interval[ + Speed;
29. i :: = i+1; j ::= j+k; переход к п.18;
30. переход к п.16;
31. Конец.
Контрольный пример должен содержать примеры изменения темпа звука: увеличение и уменьшение скорости его воспроизведения.
AudioData – совокупность значений амплитуд и времен;
Start – указатель на место в массиве данных,с которого начинать обработку;
Speed – новая скорость звукового сигнала в процентах от текущей;
TempAudio – получаемая совокупность значений амплитуд и времен;
Smp1, Smp2 – переменные для хранения амплитуд;
Channel – количество каналов;
Interval – текущий обрабатываемый временной интервал;
Count – текущее количество отметок времени;