Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.11.2011, 08:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию "XOR" музыкального фрагмента

Предположим, есть 2 фрагмента, приблизительно одинаковой длины. На одном из них "чистый" звук, на втором - тот же фрагмент, но с некоторой "примесью". Нужно получить "примесь", перед этим сдвинув начало второго фрагмента так, чтобы они шли в одной фазе. Если мне не изменяет память, то 2 волны, идущие в разных фазах, могут компенсировать друг друга. Есть ли у кого-нибудь идеи, через какие методы это можно осуществить? Ещё круче, если кто-то найдёт готовое решение, но это уже из области фантастики.

Пример "в картинках", что нужно получить - во вложении. Понятно, что такой "идеальной" картины не получится, но хотя-бы что-то получить из этой идеи можно. А остатки уже можно отсечь эквалайзером и фильтрами
Изображения
Тип файла: png waves.png (4.0 Кбайт, 18 просмотров)
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #2  
Старый 18.11.2011, 18:33
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию

Шум имеет локальные скачки (как на рисунке) или, скажем так, делает сигнал "бородатым" практически по всей его длине?

Если выбросы локальные, то со сдвигом достаточно просто.

1. Эквалайзер как вариант вот http://www.delphisources.ru/forum/sh...ad.php?t=18144.
2. Дальше считаешь амплитуду сигналов.
3. С помощью максимума кросскорреляционной функции определяешь сдвиг одного фрагмента относительно другого.

По поводу получения "примеси" - если амплитуды посчитать получилось в каждый момент времени, то просто вычитаешь один сигнал из другого после смещения.
Полагаю что в музыку эти примеси переводить не надо ?
Ответить с цитированием
  #3  
Старый 18.11.2011, 19:07
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Для примера:
Фрагменты примерно 2 такта на 175bpm, то-есть 8/175*60 = 2,7 секунд. Если их совместить, то получим точное усиление совпадающих частей. Так что будем считать, что сдвиг незначительный (но на всякий случай надо это проверять). Примесь может быть как "локальной", так и располагаться по всей длине. Интересует именно алгоритм вычитания (что для этого можно использовать), т.к. остальное можно проделать и вручную.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #4  
Старый 18.11.2011, 19:34
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Это тебе для сведения треков надо?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 18.11.2011, 19:37
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию

Кажется мы немного о разных вещах говорим....

1. У тебя есть сигнал, ты знаешь его АЧХ (через эквалайзер).
2. Ты можешь посчитать амплитуду сигнала на определенной частоте.
3. Далее можешь получить зависимость амплитуды сигнала для каждого момента времени, т.е. зависимость ampl(t).
4. Дальше просто вычитаешь эти числовые последовательности.

Например сигнал 4 секунды с частотой 2 Гц. 9 точек
1.0 0.0 -1.0 0.0 1.0 0.0 -1.0 0.0 1.0 (чистый синус например)
1.1 0.2 -1.3 0.1 1.1 0.1 -1.2 0.0 1.1 (сигнал с шумом)

одну строку из другой вычитаешь - получаешь амплитуду шума
0.1 0.2 -0.3 0.1 0.1 0.1 -0.2 0.0 0.1

Если надо считаешь АЧХ шума.

P.S. Такие задачи (если не стоит четкое требование решить в дельфях) лучше делать в Matlab'e или в чем-нить типа него.
Ответить с цитированием
  #6  
Старый 18.11.2011, 20:10
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Это тебе для сведения треков надо?
Нет, но касается музыкальной деятельности
Цитата:
Сообщение от U.B.M.
Кажется мы немного о разных вещах говорим....
Похоже на то. По тому примеру, что я привёл, есть идеи?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 18.11.2011, 23:38
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
Нет, но касается музыкальной деятельности Похоже на то. По тому примеру, что я привёл, есть идеи?

Ну как бы в 5 посте я тебе вроде весь алгоритм рассказал... с точки зрения математики хотя бы.

Вопрос в формулах? Или в чем-то другом. У меня складывается впечатление что в формулах.
Ответить с цитированием
  #8  
Старый 19.11.2011, 05:07
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Да знать бы для начала, куда эти формулы подставлять... Через что можно на таком уровне со звуком работать, вот в чём вопрос.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter