Система обработки аудиоинформации. Подсистема фильтрации и обработки сигнала
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
и получаемых массивов 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 соответственно).
- Алгоритм создания эффекта эха
- i::=1;
- MaxValue::=MaxValue*256;
- i::=i+1;
- Если i?(AudioData.nBlockAlign/AudioData.nChannels),то переход к п.2 иначе к п.5;
- MaxValue::=MaxValue/2 1;
- TempAudio.nChannels ::= AudioData.nChannels;
- TempAudio.nSamplesPerSec := AudioData.nSamplesPerSec;
- TempAudio.nBitsPerSample := AudioData.nBitsPerSample;
- DelaySmp := Round(Delay*AudioData.nSamplesPerSec/1000);
- Channel :: =0;
- (AudioData.nChannels-1),.31.12;">Если Channel > (AudioData.nChannels-1),то переход к п.31 иначе к п.12;
- i ::= Start;
- Если i > (Start+Count-1), то переход к п.30 иначе к п.14;
- Прочитать Smp;
- SummSmp ::= Smp; Mult::=Volume;
- j ::= 1;
- Если j > Number, то переход к п.23 иначе к п.18;
- Если (i Start) < (DelaySmp*j), то переход к п.19 иначе к п.20;
- Smp ::= 0;
- Прочитать Smp;
- SummSmp ::= SummSmp + Mult*Smp; Mult ::= Mult*Volume;
- j ::= j+1; переход к 17;
- Smp ::= SummSmp/(Number + 1);
- Если |Smp|>MaxValue, то переход к п.25 иначе к п.28;
- Если Smp<0, то переход к п.26 иначе к п.27;
- Smp ::= -MaxValue;
- Smp ::= MaxValue;
- Запись Smp в TempAudio;
- i ::= i+1; переход к п.13;
- Сhannel :: = Channel+1; переход к п.11;
- AudioData ::= TempAudio;
- Конец.
- Требования к контрольному примеру
Контрольный пример должен содержать примеры применения эффекта реверберации с различными параметрами.
- Список условных обозначений
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 определяется частотой дискретизации.
При реализации алгоритма учитываются следующие параметры, которые подаются в качестве параметров на вход алгоритма: величина новой скорости воспроизведения в процентах от текущей (Ск).
- Результаты решения
В результате реализации алгоритма формируется новый массив значений времени T, массив с амлитудами A остается неизменным. Структура выходного файла при этом соответствует описанной в п.2.1.2.
- Математическое описание алгоритма изменения темпа звука
Для получения выходного массива T используются следующие формулы:
T1 = T1 * Ск/100;
T2 = T2 * Ск/100;
тАж
Tn = Tn * Ск/100.
Описание используемых обозначений приведено в п.2.4.2.
- Алгоритм изменения темпа звука
- Если (Speed=1)или(Speed=0), то переход к п.31 иначе к п.2;
- TempAudio.nChannels := AudioData.nChannels;
- TempAudio.nSamplesPerSec := AudioData.nSamplesPerSec;
- TempAudio.nBitsPerSample := AudioData.nBitsPerSample;
- TempAudio.nBlockAlign := AudioData.nBlockAlign;
- NewCount := Round(Count/Speed);
- Если Speed > 1 , то переход к п.8 иначе к п.14;
- i ::= NewCount; Interval ::= Speed;
- AudioData.Data.Position ::= Start*AudioData.nBlockAlign;
- Если i <> 0 , то переход к п.11 иначе к п.14;
- Прочитать Buf из AudioData; Записать Buf в TempAudio;
- AudioData.Data.Position ::= AudioData.Data.Position - AudioData.nBlockAlign + ]Interval[*AudioData.nBlockAlign;
- Interval := Interval-]Interval[+Speed; i ::= i 1; переход к п.10;
- Speed ::= 1/Speed;
- Channel ::= 0;
- (AudioData.nChannels-1),.31.17;">Если Channel > (AudioData.nChannels-1), то переход к п.31 иначе к п.17;
- i ::= 0; j ::= 0; Interval ::= Speed;
- Если i<>Count, то переход к п.19 иначе к п.30;
- Прочитать Smp1;
- Если (i+1) <> Count, то переход к п.21 иначе к п.22;
- Прочитать Smp2;
- Smp2 ::= Smp1;
- k ::= ]Interval[;
- n::=0;
- Если n > (k-1), то переход к п.28 иначе к п.26;
- Записать в TempAudio (Smp1+(Smp2-Smp1)/k*n);
- n ::= n+1; переход к п.25;
- Interval ::= Interval - ]Interval[ + Speed;
- i :: = i+1; j ::= j+k; переход к п.18;
- переход к п.16;
- Конец.
- Требования к контрольному примеру
Контрольный пример должен содержать примеры изменения темпа звука: увеличение и уменьшение скорости его воспроизведения.
- Список условных обозначений
AudioData совокупность значений амплитуд и времен;
Start указатель на место в массиве данных,с которого начинать обработку;
Speed новая скорость звукового сигнала в процентах от текущей;
TempAudio получаемая совокупность значений амплитуд и времен;
Smp1, Smp2 переменные для хранения амплитуд;
Channel количество каналов;