Russian Qt Forum
Сентябрь 21, 2024, 16:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: эффект реверберации  (Прочитано 4771 раз)
Firefox
Гость
« : Март 04, 2010, 11:57 »

Здравствуйте. у меня такая задача. есть QByteArray data1[] сюда считываются данные и wave файла блока data. мне надо сделать изменения в этих данных таким образом, чтоб реализовать эфект реверберации.  причем создать жёсткую зашумлённость. я сделала так
Код:
QByteArray data1[];
QByteArray data2[];
int len=data1.size();
qint32 skoroct; // известна скорость, тоесть (частота дискретезации/ количество блоков в семпле)
skoroct=skoroct/100;
for(int i=0;i<skoroct;i++)
{
data[i]=data1[i];
}
int j=0;
for(int k=0;k<25;k++)
{
j=0;
for(int i=skoroct*k;i<len;i++)
data[i]=data1[i]+data1[j];
}
тобишь к имеющемуся массиву прибавляю с отставанием в skoroct*k ещёраз сам массив. таким образом пытаюсь реализовать смещение во времени прихода сигналов от источникак получателю. или я в корне не правильно понимаю логику?
но шумо чень слабенький создаётся. и к я меняла разные.skoroct изначально равна 22050/1 или 22050/2.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Март 04, 2010, 12:26 »

в ревербераторах обычно три параметра:
* задержка - на какое время запаздывает копия оригинала. (то что ты делаешь)
* интенсивность - аналог кол-ва копий
* период затухания (собственно "реверберация") - время, за которое задержанная копия сигнала затухает (ослабляется) в 1 милион раз
Записан

Юра.
Firefox
Гость
« Ответ #2 : Март 04, 2010, 22:59 »

дело в том что данные у меня в байтах. поэтому я не представляю как сделать затухание. поискала в интернете, но не нашла, обычно кодеки уже готовые, а вот код нигде не нашла.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #3 : Март 05, 2010, 11:03 »

Цитировать
Тема: эффект реверберации
ОФФ. Сразу вспомнил группу "9-й район"
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Март 05, 2010, 11:48 »

Firefox, мне не приходилось работать с "компьютерным звуком", только со специализированными промышленными устройствами.
Обычно, сигнал с АЦП, униполярен. Т.е. коды изменяются от 0 до некого MAX. Это означает, что в сигнале присутсвует постоянная составляющая. Однако её величина зависит от конкретной реализации. Но можно предположить, что это пол шкалы.
Можно пойти таким путём убрать постоянную составляющую, а затем произвести изменение амплитуды. Псевдокод такой:
Код
C++ (Qt)
const float k = 0.9; // это коэффициент усиления (<1, значит ослабление)
const Type constComponent = <тут половина максимального числа типа Type>; // Это постоянная составляющая
Type sourceData[] = <тут много данных>; // это массив источник данных
Type targetData[] ; // это массив конечных данных
 
for (...){
   SignedType d1 = constComponent - sourceData[i]; // это данные уже без постоянной составляющей, знаковый тип
   SignedType d2 = SignedType(k * d1); // это данные с изменённой амплитудой, знаковый тип
   targetData[i] = constComponent + d2;// это результирующие данные с востановленной постоянной состовляющей
}
 
Собственно это схема, которую можно привести к любому удобному виду
если у тебя данные в виде байт, то
Type, может быть char и соответсвенно
половина максимального числа типа Type = 127


« Последнее редактирование: Март 06, 2010, 19:12 от lit-uriy » Записан

Юра.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Март 05, 2010, 12:40 »

А зачем придумывать что-то свое, если всё уже придумано за Вас!? Можно же воспользоваться API готовых библиотек! (ИМХО)
ЗЫ: я бы на Вашем месте поступил бы именно так.
Записан

ArchLinux x86_64 / Win10 64 bit
Firefox
Гость
« Ответ #6 : Март 06, 2010, 12:17 »

подключать и искать готовые библиотеки не очень хочется.
а вот предложеный вариант попробую. я немного похоже сделала, я домножила исходные данные на коэфициенты меньше единицы, тем самым пытаясь реализовать затухание. шум вышел впринцепи. но мне нало 3 вида помех сделать. спасиб0))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.557 секунд. Запросов: 23.