| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для Windows/Dos > Music in DOS |
| Автор: xach 4.7.2005, 03:57 |
| Привет Друзья! Как на счёт звука (пусть даже самого простейшего) на АСМе. Можно ссылочку, но пожалуйста на русском, а то английский слишком утомительным получается. Я имею ввиду чистый код, без всяких DLL и модулей. |
| Автор: Akina 4.7.2005, 10:24 | ||
В ДОсе?
Проще уж просто некуда... |
| Автор: xach 5.7.2005, 01:44 |
| Я имею ввиду хотя б простую мелодию выдать. Не обязательно из Спикера... |
| Автор: oleg1973 5.7.2005, 10:50 |
| xach если не на спикер то значит на звуковуху если на звуковуху то нада знать модель, так как в досе HAL нету и подход персональный к каждой карте кстати в инете куча сорцов о програмировании SB16-32 НО современные SB1024 и позже нихренам не совместимы, сам проверял, и прямому програмирования из доса не поддаются за неимением документации |
| Автор: xach 6.7.2005, 01:03 |
| Раз всё так ужасно... Как на счёт спикера тогда уж... Возможно ли извлечь из него мелодию, которая бы не раздражала уши? Тогда уж подскажите про спикер (там уж всё просто должно быть (я так думаю))! Именно мелодию, а не beep. |
| Автор: monax 14.7.2005, 21:03 | ||||
| Раньше никогда этим не занимался, но стало интересно и вот... Программа играет (точнее имитирует) "-Чижик Пыжик, где ты был? -На Фонтанке водку пил" Информация о динамике взята http://podgoretsky.com/ftp/Docs/Asm/AsmBradly/8/8-2.html
Вот как это выглядит на С++
Вся идея довольно проста: зная частоту ноты и её длительность в мелодии, можно сделать некое подобие музыки. Ассемблерный код компилировал 5-м тасмом, с++ - BC 3.1. |
| Автор: Mayk 14.7.2005, 21:10 |
| В игре Doom2D использовался спикер для воспроизведения голосовых сообщений. Качество, как у плохого телефона, но всё же. Как они это делают? |
| Автор: oleg1973 15.7.2005, 15:53 |
| ну так никто не запрешает через спикер прогнать wav толко нада сначала сделать его как бы однобитным имхо тоесть там в порту спикера за звук если не путаю 1 бит только отвечает |
| Автор: xach 16.7.2005, 00:19 |
| Со спикером я воспринял)... т.е. ещё не попробовал, но обязательно сдеалаю это Вот увидел програмку в 111 байт с 0a000h (это party). Там звук выдаётся (по заверению автора) через 220h порт... Хотя при дизассемблировании я увидел передачу в 226h и в 22ch порты...(если ошибся извините))) Просто скопировал часть кода в Фасм, а звука нет (уверен, что скопировал не то(или не всё) => не пишите, что я не то скопировал))) Лучше помогите разобраться с кодом))).. (под XP не работает(может можно через эмулятор какой-нибудь)) |
| Автор: chyapay 18.8.2006, 17:24 |
| Чувак, я так понял, ты наше какую-то дребедень про СаундБластер. Я тоже когда-то этим страдал. это старый хороший стандарт звуковых плат с портами 220h(227h, 22Fh) для восьмибитных и шестнадцатибитных Само собой, эта штука на новых звуковых проконает разве что из-под винды, которая спецыально эмулирует для досовских приложений этот интерфейс. Но и это - при большом везении. И я уверен, что ты правильно скопировал эту хрень, но, к сожалению, играть она будет разве что на старом 386 динозавре с ИСАшной звуковой. В данном случае я могу порекоммендовать только одно : ищи в интернете документацию под свою звуковуху, они обычно в формате ПДФ, типа AC97AudioController-specs.pdf, линков пока никаких дать не могу: сам этим делом страдаю, пока еще нифига не нашел. |
| Автор: 10110111 29.8.2006, 13:51 |
| Спецификация на AC97 - не проблема: http://www.intel.com/design/chipsets/audio/ac97r22.pdf В DDK есть даже пример WDM-драйвера. Проблема вот в чем: когда я под DOS пытаюсь читать из пространства I/O Mixer'а, проц зависает; но на этом же компе Windows ME без проблем воспроизводит звук. Я уже думал, может, под DOS AC97 выключен, но отключение APM не дало никакого результата. Может, кто-нибудь знает, почему такое может быть? |
| Автор: 10110111 30.10.2006, 21:38 | ||
| Я написал прогу, выводящую WAVы через спикер: по знаку выборки из WAV'а Вызывается так: <prgname> [[Path\]Filename.wav] Если параметров нет, она их запрашивает. Вот её код(извините, что без комментов - надеюсь, принцип действия очевиден. Если у без них не понятно, скажите - я поясню):
Да, компилил я её с помощью FASM 1.65 |
| Автор: xach 28.12.2007, 23:06 |
| 10110111 волшебная программа! теперь вопросы: - как происходит временная синхронизация? (я в коде узрел rdtsc, подозреваю что с помощью неё, но подробности не помешают!) - какой код отвечает за установку и сброс спикера? (и про инициализацию его тоже оч интересно) заранее мерси! |
| Автор: SABROG 29.12.2007, 00:17 |
| Помню была у меня такая прога, работала только в досе, а жаль, вот бы юзер обкакался запустив какой-нибудь кейген в винде ;) |
| Автор: xach 30.12.2007, 04:35 |
| итак, со спикером я разобрался, а вот с синхронизацией - нет. очень бы хотелось повесить перезагрузку 2-го таймера на прерывание, а как это сделать гугл не говорит...возможен, конечно следующий вариант: зная период 0-го таймера (18 с чем-то герц (при надобности легко узнать точное значение)) замерить его в тактах процессора (rdtsc) а потом ориентироваться чисто на rdtsc. получается точно, но не элегантно: прога постоянно зациклена и опрашивает tsc. В варианте же с прерыванием точность почти 100%, а затраты процессорного времени - минимальны (такую прогу можно даже резидентной сделать). З.Ы. всё, естественно под чистый dos. |
| Автор: xach 30.12.2007, 04:52 |
| кстати, таймеров-то 3, а прерывание - одно...тоже не оч понятно... |