Як витягнути голосову частину зі стереосигналу?


15

Зараз я обробляю MP3-файл і стикаюся з цією проблемою. Мій MP3 - стереокодування. Що я хочу зробити, це витягнути голосову частину для подальшої обробки (незалежно від режиму вихідних сигналів, моно або стерео).

Наскільки мені відомо, звук кодується в різні роз’єднані піддіапазони частот у MP3. Я думаю, що я можу обмежувати сигнали голосовим діапазоном через високочастотний / низькочастотний фільтр із встановленою частотою відсічення. Однак результат повинен містити частини чистого музичного сигналу в цьому випадку. Або після googling, я думаю, що я можу спершу обчислити фонові сигнали (інвертуючи один канал, додаючи сигнали з іншого каналу, припускаючи, що голосова частина зосереджена у стереозвуку, який називається скасування фази). Після цього перетворення сигнал стає моно. Тоді я повинен об'єднати оригінальний стереосигнал у моно, з якого виймається фоновий сигнал.

Враховуючи ефективність, яке саме перевагу (чи будь-які інші рішення :)? Якщо другий, нехай два канали A і B будуть використовувати (BA) або (AB) при обчисленні фону? Як аліфметика означає, як арифметика достатньо точна? Або я можу зменшити вибірку кожного каналу з коефіцієнтом два і переплутати сигнали, що не вживаються, як моно-результат?

Дякую і всього найкращого.

Відповіді:


21

Перш за все, про те, як закодовані дані у mp3-файлі, питання не має значення, якщо ви не прагнете займатися обробкою стисненого домену (що було б досить нерозумно). Тож можна припустити, що ваш алгоритм буде працювати з декомпресованими даними часової області.

Сума / різниця - це дуже-дуже основна хитрість для придушення голосу (не вилучення). Він заснований на припущенні, що вокал змішується в центрі стерео поля, а інші інструменти панорумуються бічно. Це рідко буває так. LR і RL будуть звучати однаково (людське вухо нечутливе до глобального зсуву фази) і дасть вам моно-суміш без інструментів, змішаних у центрі. Проблема полягає в тому, що коли ви відновите фон, що ви будете з ним робити? Спробуйте придушити його від центрального (середнього) сигналу? Це не буде працювати, ви будете робити (L + R) / 2 - (L - R), це не дуже цікаво ... Ви можете спробувати будь-які лінійні комбінації з них (усереднені та "центр вилучено"), нічого вийде з цього!

Щодо підходів до фільтрування: f0 голосу рідко перевищує 1000 Гц, але його гармоніки можуть перевершити це. Видалення найвищої частоти зробить приголосні (особливо sss, chhh) неприємними. Деякі чоловічі голоси опускаються нижче 100 Гц. Однак ви можете сміливо різати все, що нижче 50 або 60 Гц (бас, удар)

Деякі останні події в розділенні голосу варто вивчити:

  • Фон модельного фільтра Жан Луї Дюрріу ( NMF + гармонійний гребінець> модель фільтра) Код Python тут .
  • Rafii в фон екстракція підхід . Відразу кодуйте і добре працює на музиці, створеній на комп’ютері, з дуже повторюваними зразками, такими як Electro, Hip-hop ...
  • Hsu підійшов на основі виявлення, відстеження та маскування f0. "Алгоритм тандему для вилучення пісенних пітчів та розділення голосу під музичний супровід" (не можна знайти доступний PDF).

4

Дякую за довідку! Ви забули згадати свою роботу з удосконалення барабанів , що також може зацікавити додаток Summer_More_More_Tea. Добре, що все насправді залежить від того, що ви хочете з цим зробити. Чи маєте ви на увазі конкретну "кінцеву програму"?

Я повністю погоджуюся з вищезгаданими твердженнями пікенет. Для завершення, однак, я повинен сказати, що згадане вами посилення голосу також використовувалося в деяких творах Матті Рійнянена, генератора треку в Караоке для покращення результатів.

Щоб відповісти на ваші запитання:

З огляду на ефективність, який із них є кращим (чи будь-які інші рішення :)?

Як сказали пікенети, це, мабуть, не відповідає вашим потребам: фільтрація з низьким та високим частотами проходить через невдачу через гармонійну структуру людського голосу (і взагалі будь-якого "цікавого" звучання - тобто нічого, що виходить за рамки синусоїдів ... ).

Якщо другий, нехай два канали A і B будуть використовувати (BA) або (AB) при обчисленні фону? Як поєднує два канали, чи означає арифметику достатньо точною?

Знову ж таки, другий спосіб, який ви згадуєте, не буде робити, оскільки ви можете видалити сигнал, який знаходиться в центрі, а не отримати його. Іншими словами, навіть вокал знаходиться в «центрі», не існує простої математики, щоб отримати лише вокал сигнал.

Або я можу зменшити вибірку кожного каналу з коефіцієнтом два і переплутати сигнали, що не вживаються, як моно-результат?

е ... усереднення каналів для отримання одноканального сигналу, як було запропоновано вище, має сенс і не порушує спектральні характеристики вашого сигналу (якщо вважати, що стереосигнал не вироджений). Таким чином, ви отримуєте моносигнал, у якому ви маєте, в основному, той самий музичний зміст, як і раніше.

Правильно зменшена вибірка кожного каналу означає, що ви спочатку застосуєте фільтр низьких частот (із частотою відсікання вибірки_rate / 4 у вашому випадку), а потім можете сміливо брати кожні 2 зразки. Однак, про перемежування каналів, таким чином, не можна сказати багато: у більшості загальних випадків це порушує спектральні характеристики вашого сигналу. Ти, мабуть, цього не хочеш.

Дійсно, функціонування низькочастотної фільтрації супроводжувалося встановленням 0 кожні 2 зразки та збереженням цих 0-виводів у домі Фур'є до "дзеркального відображення" низькочастотних компонентів, які зберігалися на високочастотних. Пам'ятайте, ви уроки обробки сигналів з теорії дискретизації: множення на послідовність імпульсів (або діарок) призводить до згортання з іншою послідовністю діарок в області Фур'є, тобто в цьому випадку частотний спектр сигналу повторюється (періодизується) по осі частоти, з періодом, рівним частоті вибірки.

Зазвичай при знижувальній вибірці ви видаляєте 0 (тому що передбачаєте новий показник вибірки). Але тут їх утримання призводить до дуже дратуючих додаткових високочастотних компонентів. Переплетення цих сигналів це не виправить.

Ну, загалом, коротка відповідь: не робіть цього . :-)

Нарешті, я також можу запропонувати вам використовувати графічний інтерфейс, розроблений для конференції LVAICA 2012: для цього є git repo . Я все ще налагоджую і вдосконалюю її, тому коментарі вітаються: D

Сподіваюся, що це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.