Всем здравствуйте! Подскажите пожалуйста, как проще всего конвертировать файл MIDI в модуль с расширением .xm. Пробовал с помощью MID2XM, но почему-то ничего не получилось Посоветуйте какую-нибудь аналогичную прогу. И подскажите пожалуйста какие-нибудь ресурсы где можно почитать про работу со звуком в ассемблере. А то в книгах я такого не встречал. Спасибо.
В книгах надо встретить не "работу со звуком в ассемблере", а "работу с WinAPI в ассемблере" и "звук с помощью WinAPI". А в результате получить то, что нужно. Не помню, что там с midi, но скажем sndPlaySound из winmm.dll прекрасно проигрывает wav, если в ее параметре (ладно... в одном из ее параметров) передать содержимое звукового файла. Возможно понадобится сопровождающая функция sndStopSound из той же библиотеки или еще что-нибудь.
Я наверное не совсем понятно выразил мысль. Хотелось бы вставлять музыку прямо в прогу. Чтобы не таскать с собой еще кучу файлов (звуковых, библиотек и т.д.). Вот модули с расширением .xm просто и замечательно вставляются в код. Есть много прог, которые позволяют писать музыку сразу в формате .xm, но для этого надо хоть чуть-чуть иметь талант. Поскольку в написании музыки я полная бездарность, то мне желательно найти конвертер таких файлов из MIDI. Я нашел пару таких прог, но у меня они почему-то не работают.
Глянул я тут еще в экспорт mci32.ocx, который проигрывать midi умеет. Так там есть еще mciSendCommand из того же winmm.dll. Так вот, можно, наверное, послать комманду MCI_PLAY MIDI sequencer'у... А вообще, читайте MSDN по этой фукции. Там все есть. Встраивать в прогу? Ок. Я такого не делал, но тем не менее особой разницы не вижу, поэтому тот же способ должен прокатить. Может и не прокатит, но мое дело - предложить. Можно взять, хотя бы в Hex-редакторе, дописать в конец Вашего EXE этот wav, и читать строку символов из самого себя. А sndPlaySound принимает в качестве параметра именно эту строку символов. P.S. Я -- чайник и не знаю, что такое .xm, поэтому ничего другого предложить не могу.
l_inc, он тебе про одно, ты ему про другое Sturgeon, не парь себе мозг, качай xm'ки откуда угодно, слава богу сайтов полно
Avoidik Посмею не согласиться. Главная мысль вот в чем: Решение, которое предложил Sturgeon, то бишь встраивать модули .xm в код я не понимаю, но так как вопрос звучал более общим образом, а не только , то я предложил другое решение, которое (во-первых сам понимаю, а во-вторых ...) ... не менее соответствует предложенным условиям, а именно, повторяю: Что ж я неправильно понял? P.S. Это я просто в свою защиту.
Sturgeon midi тоже можно в экзешник встраивать и проигрывать прямо оттуда (без промежуточного сохранения во временный файл). Как это делать - не помню, т.к. уже давно midi не использую в своих... эээ... прогах. Полноценный конвертер midi2xm написать не реально. Видимо, существующие конвертеры просто перегоняют midi в pcm через синтезатор и сохраняют в xm по принципу wav2xm, но размер при этом получается огромный и никаких преимуществ перед обычным wav'ом такой xm не имеет.
l_inc В принципе я немного другое спрашивал, но то, что ты написал тоже интересно. Надо будет попробовать. Случайно нет каких-нибудь исходников, которые не жалко было бы мне на погляд выдать? Avoidik xm фалов полно везде. Но вот попробуй, например, найти xm "ACH, DU LIEBER AUGUSTIN" ...то-то и оно... Quantum А чем ты пользуешься, если не секрет? И, кстати, что насчет библиотеки ufmod? Кто нибудь ей пользуется? Расскажите как впечатления.
дада юзай уфмод.. а насчет перегона миди2хм непарься скочай ченить готовое.. ну а хочеш эксклюзив - закажи какому-нибудь трэкерщеку =)
Sturgeon Извини. Любую высокоуровневую программку, не требующую защиты (от переполнения буфера, от реверсинга и т.п.) и оптимизации (то бишь написанную чисто для себя), ИМХО лучше всего писать на VB6: максимум удобства, много знать не надо, а прога готова через 5 мин. Поэтому я работал со звуком ("in reg, 61h", "out 43h, reg" и подобные не считаются ) исключительно в комфортных объятиях VB6. Если тебя устроит, могу привести.
Sturgeon xm, в основном. На офф. сайте сейчас счётчик показывает 2119 скачиваний. Многие пользуются, наверно. Естественно, я тоже uFMOD юзаю
Quantum Дык... Я ж в первом посте и спрашивал как миди конвертировать в xm Ну вроде разобрался сам . Скачал Modplug Tracker. Если есть какая-нибудь еще инфа по конвертированию в xm, скинь, пожалуйста. Вроде как особо продвинутые челы вообще руками конвертируют l_inc Спасибо. Но я пытаюсь исключительно на асме писать проги. Хотя... в целях самообразования... Если не жалко ввыложи, буду благодарен
Sturgeon Modplug Tracker умеет конвертировать IT, MOD, S3M и какие-то другие форматы в XM, без особо заметных изьянов. MXM в XM конвертируется соответствующей утилитой MXM2XM. Все остальные форматы в XM, если и конвертируются, то с большими потерями в размере и качестве. Возможно, они руками вырезают мусор из сконвертированного файла, но для этого лучше использовать утилиту XMStrip, которая входит в пакет uFMOD. Кстати, в следующей версии XMStrip будет на порядок круче! Возвращаясь к теме midi2xm, не думаю, что такой конвертер вообще имеет смысл. Во-первых, инструменты в midi хранятся не в файле, а в синтезаторе, в отличии от xm, который таскает инструменты "с собой". Поместить все стандартные Midi-инструменты в xm-файл сделает его очень большим. Во-вторых, xm позволяет проигрывать сразу несколько каналов, что даёт возможность комбинировать различные эффекты для создания уникальных звуковых дорожек. В midi обычно используется только 1 канал и эффектов там практически нет. Поэтому даже качественный конвертер midi2xm выдаст огромный файл, который будет звучать... как обычный midi. И это в самом лучшем случае!
Quantum Жаль Хотя не очень. xm много всяких прикольных. И про uFMOD пару вопросов. Все мои ковыряния с xm форматом начались когда я скачал крякми с прикольной музычкой. В комплекте к нему были исходники. И товарищ использовал не uFMOD, а библиотеку mfmplayer.lib. И вот возникли вопросы. На мой взгляд mfmplayer.lib использовать проще, чем uFMOD. Или это только дело практики? И какие преимущества у uFMOD перед mfmplayer.lib? А вот ссылка на тот крякмис. Размер 31 кб. Исходники прилагаются. http://www.crackmes.de/users/mucki/crackme2/
Sturgeon Вот небольшая демонстрация. Хотя ради самообразования MSDN даст то же самое по sndPlaySound и более подробно.
Sturgeon В mfmplayer есть один опасный баг, который связан с вызовом SuspendThread. Детально я эту либу не изучал, но и одного бага такой величины достаточно, imho. Если приостановить проигрывание (pause), а потом остановить полностью (stop), есть шанс наглухо повесить приложение. Про minifmod тоже можно несколько интересных багов рассказать - крупных и мелких. Зато в uFMOD баги, если и появляются - мы их оперативно фиксим. Ну, мне трудно представить себе более простую API, чем uFMOD. Чтобы начать проигрывать файл или ресурс или статический массив достаточно вызвать одну единственную функцию. Для остановки тоже используется всего лишь одна функция. Кстати, сам Four-F предложил когда-то такой вариант API, как самый простой в использовании. В mfm вызовов функций больше (кажется, 2 для начала проигрывания и 2 для полного освобождения ресурса, но точно не помню уже). Во-первых, качество звучания. Во-вторых, размер и скорость. И ещё в uFMOD есть куча дополнительных фич: Поддержка DirectSound. Поддержка различных частот дискретизации (22050, 44100 и 48000). Поддержка xm'ов пожатых в формате ADPCM. Поддержка проигрывания без зацикливания. Бесшумный контроль громкости. Различные информативные функции (название композиции, логарифмические индикаторы уровня громкости по каналам для визуализаций в стиле VU meter и т.д.) Полная независимость от стандартной сишной либы. Полная совместимость с Linux и другими *никсами. Куча примеров под различные компиляторы: masm, tasm, nasm, fasm, Visual C, Visual Basic, Delphi, Borland C++ Builder, PureBasic, BlitzMax, FreeBASIC, GCC, Tcl/Tk, GAS. Подробная документация на 3х языках И т.д.