Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2019, 07:13   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Обработка аудио

Здравствуйте.
У меня есть два аудио-трека.
В первом - фоновая музыка.
Во втором - фоновая музыка с наложенным голосом.

Вопрос: имея только эти два трека, как можно выделить только голос ?

Попытался поиграться с профилями шумов в Adobe Audition: получилось так что очистка не полная (остаются некоторые звуки фоновой музыки), и в удаляемый шум захватывается значительная часть голоса, прям отчётливо слышно весь текст.

Что посоветуете ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 04.12.2019, 17:04   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А записано как? Там наверное одна запись чистая а вторая с шумами и голосом.
Может Фурье .. разложить оба сигнала и в кажду момент подавлять те частоты которые выделены в сигнале без голоса
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 04.12.2019, 21:16   #3
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

OmegaBerkut, выкладывайте в тему оба файла, при-+-думаем как разделить.
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 04.12.2019, 22:55   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
А записано как? Там наверное одна запись чистая а вторая с шумами и голосом
Изначально это один трек, у которого в левом канале только фоновый звук, в правом канале - фоновый звук с наложенным голосом.
То есть - голос только в одном ухе.
Мне поставили задачу: зеркально продублировать правый и левый каналы, в записи голос получился в обоих каналах; с этой задачей я справился обычным наложением (микширование).

Потом мне стало интересно, можно ли вытянуть только голос.
Вытянуть голос из правого канала, отсеять фон; по этому вопросу сначала попробовал что знаю, потом пришёл сюда.

По сути, мне нужно не обычное наложение звука, а какое то хитрое.
Если говорить про картинки - в фотошопе это наложение с вычитанием, и тогда одинаковые пиксели становятся чёрными, а разница с целевой картинкой - инверсия.
Соответственно, обратной инверсией можно получить исходную разницу изображений (если это jpeg - будет минимальный остаточный шум, который нивелируется на этапе обратной инверсии).

Выкладываю ссылку на архив с тремя подписанными файлами. Сразу скажу - на содержимое внимание не обращайте, так как это тема для отдельного обсуждения (за что люди готовы платить).
http://pro-gramm.ru/_download/_Mixer.zip

P. S. Это вопрос исключительно личного интереса, за это никто не платит. У меня есть ещё пара треков, которые я хочу потом так же обработать
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 05.12.2019 в 00:02.
OmegaBerkut вне форума Ответить с цитированием
Старый 04.12.2019, 23:48   #5
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Файлы прослушал, теперь не совсем понятна постановка задачи. Одно дело, извлечь из гаммы необходимый спектр. А другое, из исходников создать себе геморрой и думать как от него избавиться.

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Мне поставили задачу: зеркально продублировать правый и левый каналы
Здесь вопросов нет, все прозрачно.

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Потом мне стало интересно, можно ли вытянуть только голос.
Т. е. из полученного "микса" получить исходный вариант, правильно понимаю постановку задания?
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 04.12.2019, 23:59   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Desc Посмотреть сообщение
Т. е. из полученного "микса" получить исходный вариант, правильно понимаю постановку задания?
Вот есть у меня фоновая музыка (правый канал), и фон+голос (левый канал). Так получилось ввиду того, что изначально смонтировано криво.
Я их разделил на две отдельные записи. У меня получилась первая запись - "шум", вторая запись - "шум"+голос. Задача: отсеять "шум" на второй записи.
Имея эти вводные, как можно из второй записи (изначально левого канала) вытянуть голос ?
Аналогию с изображениями написал выше.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 05.12.2019 в 03:26.
OmegaBerkut вне форума Ответить с цитированием
Старый 05.12.2019, 15:51   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Музыка из треков разная.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 05.12.2019, 15:58   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Музыка из треков разная.
Может на слух так и кажется, правом канале голос может создавать видимость отличия музыки
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 05.12.2019, 18:57   #9
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Для разных октав пришлось сделать разный порог чем выше частота тем больше разница. Зависимость взял квадратичную. Но нужно более крутую делать.

Код:
procedure TForm1.Button9Click(Sender: TObject);
const
  WindowSize=8*1024; //число отсчётов
