Помогите советом => Допустим имеется функция, которая должна работать со звуковыми файлами (около 50 мелких WAV). Функция в DLL. Как поместить эти WAV'ки в эту же библиотеку в виде ресурсов ? Или где еще можно разместить эти WAV'ки для максимально быстрой работы с ними ?
Какой ассемблер? Проще всего запихать их все в .data секцию - тоесть не надо использывать не какой API для подгрузки ресурсов. Негр, ищи bin2o или bin2c - эти программы конвертирует файли в форму которую можно присоединять к программе.
укажи в файле .rc: 200 RCDATA DISCARDABLE "bell.wav" Вызывать invoke FindResource, hInstance, 200, RT_RCDATA invoke LoadResource, hInstance, eax Дальше делай с ним что нужно (например в файл сохранить и т.п.)
Далее, через указатель на уже отмаппированный файл (то, что вернула LoadResource) можно пропарсить WAV до нахождения данных о его формате (частота, разрешение, моно/стерео и т.д.) в структуре WAVEFORMATEX. После этой структуры следует, собственно говоря, волна, которую сразу можно проиграть через WINMM или DirectSound. Тут, в главе "Multimedia and the .WAV file" есть пример парсинга WAV через mmio.
Самый простой, а потому и дзенский способ - использовать fasm и директиву file. Для недзенного С можно использовать такой скрипт на perl для генерации исходника: Код (Text): $columns = 8; foreach $argnum (0 .. $#ARGV) { $file = $ARGV[$argnum]; print "\nProcessing file `$file'\n"; open(IN, $file) or die "Can't open file: $!"; binmode(IN); open(OUT, ]$file.cpp") or die "Can't open output file: $!"; print OUT "unsigned char data [] =\n{\n"; while ( $byte = ord(getc(IN)) ) { print OUT ' ' unless $column; printf OUT "0x%02X, ", $byte; $column = 0 if ++$column >= $columns; print OUT "\n" unless $column; } print OUT "\n};\n"; }
Спасибо. Попробую через LoadResource, потом придется проигрывать посредством API, а это наверное медленно будет. Я хочу подряд эти WAV'ки проигрывать и чтобы пауза не чувствовалась...
Nigger Медленно по сравнению с чем? Скорость проигрывания зависит, прежде всего, от частоты стрима, но даже 44.1 КГц (качество CD), стерео на нормальных машинах тормозить не должно. Другое дело - DirectX. Там всё сложнее, но, если учесть все тонкости, тоже не должно наблюдаться тормозов Их можно склеить
Разбираюсь с wav парсингом - вскрываю подряд виндовые звуки - некоторые нормальные, а в некоторых вместо WAVE_FORMAT_PCM = 1, значение 2 и вместо сигнатуры "data" какая-то "fact", да ещё выравнивание 1024 и размер звука 4 ? (в нормальных вместо 4х размер звука в байтах) Файл mmsystem.h и ссылка от Quantum в посте #4 ситуацию не проясняют. Кто нибудь знает что це за "fact" и с чем его парсят? ЗЫ: в аттаче русское описание заголовка wav