Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2012, 23:15   #1
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
Подмигивание PC Speaker и midi(mod)

Доброго времени суток!
И сразу к делу!
Стоит задача вывести многоголосую midi через спикер (сделать велосипед).
Проблема не в том, чтобы разобрать Midi файл.
Суть проблемы
Как мне известно, midi формат состоит условно из треков, в которых хранится нота и её длительность примерно! вообщем не это главное.
Мне не понятно
как проиграть два разных звука в одно время?
Суммирование волн и тд и тп? мне не совсем понятно в что это даст!
Ибо мне не известна амплитуда, и тд и тп.
Известна только частота (то есть сама нота).
Да и собственно и собственно и работа со спикером подразумевает передачи ему частоты и длительности , если брать Делфи(или есть то что я не знаю?)!
Ну думаю суть понятна!
Нужен какой-нить алгоритм или просто обьяснение!
Всем спасибо!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303

Последний раз редактировалось Hacker19_90; 12.04.2012 в 23:17.
Hacker19_90 вне форума Ответить с цитированием
Старый 12.04.2012, 23:28   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Использовать BASS уже не круто?
Человек_Борща вне форума Ответить с цитированием
Старый 12.04.2012, 23:29   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

эм... Bass со спикером работает?
Помоему нет!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 13.04.2012, 08:29   #4
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Немного не то, но некоторые вопросы затрагивает: http://habrahabr.ru/post/100581/#habracut
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 13.04.2012, 18:01   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Скажу сразу: идея изначально дохлая.
Майкрософт еще в 3-й версии 16-разрядной Windows пытались включить в дистрибутив драйвер для PC-спикера (исключительно потому, что практически ни у кого тогда не было колонок), но быстро отказались от этой идеи ввиду неудовлетворительного качества звука.
Причины этой "неудовлетворительности" две:
1. Малый динамический диапазон, связанный с однобитностью PC-спикера.
2. Серьезные искажения интервалов времени из-за многозадачности системы.

Теперь подробнее.

Сам РС-спикер подключен к выходу логического элемента, объединяющего сигнал с таймера (аналог микросхемы Intel 8253) и порта ввода/вывода (аналог Intel 8255). Поэтому PC-спикером можно управлять двумя способами:
- задать 53 таймеру частоту, которую он будет генерировать и включать или выключать звук через 55 порт.
- остановить таймер и с нужной частотой менять сигнал на выходе 55 порта.
Первый способ реализован в BEEP и ее многочисленных аналогах. Процессор при этом свободен, т.к. звук генерит таймер, но возможна генерация единственной частоты. Для генерации всего остального (нескольких нот одновременно, произвольного звука и пр.) этот способ не подходит.
Во втором способе процессор должен сам переключать состояние порта, при этом с высокой точностью выдерживая временные интервалы. Увы, в многозадачной ОС это невозможно, т.к. прикладная программа (упрвляющая спикером) может быть в любой момент прервана для выполнения другой прикладной задачи либо для системных нужд. А любое отклонение длительности от требуемой вносит большие искажения.
Ну и с динамикой не все в порядке т.к. при однобитном воспроизведении единственный способ достичь желаемого - дельта-модуляция. А при ней в самом лучшем случае (а лучший случай - когда мы заранее ограничиваем максимальное количество звучащих одновременно нот) доля излучаемой звуковой энергии, приходящейся на каждую ноту, уменьшается пропорционально квадрату количества нот.

Последний раз редактировалось s-andriano; 13.04.2012 в 18:04.
s-andriano вне форума Ответить с цитированием
Старый 17.04.2012, 09:27   #6
fabuvic
Новичок
Джуниор
 
Регистрация: 17.04.2012
Сообщений: 3
По умолчанию

Вы говорите о старом PC-спикера? Серьезно?
fabuvic вне форума Ответить с цитированием
Старый 17.04.2012, 11:00   #7
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Уже обсуждалось здесь http://www.programmersforum.ru/showthread.php?t=184663

Последний раз редактировалось Aliens_wolfs; 17.04.2012 в 11:37.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проигрывание MIDI мелодии через Speaker IvaD Мультимедиа в Delphi 2 23.01.2012 12:01
pc speaker IceBreaker Общие вопросы C/C++ 8 27.01.2011 18:44
Программирование MIDI-контроллёров. Или работа со звуком (.midi). sergeyrudnev Помощь студентам 0 16.06.2010 19:19