| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Считывание заголовка WAV файла |
| Автор: ChinaUA 22.4.2012, 17:48 | ||
| Доброго времени суток! Есть задача считать заголовок WAV файла и представить данные в читабельной форме. У меня есть вот такой вод код:
В результате данные получаю частично корректные: File is 260028 bytes. RIFF header :RIFF WAVE header : FMT : Data size (based on bits used) :2338614392529502551 Sampling Rate :259984 Number of bits used :1 Number of channels :1 Number of bytes per second :0 Data length :562958543421441 Подскажите, что не так в коде. Программирую под Mac OS в Xcode... |
| Автор: feodorv 22.4.2012, 18:45 | ||
Даже не знаю, что сказать. Или в Mac OS тоже нужно fopen(...,"rb"); (что вряд ли))), либо файл какой-то неправильный ;) Вы его каким-нибудь HEX-viewer'ом смотрели? Откомпилил программу в виндах (с учётом исправления), запустил, получил:
|
| Автор: volatile 22.4.2012, 18:54 |
| В таких вещах обязательно нужно прагма пак выставлять. |
| Автор: feodorv 22.4.2012, 19:06 |
А ведь верно |
| Автор: ChinaUA 22.4.2012, 19:22 |
| Спасибо за ответы, честно говоря в программировании новичек. Код взял готовый, пытаюсь в нем разобраться. Подскажите, если long 64 битный, как быть в данном ситуации? Прописать другой тип данных? |
| Автор: feodorv 22.4.2012, 19:29 |
Да уж! А я даже не посмотрел((( Можно попробовать простой int. Но, главное, распечатать sizeof(wav_hdr), должно быть 44 |
| Автор: ChinaUA 22.4.2012, 19:48 |
| А как собственно распечатать sizeof(wav_hdr), если использовать printf() - ругается.... Поменял все переменные кроме char на int. Результат лучше, но еще не идеальный)) File is 260028 bytes. RIFF header :RIFF WAVE header :WAVE FMT :fmt Data size (based on bits used) :260020 Sampling Rate :176400 Number of bits used :259984 Number of channels :259984 Number of bytes per second :1048580 Data length :0 |
| Автор: feodorv 22.4.2012, 19:57 | ||||
Ну, эээ.
А печать идёт всё так же, через %ld? |
| Автор: ChinaUA 22.4.2012, 20:01 | ||||
Спасибо, распечатал - 52... В чем же загвоздка...
Печать идет через %d |
| Автор: feodorv 22.4.2012, 20:17 | ||
Разница - 8 байт. Могу предположить, что виноваты short: либо sizeof(short) есть 4, либо каждое short (волевым решением компилятора) занимает 4 байта. Как указывал volatile: Проверить можно так:
Для правильной работы нужно 2 и 4 байта соответственно. Как в МакОС выставлять прагма пак, я не знаю (возможно, что также как и в винде). |
| Автор: ChinaUA 22.4.2012, 20:27 |
| Спасибо тебе огромное! Немного вроде наладилось. Хотел тебе плюсик поставить, постов не хватает... Теперь результат вроде корректный File is 260028 bytes. RIFF header :RIFF WAVE header :WAVE FMT :fmt Data size (based on bits used) :260020 Sampling Rate :44100 Number of bits used :16 Number of channels :16 Number of bytes per second :176400 Data length :259984 Вот только смущает Number of channels :16, насколько я понимаю тут должно быть либо 1 либо 2... Добавлено через 9 минут и 59 секунд Ой, тупанул, с Number of channels разобрался, продублировалась строка... Теперь еще небольшой вопрос. Может сталкивался с проигрывание WAV с помощью PortAudio API? |
| Автор: feodorv 22.4.2012, 21:01 | ||
)))) Спасибо, volatile уже компенсировал На самом деле, плюсик нужно отнести нему ;) Я рад)))
А вот тут, увы, нечем помочь не могу... |
| Автор: ChinaUA 22.4.2012, 21:03 |
| Спасибо и на этом! Друзья, может кто-нибудь подскажет, как модно воспроизвести WAV под Mac OS? |