imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 03.05.2006, 18:27     # 1
Rundll
Junior Member
 
Аватар для Rundll
 
Регистрация: 02.11.2003
Адрес: г. Таганрог
Сообщения: 63

Rundll Путь к славе только начался
Как программно вытащить аудиоданные из WAV???

Люди!!!, а как из wav (RIFF) файла вытащить именно звуковые данные (помоему они там имеют тип данных double). Заголовок я могу прочитать, а вот сами данные не знаю как ): В инете инфа есть, но там только заголовок читают. Буду очень благодарен за любую информацию и помощь!
__________________
Америка, Америка - это красиво, но Россия вот где есть СИЛА!!!
Rundll вне форума  
Старый 03.05.2006, 22:14     # 2
GOre01
Junior Member
 
Аватар для GOre01
 
Регистрация: 10.08.2004
Адрес: Завис в конторе
Пол: Male
Сообщения: 180

GOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царствеGOre01 Луч света в тёмном царстве
У же была похожая тема, пользуйся поиском.
Смотри здесь
__________________
Не нервируйте меня. Мне скоро негде будет прятать трупы!
GOre01 вне форума  
Старый 09.05.2006, 13:48     # 3
Rundll
Junior Member
 
Аватар для Rundll
 
Регистрация: 02.11.2003
Адрес: г. Таганрог
Сообщения: 63

Rundll Путь к славе только начался
Написал я прогу, которая читает заголовок и затем, соответственно, сами данные 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!
__________________
Америка, Америка - это красиво, но Россия вот где есть СИЛА!!!
Rundll вне форума  
Старый 11.05.2006, 11:36     # 4
_Lynx_
Junior Member
 
Регистрация: 11.10.2005
Сообщения: 63

_Lynx_ Путь к славе только начался
Может где опечатался или проглядел - код напиши

по твоим структурам:
Цитата:
ReadFile(hf, &riff, sizeof(riff_head), &readed, NULL);
ReadFile(hf, &head, sizeof(wav_head), &readed, NULL);
ReadFile(hf, &data, sizeof(data_head), &readed, NULL);
nBlockAlign=head.channels*head.bitsPerSample/8;
while(ReadFile(hf, &buff, nBlockAlign, &readed, NULL));
читаем по четыре байта

здесь ещё по формату написано
http://graphics.cs.msu.su/courses/cg...lp/wavfmt2.htm

<Mmsystem.h>
_Lynx_ вне форума  
Старый 12.05.2006, 11:23     # 5
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
Сами данные записываются по разному. Тип данных указан в заголовке. Данные могут быть (на сколько помню) 8/16/32 бита целочислинные или 32 бита с плавающей запятой. Соответственно и читать их лучше не "по 4 байта" и иметь геморрой с преобразованием, а как указано в заголовке. Кроме этого не забывай про моно/стерео/квад потоки - для моно потока сэмплы идут один за другим, а в стерео чередуются.
А и еще. Описания формата заголовка на многих сайтах противоречивы и неправильны. Так что смотри в хекс-едиторе пока не будет совпадения
crawler вне форума  
Старый 12.05.2006, 12:52     # 6
_Lynx_
Junior Member
 
Регистрация: 11.10.2005
Сообщения: 63

_Lynx_ Путь к славе только начался
Цитата:
crawler:
Сами данные записываются по разному. Тип данных указан в заголовке. Данные могут быть (на сколько помню) 8/16/32 бита целочислинные или 32 бита с плавающей запятой. Соответственно и читать их лучше не "по 4 байта" и иметь геморрой с преобразованием, а как указано в заголовке. Кроме этого не забывай про моно/стерео/квад потоки - для моно потока сэмплы идут один за другим, а в стерео чередуются.
Четыре получилось как раз из заголовка:
2 канала * 16 бит на сэмпл / 8
Итого 4 байта
_Lynx_ вне форума  
Старый 13.05.2006, 01:03     # 7
Rundll
Junior Member
 
Аватар для Rundll
 
Регистрация: 02.11.2003
Адрес: г. Таганрог
Сообщения: 63

Rundll Путь к славе только начался
Ребята, я просто забыл указать в параметре функции fopen - параметр "b". Это и есть решение проблемы! Иначе происходил перенос на следующую строку, символ которого занимал байт, в этом и весь косяк!
__________________
Америка, Америка - это красиво, но Россия вот где есть СИЛА!!!
Rundll вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 23:57.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.