9. Если i > (Start+Count-1), то переход к п.19 иначе к п.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. Volume ::= Volume + (FinalVolume-1)/Count;
18. i ::= i+1; переход к п.9;
19. Channel ::= Channel+1; переход к п.7;
20. Конец.
Контрольный пример должен содержать примеры применения эффекта затухающей громкости к звуковому сигналу различных форм.
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 определяется частотой дискретизации.
В результате реализации алгоритма формируются новые массивы значений амплитуд A’ и времени T’. Структура выходного файла при этом соответствует описанной в п.2.1.2.
Для получения выходных массивов A’ и Т’ используются следующие формулы:
A’1 = Аn;
A’2 = Аn-1;
…
A’n-1 = A2;
A’n = A1;
T’1 = Аn;
T’2 = Аn-1;
T’n-1 = A2;
T’n = A1.
Описание используемых обозначений приведено в п.2.8.2.
1. AbsStart ::= Start*AudioData.nBlockAlign;
2. AbsCount ::= Count*AudioData.nBlockAlign;
3. AbsFinish ::= AbsStart+AbsCount; i ::= AbsFinish;
4. Если (i-AbsStart)>=(MaxSizeOfBuffer), то переход к п.5 иначе к п.6;
5. BufferStart := i – MaxSizeOfBuffer; переход к п.7;
6. BufferStart := AbsStart;
7. AudioData.Data.Position := BufferStart; Прочитать знаение амплитуды в Buf;
8. Если i > BufferStart, то переход к п.9 иначе к п.11;
9. i := i - AudioData.nBlockAlign; AudioData.Data.Position := i;
10. Прочитать Buf из AudioData; Записать Buf в TempAudio; переход к п.8;
11. Если i = AbsStart, то переход к п.12 иначе к п.4;
12. AudioData.Data.Position := AbsStart; TempAudio.Data.Position := 0;
13. i ::= 1;
14. Если I > Count, то переход к п.17 иначе к п.15;
15. Прочитать Buf из TempAudio; Записать Buf в AudioData;
16. i ::= i+1; переход к п.14;
17. Конец.
Контрольный пример должен содержать примеры применения обращения звукового сигнала различных форм.
Подпрограмма Reverberation служит для применения эффекта реверберации к указанному фрагменту звукового сигнала, записанного в файле. Текст подпрограммы приведен в приложении 1.
Подпрограмма Reverberation предназначена для реализации алгоритма создания эффекта реверберации.
Звуковой сигнал, записанный в файле, представлен следующим классом:
TAudioData = class(TObject)
public
nChannels: Word;
nSamplesPerSec: LongWord;
nBitsPerSample: Word;
nBlockAlign: Word;
Data: TFile;
constructor Create;
destructor Destroy;
procedure Calculate_nBlockAlign;
procedure ReadSample(Number, Channel: LongInt; var Value: Integer);
Страницы: 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