работа с WAV ?

Тема в разделе "WASM.AUDIO", создана пользователем Nigger, 6 янв 2006.

  1. Nigger

    Nigger New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2005
    Сообщения:
    13
    Адрес:
    Russia
    Помогите советом =>

    Допустим имеется функция, которая должна работать со звуковыми файлами (около 50 мелких WAV).

    Функция в DLL.

    Как поместить эти WAV'ки в эту же библиотеку в виде ресурсов ? Или где еще можно разместить эти WAV'ки для максимально быстрой работы с ними ?
     
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Какой ассемблер?



    Проще всего запихать их все в .data секцию - тоесть не надо использывать не какой API для подгрузки ресурсов.



    Негр, ищи bin2o или bin2c - эти программы конвертирует файли в форму которую можно присоединять к программе.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    укажи в файле .rc:



    200 RCDATA DISCARDABLE "bell.wav"



    Вызывать

    invoke FindResource, hInstance, 200, RT_RCDATA

    invoke LoadResource, hInstance, eax

    Дальше делай с ним что нужно (например в файл сохранить и т.п.)
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Далее, через указатель на уже отмаппированный файл (то, что вернула LoadResource) можно пропарсить WAV до нахождения данных о его формате (частота, разрешение, моно/стерео и т.д.) в структуре WAVEFORMATEX. После этой структуры следует, собственно говоря, волна, которую сразу можно проиграть через WINMM или DirectSound. Тут, в главе "Multimedia and the .WAV file" есть пример парсинга WAV через mmio.
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Самый простой, а потому и дзенский способ - использовать fasm и директиву file.



    Для недзенного С можно использовать такой скрипт на perl для генерации исходника:
    Код (Text):
    1.  
    2. $columns = 8;
    3.  
    4. foreach $argnum (0 .. $#ARGV)
    5. {
    6.     $file = $ARGV[$argnum];
    7.     print "\nProcessing file `$file'\n";
    8.     open(IN, $file) or die "Can't open file: $!";
    9.     binmode(IN);
    10.     open(OUT, ]$file.cpp") or die "Can't open output file: $!";
    11.     print OUT "unsigned char  data [] =\n{\n";
    12.     while ( $byte = ord(getc(IN)) )
    13.     {
    14.         print  OUT '    '               unless $column;
    15.         printf OUT "0x%02X, ", $byte;
    16.         $column = 0                     if ++$column >= $columns;
    17.         print OUT "\n"                  unless $column;
    18.     }
    19.     print OUT "\n};\n";
    20. }
     
  6. Nigger

    Nigger New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2005
    Сообщения:
    13
    Адрес:
    Russia
    Спасибо.

    Попробую через LoadResource, потом придется проигрывать посредством API, а это наверное медленно будет.

    Я хочу подряд эти WAV'ки проигрывать и чтобы пауза не чувствовалась...
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Nigger



    Медленно по сравнению с чем? Скорость проигрывания зависит, прежде всего, от частоты стрима, но даже 44.1 КГц (качество CD), стерео на нормальных машинах тормозить не должно. Другое дело - DirectX. Там всё сложнее, но, если учесть все тонкости, тоже не должно наблюдаться тормозов :)





    Их можно склеить
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Разбираюсь с wav парсингом - вскрываю подряд виндовые звуки - некоторые нормальные, а в некоторых вместо WAVE_FORMAT_PCM = 1, значение 2 и вместо сигнатуры "data" какая-то "fact", да ещё выравнивание 1024 и размер звука 4 ? (в нормальных вместо 4х размер звука в байтах)
    Файл mmsystem.h и ссылка от Quantum в посте #4 ситуацию не проясняют.
    Кто нибудь знает что це за "fact" и с чем его парсят?

    ЗЫ: в аттаче русское описание заголовка wav