Данный алгоритм применяется к исходному звуковому сигналу для создания эффекта эха: реализация повторения звукового сигнала с помощью временных преобразований таким образом, чтобы человеческое ухо воспринимало полученный сигнал как эхо. При этом слух перестает субъективно воспринимать отражения, как призвуки основного сигнала, и начинает воспринимать их как повторения. Эхо обычно реализуется так же, как и естественное - с затуханием повторяющихся копий.
При реализации данного алгоритма используются массивы информации, сформированные из входных данных. Массивы содержат информацию о величине амплитуды звукового сигнала в определенные моменты времени. Количество пар массивов определяется числом каналов (ЧК).
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.
Данный алгоритм применяется для замедления или ускорения скорости воспроизведения звукового сигнала.
T = {T1,T2,…,Tn} – массив со значениями времени, где n зависит от частоты дискретизации (ЧД), битрейта (Б) и размера файла;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25