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 – текущее количество отметок времени;
NewCount – новое количество отметок времени.
Данный алгоритм применяется для увеличения или уменьшения громкости (амплитуды) звукового сигнала.
При реализации данного алгоритма используются массивы информации, сформированные из входных данных. Массивы содержат информацию о величине амплитуды звукового сигнала в определенные моменты времени. Количество пар массивов определяется числом каналов (ЧК).
A = {A1,A2,…,An} – массив амплитуд звукового сигнала;
T = {T1,T2,…,Tn} – массив со значениями времени, где n зависит от частоты дискретизации (ЧД), битрейта (Б) и размера файла;
При реализации алгоритма учитываются следующие параметры, которые подаются в качестве параметров на вход алгоритма: величина новой громкости звукового сигнала в процентах от текущей (Гр).
В результате реализации алгоритма формируется новый массив значений амплитуд A’, массив с временем T остается неизменным. Структура выходного файла при этом соответствует описанной в п.2.1.2.
Для получения выходного массива A’ используются следующие формулы:
A’1 = А1 * Гр/100;
A’2 = А2 * Гр/100;
A’n = An * Гр/100.
Описание используемых обозначений приведено в п.2.5.2.
1. MaxValue ::= 1;
2. i ::= 0;
3. Если i > (AudioData.nBlockAlign/AudioData.nChannels), то переход к п.5 иначе к п.4;
4. MaxValue ::= MaxValue * 256;
5. MaxValue ::= MaxValue/2 – 1;
6. Channel ::=0;
7. Если Channel > (AudioData.nChannels – 1), то переход к п.19 иначе к п.8;
8. Volume ::= 1; i ::= Start;
9. Если i > (Start+Count-1), то переход к п.18 иначе к п.10;
10. Прочитать Value из файла;
11. Value ::= ]Value*Volume[;
12. Если |Value|>MaxValue, то переход к п.13 иначе к п.16;
13. Если Value<0, то переход к п.14 иначе к п.15;
14. Value ::= -MaxValue; переход к п.16;
15. Value ::= MaxValue;
16. Записать Value в файл;
17. i ::= i+1; переход к п.9;
Страницы: 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