![]() |
Как программно вытащить аудиоданные из WAV???
Люди!!!, а как из wav (RIFF) файла вытащить именно звуковые данные (помоему они там имеют тип данных double). Заголовок я могу прочитать, а вот сами данные не знаю как ): В инете инфа есть, но там только заголовок читают. Буду очень благодарен за любую информацию и помощь!
|
У же была похожая тема, пользуйся поиском.
Смотри здесь |
Написал я прогу, которая читает заголовок и затем, соответственно, сами данные 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! |
Может где опечатался или проглядел - код напиши
по твоим структурам: Цитата:
здесь ещё по формату написано http://graphics.cs.msu.su/courses/cg...lp/wavfmt2.htm <Mmsystem.h> |
Сами данные записываются по разному. Тип данных указан в заголовке. Данные могут быть (на сколько помню) 8/16/32 бита целочислинные или 32 бита с плавающей запятой. Соответственно и читать их лучше не "по 4 байта" и иметь геморрой с преобразованием, а как указано в заголовке. Кроме этого не забывай про моно/стерео/квад потоки - для моно потока сэмплы идут один за другим, а в стерео чередуются.
А и еще. Описания формата заголовка на многих сайтах противоречивы и неправильны. Так что смотри в хекс-едиторе пока не будет совпадения ;) |
Цитата:
2 канала * 16 бит на сэмпл / 8 Итого 4 байта |
Ребята, я просто забыл указать в параметре функции fopen - параметр "b". Это и есть решение проблемы! Иначе происходил перенос на следующую строку, символ которого занимал байт, в этом и весь косяк!
|
| Часовой пояс GMT +4, время: 22:40. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.