0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 40
|
|
1 | |
Сравнение двух звуковых файлов.17.02.2011, 12:25. Показов 4464. Ответов 2
Метки нет Все метки)
(
Ну начну:
задача стоит следующая - есть эталон звука (как я понимаю записанный в WAV-файл), есть сигнал с микрофона, подключенного к Sound-карте. Надо сравнить их и при сильно большой разнице выводить предупреждение. Идея мне ясна. Мне не ясно как это реализовывать. Первое: можно ли это дело сделать с помощью Delphi? Если да, то: Как прочитать WAV файл и как распознать сигнал на входе карты. Второе: на чем еще можно сделать, если на Delphi не возможно? Третье: мож кто знает русскоязычные ресурсы, по теме оцифрования и обработки звука, только не применительно к студии, п применительно к моему случаю? Дополнительно скажу, что сигнал с микрофона поступает в течении 24 часов. Заранее спасибо!
0
|
|
17.02.2011, 12:25 | |
Ответы с готовыми решениями:
2
Хранение звуковых файлов Сравнение двух текстовых файлов Сравнение двух огромных (!) файлов
|
0 / 0 / 0
Регистрация: 06.10.2008
Сообщений: 48
|
|
18.02.2011, 17:37 | 2 |
Обработка звука со спектральным анализом это уже 'обратные некорректные задачи'.. там целая наука
я лично сомневаюсь, что есть какая-нибудь библиотека с функцией 'сравнить звуковые файлы на похожесть' если кто найдет - просветите, пожалуйста
0
|
1 / 1 / 1
Регистрация: 29.04.2011
Сообщений: 28
|
|
01.05.2011, 14:12 | 3 |
Могу тебя обрадовать на Delphi это можно реализовать... Только вот слишком сложна проблема, которую ты собираешься решать.
Единственное, чем могу тебе помочь, это как прочитать WAVE файл формата PCM (Если интересует, как прочитать WAVE файл другого формата, например ADPCM или MPEG Layer 3, тоже могу рассказать, свяжись по ICQ или отправь письмо на мыло)… Сначала опишу структуру WAVE файла: 4 Байта а Глобальный фрагмент WAVE файла (должно быть RIFF) 4 Байта а Размер глобального фрагмента ( равен размеру всего файла, за исключением 4 ёх байт глобального идентификатора RIFF ) 4 Байта а Дополнительный идентификатор WAVE 4 Байта а Идентификатор формата определяющий формат звуковых данных, fmt ( последним символом является пробел ), этот идентификатор обозначает что вслед за ним следует структура описывающая формат исходных данных.. 4 Байта а размер структуры описывающей формат исходных данных {------------Структура описывающая формат исходных данных---------------------} 2 Байта а Идентификатор типа звукового формата. В модуле MMSystem определяются константы для многих типов форматов, например WAVE_FORMAT_PCM для данных в формате PCM… 2 Байта а Количество каналов, например, 1 ( моно ), 2 ( Стерео ) 4 Байта а Частота дискретизации, т.е. количество выборок за секунду 4 Байта а Скорость воспроизведения 2 Байта а Используется для выравнивания на границу блока 2 Байта а Количество Бит в выборке сигнала. Стандартные значения – 8 (Бит) и 16 Бит 2 Байта а Размер дополнительных данных, распологающихся вслед за данной структурой в памяти на диске.. {---------------------------------------------------------------------------------------------------} 4 Байта а Идентификатор данных data означает, что вслед за ним будут идти данные 4 Байта а Размер данных идущих вслед за data Далее идут непосредственно сами данные, размер которых определяется предыдущим полем… А теперь приведу пример функции загружающей блок звуковых данных в память. В качестве входных параметров указывается Имя загружаемого Wave файла ( FileName ), Указатель в который будет помещен указатель на выделенный блок звуковых данных (Buffer ), переменная в которую будет помещён Размер звуковых данных (BufferSize), Структура в которую будет занесена информация о формате звуковых данных )… Если во время загрузки звуковых данных в память произойдёт ошибка, то функция возвратит False… Uses MMSystem; function LoadSound(const FileName:String; Buffer : Pointer; out BufferSize : Cardinal; out WaveFormat : TwaveFormatex ):Boolean; var F :File; Id :array[0..8] of Char; SizeHeader ![]() begin Result := False; //Проверяем существует ли указанный файл If not FileExists(FileName) then Exit; //Открываем файл AssignFile(F,FileName); try Reset(F,1); //Пропускаем первые 8 Байтов, это RIFF + размер глобального идентификатора Seek(F,8); //Считываем 8 Байтов Blockread(F,Id,8); //Если этот идентификатор не Wavefmt, то значит файл повреждён if AnsiStrLiComp(Id,'WAVEfmt ',8)<>0 then begin CloseFile(F); Exit; end; //Считываем размер структуры описывающей размер структуры описывающей формат звуковых данных BlockRead(F,SizeHeader,4); //Е сли размер структуры описывающей формат звуковых данных, больше максимально допустимой для формата PCM, то с такими файлами не работаем If SizeHeader>SizeOf(TWaveFormatex) then begin CloseFile(F); Exit; end; //Считываем структуру описывающую формат исходных данных BlockRea
0
|
01.05.2011, 14:12 | |
Помогаю со студенческими работами здесь
3
Сравнение даты изменения двух файлов с использованием edit Воспроизведение звуковых файлов (wav или mp3) Воспроизвести несколько звуковых файлов одновременно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |