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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Мелодичный Паскаль

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

somewhere » 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 если кто помнит. По-сему не только Баха, но даже сраную попсу закодить можно, надо только подумать, как волну сгенерить.

Лом-баба!

BBB » 15 июн 2007, 15:13

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

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

Aleximus » 15 июн 2007, 12:01

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

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

Duncon » 15 июн 2007, 11:16

нет ничего невозможного, но идея обломная поскольку у спикера всего 8 голосов (могу ошибаться ибо не помню) и проиграть нормально мелодию он не сможет.

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

Aleximus » 15 июн 2007, 09:17

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

Вернуться к началу