Смекни!
smekni.com

Система обработки аудиоинформации Подсистема фильтрации и обработки сигнала (стр. 7 из 24)

2.3.2. Используемая информация

При реализации данного алгоритма используются массивы информации, сформированные из входных данных. Массивы содержат информацию о величине амплитуды звукового сигнала в определенные моменты времени. Количество пар массивов определяется числом каналов (ЧК).

A = {A1,A2,…,An} – массив амплитуд звукового сигнала;

T = {T1,T2,…,Tn} – массив со значениями времени;

n зависит от частоты дискретизации (ЧД), битрейта (Б) и размера файла;

Ti – Ti-1 определяется частотой дискретизации;

При реализации алгоритма учитываются следующие параметры эффекта эха, которые подаются в качестве параметров на вход алгоритма:

To – время между откликами;

Гр – громкость отклика относительно предыдущего в процентах;

Kол – количество откликов.

2.3.3. Результаты решения

В результате реализации алгоритма формируются новые массивы амплитуд и значений времени A’ и T’. Структура выходного файла при этом соответствует описанной в п.2.1.2.

2.3.4. Математическое описание алгоритма создания эффекта эха

Для получения выходных массивов 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’ соответственно).

2.3.5. Алгоритм создания эффекта эха

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. Конец.

2.3.6. Требования к контрольному примеру

Контрольный пример должен содержать примеры применения эффекта реверберации с различными параметрами.

2.3.7. Список условных обозначений

AudioData – совокупность значений амплитуд и времен;

Start – указатель на место в массиве данных,с которого начинать обработку;

Count – количество элементов массивов, которые необходимо обработать;

Number – количество отражений;

Delay – время между отражениями;

Volume – громкость отклика относительно предыдущего;

TempAudio – получаемая совокупность значений амплитуд и времен;

SmpBuf – хранит выборку аудиоданных;

Mult – коэффициент для получения значения амплитуды отражения;

Smp – текущая амплитуда;

Channel – количество каналов;

MaxValue – макс. значение амплитуды в обрабатываемом фрагменте;

DelaySmp = Ti – Ti-1.

2.4. Описание алгоритма изменения темпа звука

2.4.1. Назначение и характеристика алгоритма изменения темпа звука

Данный алгоритм применяется для замедления или ускорения скорости воспроизведения звукового сигнала.

2.4.2. Используемая информация

При реализации данного алгоритма используются массивы информации, сформированные из входных данных. Массивы содержат информацию о величине амплитуды звукового сигнала в определенные моменты времени. Количество пар массивов определяется числом каналов (ЧК).

A = {A1,A2,…,An} – массив амплитуд звукового сигнала;

T = {T1,T2,…,Tn} – массив со значениями времени, где n зависит от частоты дискретизации (ЧД), битрейта (Б) и размера файла;

Ti – Ti-1 определяется частотой дискретизации.

При реализации алгоритма учитываются следующие параметры, которые подаются в качестве параметров на вход алгоритма: величина новой скорости воспроизведения в процентах от текущей (Ск).

2.4.3. Результаты решения

В результате реализации алгоритма формируется новый массив значений времени T’, массив с амлитудами A остается неизменным. Структура выходного файла при этом соответствует описанной в п.2.1.2.

2.4.4. Математическое описание алгоритма изменения темпа звука

Для получения выходного массива T’ используются следующие формулы:

T’1 = T1 * Ск/100;

T’2 = T2 * Ск/100;

T’n = Tn * Ск/100.

Описание используемых обозначений приведено в п.2.4.2.

2.4.5. Алгоритм изменения темпа звука

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. Конец.

2.4.6. Требования к контрольному примеру

Контрольный пример должен содержать примеры изменения темпа звука: увеличение и уменьшение скорости его воспроизведения.

2.4.7. Список условных обозначений

AudioData – совокупность значений амплитуд и времен;

Start – указатель на место в массиве данных,с которого начинать обработку;

Speed – новая скорость звукового сигнала в процентах от текущей;

TempAudio – получаемая совокупность значений амплитуд и времен;

Smp1, Smp2 – переменные для хранения амплитуд;

Channel – количество каналов;

Interval – текущий обрабатываемый временной интервал;

Count – текущее количество отметок времени;