война со злом

Софт для поиска audio плагиата - помогите с теорией Software


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();


Plagiary Seek and Destroy @ CoolRockBassBlock

Сталкивались с плагиатом ?

3 ▲
27 June 2014 13:09
CoolRockBassBlock
20 comments