| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 02.11.2003
Адрес: г. Таганрог
Сообщения: 63
![]() |
Как программно вытащить аудиоданные из WAV???
Люди!!!, а как из wav (RIFF) файла вытащить именно звуковые данные (помоему они там имеют тип данных double). Заголовок я могу прочитать, а вот сами данные не знаю как ): В инете инфа есть, но там только заголовок читают. Буду очень благодарен за любую информацию и помощь!
__________________
Америка, Америка - это красиво, но Россия вот где есть СИЛА!!! |
|
|
|
|
# 2 |
|
Junior Member
Регистрация: 10.08.2004
Адрес: Завис в конторе
Пол: Male
Сообщения: 180
![]() ![]() ![]() ![]() ![]() ![]() |
У же была похожая тема, пользуйся поиском.
Смотри здесь
__________________
Не нервируйте меня. Мне скоро негде будет прятать трупы! |
|
|
|
|
# 3 |
|
Junior Member
Регистрация: 02.11.2003
Адрес: г. Таганрог
Сообщения: 63
![]() |
Написал я прогу, которая читает заголовок и затем, соответственно, сами данные wav файла, вроде бы всё нормально. После блока 'data' + 4 байта, начинаю читать отсчёты аудиоинформации, полученные данные внимательно сравниваю с данными hex-редактора, первые 84 слова (тестировал на стандартном медиа файле ОС windows - "chimes.wav": 22,5 кГц, стерео, 16 бит на отсчёт) совпадают точно! Затем происходит непонятная мне вещь, начиная с относительного адреса 0000:00D4, все данные смещаются на один байт, и выборки читаются по нечётным адресам медиафайла??? Странно? Вот результат сравнения отрезка информации, где происходит непонятное мне смещение:
hex-редактор: 0000:00C0 08 00 04 00 08 00 01 00 06 00 00 00 04 00 02 00 0000:00D0 07 00 05 00 0D 00 03 00 09 00 05 00 0C 00 04 00 Работа программы : 8, 4, 8, 1, 6, 0, 4, 2, 7, 5, 768, 2304, 1280, 3072, 1024, 1792 указатель на выборку 0D00, по адресу D4, перескакивает на выборку 0003, что и даёт результат 768, вместо необходимого 13! друзья, подскажите пожалуйста в чём беда? С уважением Rundll!
__________________
Америка, Америка - это красиво, но Россия вот где есть СИЛА!!! |
|
|
|
|
# 4 | |
|
Junior Member
Регистрация: 11.10.2005
Сообщения: 63
![]() |
Может где опечатался или проглядел - код напиши
по твоим структурам: Цитата:
здесь ещё по формату написано http://graphics.cs.msu.su/courses/cg...lp/wavfmt2.htm <Mmsystem.h> |
|
|
|
|
|
# 5 |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Сами данные записываются по разному. Тип данных указан в заголовке. Данные могут быть (на сколько помню) 8/16/32 бита целочислинные или 32 бита с плавающей запятой. Соответственно и читать их лучше не "по 4 байта" и иметь геморрой с преобразованием, а как указано в заголовке. Кроме этого не забывай про моно/стерео/квад потоки - для моно потока сэмплы идут один за другим, а в стерео чередуются.
А и еще. Описания формата заголовка на многих сайтах противоречивы и неправильны. Так что смотри в хекс-едиторе пока не будет совпадения
|
|
|
|
|
# 6 | |
|
Junior Member
Регистрация: 11.10.2005
Сообщения: 63
![]() |
Цитата:
2 канала * 16 бит на сэмпл / 8 Итого 4 байта |
|
|
|
|
|
# 7 |
|
Junior Member
Регистрация: 02.11.2003
Адрес: г. Таганрог
Сообщения: 63
![]() |
Ребята, я просто забыл указать в параметре функции fopen - параметр "b". Это и есть решение проблемы! Иначе происходил перенос на следующую строку, символ которого занимал байт, в этом и весь косяк!
__________________
Америка, Америка - это красиво, но Россия вот где есть СИЛА!!! |
|
|