Многие возможно сталкивались с такими программами кейген и знают что такое музыка из кейгенов. Кто не знает, милости прошу к ознакомлению.
Еще давно очень многих интересовал один вопрос: «Эта программа занимает всего 100 кб, что за музыку она воспроизводит? Как это работает?»
Так вот, называется это чудо – Трекерная музыка. И что самое главное – она занимает очень мало места, в отличие от .mp3 или .wav. В современных популярных ОС трекерные файлы (MOD, XM, S3M, IT и пр.) проигрываются большинством медиаплееров, например, Winamp, VLC, Amarok, Audacious и другими.
Скачать такую музыку можно, например отсюда — keygenmusic.net/, или отсюда www.modarchive.org/. Это отнюдь не единственные ресурсы, стоит только обратиться к поиску. 
Для того, чтобы воспроизвести такую музыку в своей программе, нам потребуется минимальное знание C++, а также minifmod, доступный в исходниках. Как заявляют разработчики, minifmod добавит всего 50 кб к вашему exe-файлу (без учета сжатия).
Итак, краткая теория закончилась, приступаем к программированию. Для наших тестов – скачиваем все необходимое отсюда www2.zippyshare.com/v/26128618/file.html (в архиве исходники тестового проекта, сам minifmod, один музыкальный файл, конвертер, и пр.) 
Этап 1. Нам необходимо заполучить композицию в формате *.xm либо* .mod (eсли у вас файл в формате *.mod – его необходимо перевести в формат .xm, воспользовавшись конвертором mod2xm) 
Этап 2. Затем открываем Table extractor, меню File – Load и указываем наш файл *.xm. Настройки будут следующие:
						 
					
				
			
						
							После нажатия на кнопку Go!, в папке с файлом .xm, появится файл Result.txt. Переименуйте его в music.h и замените файл \loadmusic\music.h. В этом файле наш музыкальный трек, который мы будем воспроизводить.
Этап 3. Создаем новый проект, и подключаем к нему всё, что лежит в lib и loadmusic. Будем выглядеть это примерно так:
						 
					
				
			
						
							Этап 4. Т.к. в проекте файлы в старом стиле “C”, то студия требует, чтобы были отключены Precompiled Header, для этого в свойствах проекта их отключаем (в Visual Studio -> свойства поекта -> C/C++ — Precompiled Headers — Not Using Precompiled Headers)
Этап 5. Самое главное – осталось только включить музыку и пусть играет ))) Исходный файл точки входа у меня получился следующий:
#include <iostream>
#include "loadmusic\loadmusic.h"
#include "lib\minifmod.h"
#define WIN32_LEAN_AND_MEAN // this will assume smaller exe
FMUSIC_MODULE *mod; // fmod music handler
using namespace std;
int main()
{
 cout << "Press 'p' to play music " << endl << "'s' to stop" << endl << "'e' to exit" << endl;
 char i('p');
 do
 {
 switch(i)
 {
 case 'p':
 if (mod == NULL) // mod handle is free? (thouh it will work fine with other loaded audio devices)
 {
 // We defined our music file to be loaded in LoadMusic.cpp //
 //=============================================================//
 loadmusic(); // Call & set ready memory to load the music
 if(!FSOUND_Init(44100, 0)) // intialize memory for sound
 {
 return 1;
 }
 mod = FMUSIC_LoadSong(NULL, NULL); // handle = LoadSong() 
 FMUSIC_PlaySong(mod); // Play it (from memory)
 }
 break;
 case 's':
 if (mod != NULL) // handle is loaded (playing)?
 {
 FMUSIC_FreeSong(mod); // Free memory (handle)
 FSOUND_Close(); // Close it (stop it from playing)
 mod=NULL; // make handle to be Free again
 }
 break;
 }
 cin >> i;
 }
 while(i != 'e');
 if (mod != NULL) // music is on?
 {
 FMUSIC_FreeSong(mod); // Free it from memory (the handle - "mod")
 FSOUND_Close(); // Close Music
 }
 return 0;
}
* This source code was highlighted with Source Code Highlighter.
						 
					
						
							По-умолчанию музыка начинает сразу же играть. Если ввести ‘s’ – то она прекращается, ‘e’ – выходим из программы.
Какой же размер файла получился?
Тестирование проводил на VS 2010 Express Edition. Я установил использование статической линковки, после чего получился exe размером 166 кб. Для того, чтобы уменьшить размер – сжимаем его с помощью upx, с максимальной степенью сжатия -9. После сжатия файла, на выходе – файл размером 84 кб, что довольно неплохо!
Оригинал статьи: http://habrahabr.ru/post/105475
Автор: Сергей Григорьев