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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2014, 19:01   #1
Karateka
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 33
По умолчанию Обработка WAV файла

Задача состоит в следующем: есть WAV файл (преподаватель сказал записать свой голос)
1) нужно удостовериться что это WAV файл - тут как я понял это можно посмотреть в заголовках самого файла http://audiocoding.ru/%D1%81%D1%82%D...%BB%D0%B0.html
2) Нужно провести фильтрацию сигнала сохранив звук только в диапазоне от 300Гц до 4кГц.

Как это сделать?!

Почитав некоторые статьи, я понял что нужно разложить в ряд фурье (http://ru.wikipedia.org/wiki/%D0%91%...80%D1%8C%D0%B5) потом обрезать частоты и все это собрать. Есть у кого какие мысли по этому поводу?

На вики есть алгоритм быстрого преобразования в Ряд Фурье, а дальше как отсечь не нужные высоты частот и потом все это собрать в wav файл?
Karateka вне форума Ответить с цитированием
Старый 30.06.2014, 19:01   #2
Karateka
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 33
По умолчанию

Еще хотелось бы узнать есть какие-нибудь библиотеки которые все это делают?
Karateka вне форума Ответить с цитированием
Старый 30.06.2014, 20:12   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1- да, именно в сигнатуре файла
2- провести разложение последовательно каждого сэмпла прямым преобразованием Фурье в спектр, откидыванием частот ниже 300 и выше 4000 Гц и последующим обратным преобразованием Фурье спектра в отсчеты.
3- библиотеки FFT/iFFT - FFTW или моя FFTR.DLL
4- также есть пакеты обработки ACS.

Замечу, что программное создание ФНЧ для обрезания полосы, скажем сверху, совсем необязательно осуществлять через Фурье, если вспомнить про частотную характеристику фильтра "скользящего среднего". Если опустить некоторые выкладки из теории ЦОС (см. мою публикацию "ПЛИС. Часть 3 или... Цифровая фильтрация. Сглаживание и борьба с импульсными помехами. - Радиолюбитель, 2014, №3, с.32"), допустим, имеем сигнал-синус (набор данных, сэмплов WAV PCM) с частотой дискретизации 44100 Гц и разрешением 32 бита на сэмпл. Среднее из скольки сэмплов нужно взять, чтобы остались частоты ниже 4000 Гц? То есть стоит задача отфильтровать высокие частоты.

Обратимся к готовой формуле (ее вывод см. у меня) и подставим исходные данные:
Код:
Nопт = round(Fd/2/Fs) = round(44100/2/4000) = round(5.51) ~ 6
Как видим, порядок фильтра или длина окна должны быть равны 6 сэмплам. Таким образом, если нам необходимо убрать все частоты выше 4000 Гц или что эквивалентно введению окна ФНЧ, то мы должны взять один сэмпл, сформированный как среднее из 6-ти сэмплов аудиосигнала.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 30.06.2014 в 20:15.
raxp вне форума Ответить с цитированием
Старый 02.07.2014, 21:10   #4
Karateka
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 33
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
1- да, именно в сигнатуре файла
2- провести разложение последовательно каждого сэмпла прямым преобразованием Фурье в спектр, откидыванием частот ниже 300 и выше 4000 Гц и последующим обратным преобразованием Фурье спектра в отсчеты.
3- библиотеки FFT/iFFT - FFTW или моя FFTR.DLL
4- также есть пакеты обработки ACS.
Есть файл WAV с записью моего голоса. Извлек его шапку. Получил следующие:

Код:
0-3 байт RIFF
4-7 байт 926234
8-11 байт WAVE
12-15 байт fmt 
16-19 байт 18
20-21 байт 1
22-23 байт 1
24-27 байт 22050 // эти значения как я понял должны стоять на оборот
28-31 байт 44100 // ведь это частота дискрет. значит должна быть на месте 24-27 байт, но тут они почему-то стоят наоборот. Пробовал другой файл там все ок.
32-33 байт 2
34-35 байт 16
36-39 байт           // здесь должна быть data, но её нет
40-43 байт 291939
Как извлечь данные не пойму. Пишу
Код:

  _FileWAVE.Read(subChunk2Size, SizeOf(subChunk2Size));
  Memo1.Lines.Add('40-43 байт ' + IntToStr(subChunk2Size));

  SetLength(data,subChunk2Size);
  _FileWAVE.Read(data, length(data));
в массив ничего не пишется, одни нули. Далее по размыслив, понял что нужно читать по размера сэмпла т.е. получается у меня семпл равен 16, значит читать по 16 бит.

Подскажите как правильно считать данные WAV файла в массив?

И когда мы получаем данные WAV, эти данные мы уже прогоняем через Фурье, правильно?
Karateka вне форума Ответить с цитированием
Старый 02.07.2014, 22:02   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Подкину вам хорошую библиотеку обработки WAV.
ещё есть NewAC.

//Сам не в теме.. но мб Вы оттуда что-то да подберете.
Человек_Борща вне форума Ответить с цитированием
Старый 02.07.2014, 22:08   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Глубоко сомневаюсь, что учитель примет работу со сторонней библиотекой. Ибо задачу решит не ученик, а чужой код.
doktor255 вне форума Ответить с цитированием
Старый 02.07.2014, 22:11   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

doktor255, я не говорил про компонентокидательство, я про то что готовый код облегчает понимание его задачи. Можно написать свой код быстрее.
Человек_Борща вне форума Ответить с цитированием
Старый 02.07.2014, 22:15   #8
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
я про то что готовый код облегчает понимание его задачи.
Код или DLL библиотека? Если второе, то вообще не облегчит.
doktor255 вне форума Ответить с цитированием
Старый 03.07.2014, 00:04   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну вы хоть глянули что я ему кидаю, прежде чем предполагать что-то с чем-то.
Человек_Борща вне форума Ответить с цитированием
Старый 03.07.2014, 00:23   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Ну а оно, по сути мне надо? Я просто по опыту знаю, что большинство библиотек для работы со звуком идут в DLL, вот и высказался. Не DLL и слава богу. Значит задача сведётся к весёлому выдиранию функций из чужой библиотеки.
doktor255 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание Wav-файла DelhiProgramer Мультимедиа в Delphi 1 13.08.2012 14:14
Обработка и запись WAV Voxa7 Помощь студентам 2 13.03.2011 11:28
декомпиляция Wav файла DzetaHunter Общие вопросы Delphi 3 14.01.2011 13:17
Анализ Wav файла lacost Общие вопросы по Java, Java SE, Kotlin 4 17.12.2010 12:09
Спектр wav файла varvara16 Мультимедиа в Delphi 3 01.02.2010 08:10