Смекни!
smekni.com

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

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

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

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

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

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

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

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

2.8.5. Алгоритм обращения звукового сигнала

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DelaySmp = Ti – Ti-1.

2.9. Описание подпрограммы «Reverberation»

2.9.1. Вводная часть

Подпрограмма Reverberation служит для применения эффекта реверберации к указанному фрагменту звукового сигнала, записанного в файле. Текст подпрограммы приведен в приложении 1.

2.9.2. Функциональное назначение

Подпрограмма Reverberation предназначена для реализации алгоритма создания эффекта реверберации.

2.9.3. Описание информации

Звуковой сигнал, записанный в файле, представлен следующим классом:

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);

procedure WriteSample(Number, Channel: LongInt; Value: Integer);

private

Name: String;

end;

Описание полей класса представления звукового сигнала:

nChannels – число каналов;

nSamplesPerSecond – частота дискретизации;

nBitsPerSample – битрейт;

nBlockAlign – блок выравнивания (число каналов х разрядность);

Data – звуковые данные;

Name – имя файла.

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

Описание используемых в подпрограмме переменных представлено в табл.2.2.

Таблица 2.2

Переменные, используемые в подпрограмме «Reverberation»

Имена переменных Тип Описание
i, j, k integer Переменные-счетчики
DelaySmp Cardinal Равно Ti – Ti-1
SmpBuf array[0..64] of Int64 Хранит выборку аудио-данных
Mult Real Коэффициент для получения значения амплитуды отражения
Smp Integer Текущая амплитуда
Channel Word Количество каналов
MaxValue Cardinal Максимальное значение амплитуды в обрабатываемом фрагменте

Описание входных данных подпрограммы представлено в табл.2.3.

Таблица 2.3

Входные данные подпрограммы «Reverberation»

Имена переменных Тип Описание
AudioData TAudioData Передаваемая исходная совокуп-ность значений амплитуд и времен
Start Cardinal Стартовая позиция, с которой необходимо начать обработку
Count Cardinal Количество позиций, которые необходимо обработать относи-тельно стартовой
Number Cardinal Количество отражений
Delay Cardinal Время между отражениями
Volume Real Громкость отражения относитель-но предыдущего

Выходные данные подпрограммы:

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

2.9.4. Используемые программы

В подпрограмме используются следующие подпрограммы:

1. ReadSample(Number, Channel: LongInt; var Value: Integer) – процедура чтения данных из звукового файла;

2. WriteSample(Number, Channel: LongInt; Value: Integer) – процедура записи данных в звуковой файл.

2.9.5. Схема подпрограммы «Reverberation»

Схема подпрограммы «Reverberation» приведена на рис. 2.17.


2.10. Описание подпрограммы «Echo»

2.10.1. Вводная часть

Подпрограмма Echo служит для применения эффекта эха к указанному фрагменту звукового сигнала, записанного в файле. Текст программы приведен в приложении 1.

2.10.2. Функциональное назначение

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

2.10.3. Описание информации

TempAudio: TAudioData; – получаемая совокупность значений амплитуд и времен. Описание используемых в подпрограмме переменных представлено в табл.2.4.