var fd:Integer;
  SamplesPerSec:DWord;
  First, Second:TArrayArrayReal;
  First1, Second1, Thri:TArrayReal;
  a,b,a1,b1,c:TArrayReal;
  NilArray:TArrayReal;
  z1,z2:TarrayComplex;
  i,j:Integer;
  M1,M2:Real;
begin

ReadWave('E:\tmp\_Mixer\Микшер\0. Изначальная запись.wav', First, SamplesPerSec);
ReadWave('E:\tmp\_Mixer\Микшер\2. Левый канал.wav', Second, SamplesPerSec);
fd:=SamplesPerSec;
First1:=First[1];
Second1:=Second[0];
SetLength(Thri,Length(First1));


SetLength(NilArray,WindowSize);
SetLength(z1,WindowSize);
SetLength(z2,WindowSize);
SetLength(a,WindowSize);
SetLength(b,WindowSize);
SetLength(c,WindowSize);

SetLength(a1,WindowSize);
SetLength(b1,WindowSize);

 i:=0;
 while i<Length(First1)-WindowSize do
 begin
 Move(First1[i], a[0], (WindowSize)*SizeOf(a[0]));
 Move(Second1[i], b[0], (WindowSize)*SizeOf(b[0]));

 // Вычисляем спектр
 MulLanczosWindow(WindowSize, @a[0]);
 CopyInRe(z1,a);
 CopyInIm(z1,NilArray);
 FFT(z1,False);
 Amp(a1,Z1);
 Do_db(a1,-100);

 // Вычисляем спектр
 MulLanczosWindow(WindowSize, @b[0]);
 CopyInRe(z2,b);
 CopyInIm(z2,NilArray);
 FFT(z2,False);
 Amp(b1,Z2);
 Do_db(b1,-100);

 // Строем огибающие спектров
 for j:=0 to 256 do
  begin
  Blur(a1);
  Blur(b1);
  end;
 // Нормируем громкость
 M1:=Mean(a1);
 M2:=Mean(b1);
 add(b1,M1-M2);
 // Фильтруем близкие спектры
 for j:=0 to WindowSize-1 do
   if abs(a1[j]-b1[j])<5+sqr((8*j) div WindowSize) then
     begin
     Z1[j].Re:=Z1[j].Re*0.001; 
     Z1[j].Im:=Z1[j].Im*0.001; 
     end;

 // Выводим спектры
 if (i div 10 div WindowSize)<>(i+Round(0.2*WindowSize))div WindowSize div 10 then
   begin
   Amp(c,Z1);
   Do_db(c,-100);
   sub(c,20);
   AddArrayInChart(Chart1,0, a1, $80000000+1, fd);
   AddArrayInChart(Chart1,1, b1, $80000000+1, fd);
   AddArrayInChart(Chart1,2, c, $80000000+1, fd);
   Caption:=Format('%.2f', [i/Length(First1)]);
   repaint;        {}
   end;

 //Обратно в отсчеты
 FFT(Z1,true);
 CopyFromRe(a,z1);
 for j:=0 to Length(a)-1 do
   Thri[i+j]:=0.5*Thri[i+j]+0.5*a[j];

 i:=i+Round(0.2*WindowSize);  // Обрабатываем окнами с 80% перекрытием
 end;

for j:=0 to Length(Thri)-1 do
  begin
  First[0][j]:=Thri[j];
  First[1][j]:=Thri[j];
  end;
WriteWave('E:\tmp\_Mixer\Микшер\3. разница.wav', First, fd);

end;
Вложения
Тип файла: zip 3. разница.zip (1.04 Мб, 2 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 05.12.2019, 20:45   #10
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Для разных октав пришлось сделать разный порог
Сильно =)
Спасибо конечно, гляну. Но вопрос: код скомпилирован ?
А то у меня Delphi не установлен, где-то на антресолях пылится =)
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Три задачи на Delphi (Паскаль): обработка строк, обработка множеств, работа с типизированным файлом Тедеев Помощь студентам 11 13.12.2013 13:38
обработка числовых последовательностей и последовательная обработка символов Renat(kai) Помощь студентам 3 28.03.2012 23:22
С++ и Аудио MasterSporta Общие вопросы C/C++ 1 23.12.2010 15:53
аудио проигрыватель sid1868 Помощь студентам 1 30.11.2010 21:08
Аудио наркотики VintProg Свободное общение 39 08.08.2009 19:27