Мелодичный Паскаль

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Аватара пользователя
Aleximus
Сообщения: 2
Зарегистрирован: 13 июн 2007, 09:31
Контактная информация:

15 июн 2007, 09:17

Есть задумка (почти воплощена) сделать так сказать "плеер" на спикере. Кодируется определенным образом файл, в котором определенная музыка. Вообщем музыка проигрывается (противно пиликает как говорит мама :p ). Возможно ли написать драйвер который воспроизводил музыку в фоновом режиме. т.е. Запустил в начале программы StartMidi(FileName), а в конце StopMidi. Или мне в Закладку "Ассемблер" дорога?
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

15 июн 2007, 11:16

нет ничего невозможного, но идея обломная поскольку у спикера всего 8 голосов (могу ошибаться ибо не помню) и проиграть нормально мелодию он не сможет.
Аватара пользователя
Aleximus
Сообщения: 2
Зарегистрирован: 13 июн 2007, 09:31
Контактная информация:

15 июн 2007, 12:01

А никто Баха, копировать не собирается. Хотяб чижика :) А где мона найти доки по этому вопросу, или уже готовый модуль?. Я в Ассемблере немного разбераюсь (не проблемма), могу и на нем. Просто не догоню как. Есть варианты: Ризидент или тупа после каждого блока действий писать типа "NextPlay" (соответсвенно процедура какая-нить).
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

15 июн 2007, 15:13

Aleximus писал(а):А никто Баха, копировать не собирается. Хотяб чижика :) А где мона найти доки по этому вопросу, или уже готовый модуль?. Я в Ассемблере немного разбераюсь (не проблемма), могу и на нем. Просто не догоню как. Есть варианты: Ризидент или тупа после каждого блока действий писать типа "NextPlay" (соответсвенно процедура какая-нить).
У меня есть (точнее - был, но полагаю, смогу найти) резидент в исходниках (еще с DOS-овских времен.. года, наверное, 1990-1991), который на PC-спикере "Лабмаду" играет :)
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

21 июн 2007, 09:51

Звук спикера управляется всего одним битом - это значит что с точки зрения акустики тип выдаваемой им волны - "меандр" или т.н. прямоугольная волна. Но т.к. мембрана динамика не может за очень малую единицу времени переместится из одной точки в другую, то волна сглаживается и имеет вид, похожий на Sin^2(x), порождая дополнительные, кратные основной, частоты, но меньшей амплитуды. Учитывая то, что при изменении бита мембрана стремится вернутся в исходное положение (она имеет ускорение) можно произвести на свет волну, напоминающую ту, которая получается в радиоприемнике при детектировании. Или т.с. модуляцию. Т.е. идея такова, что если допустим на динамик подан 0, то при подаче единицы он начнет "разгонятся", и чем дольше он будет разгонятся, тем выше получится амплитуда звучания. Затем если подать снова 0, он стремится в обратное положение - образуя таким образом параболический пик определенной амплитуды. Если каждый раз ждать разгона во время подачи 1-цы разное время, получаем пики разной амплитуды. Время ожидания разгона(А) и спада(B) должны быть одинаковы. Производить эти пики нужно через определенное время (Т) - период дискретизации. Тогда с успехом можно играть через спикер файлы PCM формата. Да даже и MP3 - если найдете декодер. После образования пика нужно ждать дискретизации (С). Очевидно, что
А+В+С = T
Если Т < 1/20000 сек. получим чистое звучание, без помех, т.к. не услышим модулирующей частоты. Вполне достойные по качеству результаты получаются при T = 1/16000 сек, при котором модуляция происходит при частоте 16кГц.
В свое время в школе у нас стояли 386 компы. Я тогда писал эту прогу на ASM, но потом перевел в Pascal - в итоге любой песняк можно было слушать через спикер даже 386SX-40 Mhz процессорах. Если интересно могу привести код.
В то время существовали даже дрова под Win95 для спикера, как для звукового устройства. Была утила еще pwave.exe входящая в состав Norton Commander если кто помнит. По-сему не только Баха, но даже сраную попсу закодить можно, надо только подумать, как волну сгенерить.
It's a long way to the top if you wanna rock'n'roll
Ответить