midi2speaker

Jul 21, 2009 05:23

Ещё будучи курсе на 2м-3м развлекался с писком на системный динамик. В далёкие DOS/Win9X времена его позволяли программировать "напрямую", однако в NT системах лавочку прикрыли. Потому остаётся либо использовать костыли типа giveio.sys чтобы работал старый софт, либо довольствоваться единственной API функцией Beep, которая на пару со Sleep позволяет играть простейшие мелодии. Конечно, способу до многоголосой полифонии далеко, "прямой" способ давал больше контроля над проигрыванием, однако, на безрыбье и этого хватит :) Собственно, пищать несложно, вся сложность - а где взять мелодии. Ну конечно же в интернете, благо midi рингтонов просто завались. Пару лет назад даже выкладывал на wasm.ru PoC кода с захардкоденным гимном РФ. Однако, конвертировать это дело руками и перекомпилировать ради каждой мелодии - некузяво. Потому, решил наваять простенький плеер midi на pc speaker. Разумеется, честно и красиво всё делать мне лень, потому фактически обойдусь быдлокодом, ибо разбираться в дебрях формата midi влом, да и для демонстрации возможности хватит и этого. Собственно, бинарник поделки здесь (аж 2 Кб, без лишних зависимостей, не обессудьте, на .net не пишу), исходники здесь (проект собирался VC6.0, в новомодных VS 2005+ от рантайма фиг отвяжешься). Теперь пару слов про мелодии. Мелодии нужны строго с одним голосом, ибо "многоголосую" моим примитивным парсером не одолеешь, да и проиграть 2 голоса на спикер вряд ли выйдет. Естественно, найденные в инете мелодии без конвертации не подойдут. Для конвертации использовал PsmPlayer 5.0, ну и по идее любой нормальный редактор midi также сгодится. Для тех кому лень самому конвертить, небольшой пак сконвертированных мелодий (преимущественно саунды из консольных игр/всякая попса). Теперь о косяках. Часть мелодий проигрываются неправильно, точнее почти во всех есть хотя бы небольшие косяки. Ибо пародия на парсер не учитывает тонкости формата, и не выстраивает правильную очерёдность событий. К тому же в ряде треков проблемы со скоростью, ибо множитель подбирал опытным путём, да и с делителем видимо есть какие-то подводные камни. Про то, что не обрабатываются всякие команды типа "увеличить/уменьшить темп"/"сменить инструмент" и прочие - молчу. Так что не без косяков, но на N-ом количестве мелодий более менее работает. Да, часть мелодий содержит очень большие паузы (по 20-40 секунд), потому как обходное решение вырезаются все паузы/ноты, которые дольше 5 сек. Вообщем, лучше один раз услышать, чем 100 раз прочитать. Да, кстати, за быдлокод в грязном C-style извиняюсь, но программер из мну в этом плане никудышний. Главное - работает :) Ну и не удивляйтесь тишине - pc speaker сейчас есть не на всех компьютерах, например у меня на ноуте он эмулируется и вывод звук через динамики/наушники. Соответсвенно, в моём случае, звук с него даже можно записать, выбрав запись с устройства "Стерео микшер". Однако, я слышал что вроде как сейчас в компы в лучшем случае ставят простейший бипер, который пикает только одной частотой, потому владельцам таких агрегатов про музыку без колонок/наушников/звуковой карты придётся забыть.

з.ы. Решил проверить обосрётся ли какая-нибудь из поделок под названием "антивирус" и заорёт на столь нетипичный по современным меркам размер exe-файла. И таки один из них обосрался (proofpic). Файл ессно безвредный.

midi, fun, pc-speaker, my_soft

Previous post Next post
Up