1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Воспроизведение звука

Тема в разделе "WASM.AUDIO", создана пользователем drem1lin, 20 сен 2011.

  1. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    294
    Как можно воспроизвести простейший звук на колонках из драйвера??
     
  2. yurza

    yurza New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    69
  3. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    294
    yurza это пищалка, с ней работать я умею. Меня интересует именно звук через колонки, то есть работа со звуковой картой.
     
  4. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    294
    Посоветовали разобраться с OpenAL. Скачал SDK. Начал, попытался одну из функций прикрутить к драйверу, поключил headers, либу в sources прикрутил. Все вроде собирается, но при запуске драйвера KmdManager пишется ошибка "не удается найти указанный файл". Кто то имел опыт прикручивания OpenAl к драйверам? или может подсказать в чем ошибка?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.342
    Адрес:
    Russia
    drem1lin
    Ошибка в том, что все что вы прикрутили - юзает совсем не кернельмодные библиотеки.
    А вообще вам будет ой как не просто. Могу посоветовать поизучать более кернельное:
    WinDDK\src\audio\ac97\
    Да и вообще весь раздел audio посмотрите.
     
  6. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    294
    читал что под виста и выше, что то можно запустить из openAL, все что в разделе audio это немножко не то, мне не нужен драйвер аудио карты, мне нужен способ проиграть wav file.
     
  7. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    163
    Кто знает, как запустить миди файл в приложении под MS-DOS, как настроить аудикарту и всё такое? Программа на ассемблере.
     
  8. SDK

    SDK Member

    Публикаций:
    2
    Регистрация:
    8 дек 2019
    Сообщения:
    100

    Вложения:

    • GIMN.zip
      Размер файла:
      427 байт
      Просмотров:
      29
  9. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    163
    Нет, мне надо для игры, нужен код, который запускает миди файлы, настраивает и всё такое. Плейеры я сам догадался скачать.
     
  10. SDK

    SDK Member

    Публикаций:
    2
    Регистрация:
    8 дек 2019
    Сообщения:
    100
    @Intro,тут два варианта самому разбираться если есть время имея шаблон или искать специально обученого человека например на ехе лабе в поиске специалистов ,но это никому не надо даже за деньги,готового кода нет есть игра larry в выходном костюме готовая там всё уже придумали есть другие игры blood и тд в них есть настройщики под карту и прочее ,можно посмотреть как они реализовали проигрывание звуков ,можно сходить на гитхаб поискать код под дос плееров midi других вариантов нет.
     
  11. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    163
    Да вообще то можно разобрать в IDA Pro тот же GIMN.com, только вроде там просто через динамик. А мне надо доступ к портам SoundBlaster, чтобы процессор в обработки звука почти не как не был задействован.
     
  12. SDK

    SDK Member

    Публикаций:
    2
    Регистрация:
    8 дек 2019
    Сообщения:
    100
    это Blood там настройщик гимн через пьезик.
     
  13. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    348
    Адрес:
    Кольца Сатурна
    Intro, надо курить формат MIDI-файлов (там не так всё сложно), описание стандарта MIDI (ссылки ниже) и далее надо смотреть в сторону портов 330h, 331h (параметр P переменной окружения BLASTER - под DOSBox работает, под реальное железо не на чем тестить, но там сложнее). На AWE32, вероятно, будет 620h (параметр E), но по этому поводу могу соврать.
    http://www.muzoborudovanie.ru/articles/midi/midi1.php
    http://www.muzoborudovanie.ru/articles/midi/midi2.php
    http://www.muzoborudovanie.ru/articles/midi/midi3.php
    http://www.muzoborudovanie.ru/articles/midi/midi4.php
    http://www.muzoborudovanie.ru/articles/midi/midi5.php
    http://www.muzoborudovanie.ru/articles/midi/midi6.php
    http://www.muzoborudovanie.ru/articles/midi/midi71.php
    http://www.muzoborudovanie.ru/articles/midi/midi72.php

    Возможно, вот это пригодится, но я сие не читал: http://hackipedia.org/browse.cgi/Co...l Reference Manual by Roland (1985-05-31).pdf

    Вот код вроде как правильного воспроизведения ноты:
    Код (ASM):
    1. include 'macro\proc16.inc'
    2.  
    3. MIDIPORT_DATA           = $0330
    4. MIDIPORT_COMMAND        = $0331
    5.  
    6.         org 100h
    7.  
    8. Start:
    9.         stdcall MIDI.Initialize
    10.  
    11.         ; Отправка MIDI-сообщения
    12.         ; Нота = $60, сила_нажатия = 127
    13.         stdcall MIDI._WriteData, $90
    14.         stdcall MIDI._WriteData, $60
    15.         stdcall MIDI._WriteData, $7F
    16.  
    17.         ; Ожидание нажатия клавиши
    18.         xor     ax, ax
    19.         int     16h
    20.         ret
    21.  
    22. proc MIDI._WriteCommand\
    23.      bValue
    24.  
    25.      mov        dx, MIDIPORT_COMMAND
    26. @@:
    27.      in         al, dx
    28.      test       al, $40
    29.      jnz        @B
    30.  
    31.      mov        ax, [bValue]
    32.      out        dx, al
    33.      ret
    34. endp
    35.  
    36. proc MIDI._WriteData\
    37.      bValue
    38.  
    39.      mov        dx, MIDIPORT_COMMAND
    40. @@:
    41.      in         al, dx
    42.      test       al, $40
    43.      jnz        @B
    44.  
    45.      mov        dx, MIDIPORT_DATA
    46.      mov        ax, [bValue]
    47.      out        dx, al
    48.      ret
    49. endp
    50.  
    51. proc MIDI.Initialize
    52.      stdcall    MIDI._WriteCommand, $FF
    53. .WaitAck:
    54.      mov        dx, MIDIPORT_COMMAND
    55. @@:
    56.      in         al, dx
    57.      test       al, $80
    58.      jnz        @B
    59.  
    60.      mov        dx, MIDIPORT_DATA
    61.      in         al, dx
    62.      cmp        al, $FE
    63.      jne        .WaitAck
    64.  
    65.      stdcall    MIDI._WriteCommand, $3F
    66.  
    67. .WaitAck2:
    68.      mov        dx, MIDIPORT_COMMAND
    69. @@:
    70.      in         al, dx
    71.      test       al, $80
    72.      jnz        @B
    73.  
    74.      mov        dx, MIDIPORT_DATA
    75.      in         al, dx
    76.      cmp        al, $FE
    77.      jne        .WaitAck2
    78.      ret
    79. endp
    --- Сообщение объединено, 16 июн 2020 ---
    Для воспроизведения нужно садиться на таймер (частота которого может меняться в зависимости от темпа, например) и выдавать в нужные моменты команды в порты MIDI.