Софт для поиска audio плагиата - помогите с теорией
soft Audio Plagiary Detector sktch2 @ CoolRockBassBlock
Известно, что иногда в Сети встречаются личности, у которых хватает совести выдавать чужие треки за свои, а некоторые ещё и продают их. Самое худшее происходит тогда, когда вы ничего не подозревая, спокойно работаете дальше. Проблема появляется внезапно, как гром среди ясного неба, начинаются долгие и неприятные разборки.
Мне, как и любому покупателю музыки, хочется полностью исключить возможность столкновения с любым сплагиаченным треком в релизе. Есть музыканты и владельцы лейблов на PROMODJ, на страницах которых бываю часто, в их релизах уверен полностью, но просторы Интернета безграничны.
Очень нужны любые мнения на тему: возможна ли программа, которая сама будет искать плагиат и по какому принципу она может работать ? Или в сегодняшнее время её невозможно сделать ?
Допустим, можно ли собрать в базу данных спектры mp3 файлов и детально сравнивать их между собой, или лучше разбивать музыкальный фрагмент на множество частотных диапазонов, сравнивая его с треком в котором есть сомнения, может существуют и другие варианты ?
Пока размышлял над subj, сделал примерный набросок интерфейса подобной программы
[скрин в самом начале поста]. Скорее всего, объёмы данных будут просто огромными, потребуется хранить детальную информацию о каждой композиции. Mp3, если что, можно перевести в wav файл и работать уже с ним, тем более, это реализовано уже достаточно давно:
Например, вот исходник класса Wav файла: авторство принадлежит dar3dev1l26 (С)
public class WavFile
{
public string path;
//-----WaveHeader-----
public char[] sGroupID; // RIFF
public uint dwFileLength; // total file length minus 8, which is taken up by RIFF
public char[] sRiffType;// always WAVE
//-----WaveFormatChunk-----
public char[] sFChunkID; // Four bytes: "fmt "
public uint dwFChunkSize; // Length of header in bytes
public ushort wFormatTag; // 1 (MS PCM)
public ushort wChannels; // Number of channels
public uint dwSamplesPerSec; // Frequency of the audio in Hz... 44100
public uint dwAvgBytesPerSec; // for estimating RAM allocation
public ushort wBlockAlign; // sample frame size, in bytes
public ushort wBitsPerSample; // bits per sample
//-----WaveDataChunk-----
public char[] sDChunkID; // "data"
public uint dwDChunkSize; // Length of header in bytes
public byte dataStartPos; // audio data start position
public WavFile()
{
path = Environment.CurrentDirectory;
//-----WaveHeader-----
dwFileLength = 0;
sGroupID = "RIFF".ToCharArray();
sRiffType = "WAVE".ToCharArray();
//-----WaveFormatChunk-----
sFChunkID = "fmt ".ToCharArray();
dwFChunkSize = 16;
wFormatTag = 1;
wChannels = 2;
dwSamplesPerSec = 44100;
wBitsPerSample = 16;
wBlockAlign = (ushort)(wChannels * (wBitsPerSample / 8));
dwAvgBytesPerSec = dwSamplesPerSec * wBlockAlign;
//-----WaveDataChunk-----
dataStartPos = 44;
dwDChunkSize = 0;
sDChunkID = "data".ToCharArray();
}
}
Он пишет буквально следующее: Цитата:
"Мне не нужно никаким образом менять данные в хэдере или менять размер wav файла, мне нужно изменить с помощью своего алгоритма значения в блоке данных. Поэтому я действую так: создаю экземпляр класса WavFile инициализирую его поля с помощью BinaryReader, потом копирую файл с помощью BinaryWriter (когда дохожу до блока данных я их перед записью редактирую). Таким образом я имею копию исходного файла, только с звуковыми отредактированными данными..."
Вот его код для инициализации:
wavFile.path = @"C:\Track.wav"; // Полный путь к нашему файлу
FileStream fsr = new FileStream(wavFile.path, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fsr);
wavFile.sGroupID = r.ReadChars(4); // Читаем всю структуру
wavFile.dwFileLength = r.ReadUInt32();
wavFile.sRiffType = r.ReadChars(4);
wavFile.sFChunkID = r.ReadChars(4);
wavFile.dwFChunkSize = r.ReadUInt32();
wavFile.wFormatTag = r.ReadUInt16();
wavFile.wChannels = r.ReadUInt16();
wavFile.dwSamplesPerSec = r.ReadUInt32();
wavFile.dwAvgBytesPerSec = r.ReadUInt32();
wavFile.wBlockAlign = r.ReadUInt16();
wavFile.wBitsPerSample = r.ReadUInt16();
wavFile.sDChunkID = r.ReadChars(4);
wavFile.dwDChunkSize = r.ReadUInt32();
wavFile.dataStartPos = (byte)r.BaseStream.Position;
r.Close();
fsr.Close();
Comments
Pinned comments
и да, нормально даже простейшие полифонические партии до сих пор распознавать софт не умеет, чего уже говорить о точном распознавании всех мелодических партий внутри композиции.
этот ваш шазам-то и то ошибается, а у него задача куда проще - найти фактически идентичный файл, а не проверять, идентичны 3 нотки у скрипки в правом ряду одной вещи бэк-вокальной партии другой вещи.
При конкретных вопросах источнику случался нижеследующих диалог:
ХХХ12.04.14
Пересланные сообщения
Остальные не отгадал
YYY12.04.14
Оу оу оу
Черт возьми! Кто б.я на моих треках наживается!
ХХХ12.04.14
подай в суд!
YYY12.04.14
Толку сейчас мало.. след альбом буду продавать.. дабы не было такого
YYY12.04.14
Надо узнать как продавать треки на разнх маркетах
YYY12.04.14
ахаха да Noizequake этот чувак своровал у меня 6 треков
к тому же занятие бесперспективное.
и да, нормально даже простейшие полифонические партии до сих пор распознавать софт не умеет, чего уже говорить о точном распознавании всех мелодических партий внутри композиции.
этот ваш шазам-то и то ошибается, а у него задача куда проще - найти фактически идентичный файл, а не проверять, идентичны 3 нотки у скрипки в правом ряду одной вещи бэк-вокальной партии другой вещи.
1. скорость интернета не станет космической
2. жесткие диски не станут вмещать тысячи терабайт.
3. не появятся программы, "умеющие" распознавать в реал тайме мелодии в разных темпах и тембрах тысяч треков одновременно.
2. Любой современный СХД.
3. Существуют сервисы, которые обрабатывают запросы в разы превышают данные.
Плохо вы знакомы с ЦОДами.
Наверное любой себе может позволить разместить махину у себя дома...
TrackID распознает трек Funky Deluxe - Goody (www17.zippyshare.com/v/6042324 …) как The Fatback Band - Night Fever
Изменений, конечно, практически никаких (в ремиксе), но все же...
этим основополагающим стандартом, находил программу, которая могла перевести WAV в MIDI. Это было что-то невероятное и конечно-же разработанное
выходцами из СССР! Но, к сожалению, на той версии (вроде 2.7) не получалось толком перевести ни один свой трек.
Сейчас решил посмотреть, продолжили ли эти, без сомнения, одарённые программисты свою работу ?
Оказалось что да. Может быть кто-то из Вас ей постоянно пользуется и я окажусь капитаном-очевидностью, но другие, возможно, заинтересуются:
Встречайте: WIDI - Music Recognition System v3.3 и v4.00
Вот что пишут авторы о самой интересной части - об алгоритме:
"На первом вычисляются спектральные данные специального вида, этот этап называется преобразованием "Звук->Тон". В настоящее время в программе имеются три различных алгоритма, осуществляющих это преобразование; каждый из них имеет свои достоинства и недостатки.
Далее, спектральные данные умножаются на соответствующие коэффициенты Эквалайзера, в результате какие-то тоны становятся тише, какие-то громче.
На третьем шаге из полученного спектра выделяются собственно ноты, этот процесс называется Тон->MIDI и он может быть произведен с помощью одного из двух алгоритмов.
На конечной стадии создается структура будущего MIDI-файла, и Вы можете указать для него некоторые атрибуты."
Возможности. Цитирую сопроводительную документацию:
"Основная задача программы TS-WIDI Pro это преобразование оцифрованных музыкальных полифонических записей в файлы MIDI и распознавание музыки в реальном времени.
Исходные данные
Полифонические и монофонические записи в форматах MP3, WAVE, AIF, SND, AU, SF и аудио CD-треки *.
Звук поступающий с микрофона в реальном времени.
Поддерживаются также сжатые файлы WAVE.
Основные особенности распознавания
Возможность выбрать один из нескольких алгоритмов, в том числе специально предназначенных для монофонического распознавания.
Распознающий алгоритм автоподстраивается под тональность произведения.
Простая гармоническая модель позволяет автоматически исключать ошибочные ноты.
Многочисленные настройки распознавания позволят достигнуть наивысшего качества распознавания.
Имеется возможность выбрать частотный диапазон в котором будет производится распознавание.
Возможности редактирования
Возможно выделить для распознавания любую часть музыкальной записи.
Использование редактора TrueTone (tm) позволяет эффективно повысить качество распознавания.
Работа в реальном времени
Вы можете распознавать ноты "на лету", управляя MIDI-синтезатором непосредственно из модуля распознавания в реальном времени.
Представление результата
На выходе получается многоканальный, отсортированный по громкости файл MIDI.
Есть возможность выбрать один из большего списка инструментов, чтобы использовать его в результирующем файле MIDI.
Дополнительные возможности:
Возможно записывать звук с микрофона или с любого другого входа, используя встроенный звукозаписывающий модуль.
Встроенный эквалайзер позволяет настраивать относительную громкость нот различной высоты.
Возможно проиграть файлы всех поддерживаемых форматов."
Где найти shareware:
www.mymusictools.com/rus/midi_ …
и здесь: (freeSOFT является участником программы Kaspersky White List.)
freesoft.ru/tswidi_pro_russian …
Обращал внимание на то, что за инструмент будет использован для проигрывания результата:
С тем небольшим фрагментом, где звучит только Lead-группа, WIDI справилась на удивление успешно, но всё остальное звучало весьма далеко от истины.
Исходя из чего были сделаны следующие выводы: хотя над алгоритмом разработчики работали весьма продолжительное время, для распознавания
современной музыки его эффективность нельзя назвать особенно высокой, но даже при всех её недостатках WIDI - это редкая и, безусловно, интересная разработка,
остро нуждающаяся в дальнейшем развитии.