Главная arrow Лаборатория arrow Лаборатория кода arrow Воспроизведение mp3 из exe без компонент  
03.09.2010
Главное меню
Главная
Лаборатория
Книги по дельфи
Инструменты
Статьи
Видео
Юмор
Поиск
Новости
Лента новостей
Новости Delphi
Новости проекта
Новости инструментов
Разные новости
База знаний Delphi
Общие вопросы
Windows, WinAPI
Графика, Звук
IDE Delphi
Консоль
Каталог@Mail.ru - каталог ресурсов интернет
комментарии
Воспроизведение mp3 из exe без компонент Версия для печати
Рейтинг: / 39
ХудшаяЛучшая 
Лаборатория кода
Написал Snowy   
05.05.2007
Как добавить в свою программу звук? Но не просто добавить, а сделать так, чтобы он играл не из какого-то файла, а был вшит в exe! И не просто звук, а чтобы это ещё и не сильно увеличивало размер программы!
Про трекерную музыку рассказано здесь. Сейчас поговорим об mp3.
Итак, наша задача засунуть mp3 в нашу программу и заставить его воспроизводиться по комманде. Для этого нам, разумеется, понадобится сам файл.
Для тех кто не знает, как добавить его в ресурсы своей программы:
  • Создаем текстовый файл с именем sounds.rc
  • Прописываем в него наши файлы. Каждый файл в ресурсах = 1 строке. Пример содержимого файла:
     
    SND1   WAVE  1.wav
    SND2   WAVE  Bum.wav
    SND3   WAVE  Crazy.wav
    Первое слово - имя, которое мы будем указывать в программе.
    Второе - тип ресурса = wav файл
    Третье - имя файла
  • сохраняем файл.
  • Компилим его из коммандной строки: brcc32 sounds.rc
  • В результате получаем откомпиленный файл - sounds.res.
Второй этап:
В программе подключаем этот файл:
{$R sounds.res}
Теперь для воспроизведения звука нужно дать комманду:
PlaySound('SND1', 0, SND_RESOURCE or SND_ASYNC);
, где первым параметром - имя, назначенное нами файлу в файле ресурсов

Предчувствую Ваше справедливое возмущение: "Как же так? Нам обещали mp3!"
Третий этап:
Открываем меню Пуск -> Программы -> стандартные -> Развлечения
Запускаем "Звукозапись". У кого нет, можно доустановить через установку/удаление программ или воспользоваться другой программой подобного рода.
Открываем наш wav файл: Меню -> Файл -> открыть.
Теперь превратим его в mp3: Меню -> Файл -> Свойства Нажимаем кнопку "Конвертировать".
Выбираем формат MP3 и нужное нам качество воспроизведения.
Сохраняем: Меню -> Файл -> Сохранить.
Все. Теперь внутри нашего wav файлика реально сидит MP3, который без проблем воспроизводится через PlaySound при наличии в системе установленного MP3 кодека. А данный кодек установлен во всех Windows >= 2000 по умолчанию. В более ранние как правило попадает вместе с другими программами или наборами кодеков.

Готовый пример проекта можете взять тут (69кб)
опубликовано
Добавить новыйПоиск
Snowy   2008-02-23 02:20:32
Воспроизведение идёт в асинхронном режиме.
О каком подвисании речь?
Tesla     2008-02-24 16:32:29
Сам попробуй это сделать на форме и посмотришь
Snowy   2008-02-26 20:49:13
SND_ASYNC - нет никакого подвисания, ни на форме, ни без неё.
Что касается программы - примера, то там нет SND_ASYNC специально - чтобы программа завершалась по окончании проигрывания звука.
Без этого флага да - подвисание будет.
Tesla - Сори     2008-03-05 00:15:39
Хм, не знал :confused: , спс, что сказали, с меня пиво ;)
CODER   2008-03-11 09:44:03
При чем тут формат MP3?
Snowy   2008-03-14 12:53:08
При том, что производится сжатие в mp3
Alexius   2008-05-04 18:12:27
Слушай отлично придумано. Я буду юзать этот исходник теперь каждый раз при составлении мультемедиа программы. Спс :!:
Jomla   2008-05-23 04:39:03
Я так и не понял КАКОЙ ПАРОЛЬ? Кругом одно КИДАЛОВО.
Snowy   2008-05-23 15:28:01
Ну что тут ответить...
Просто нет слов.
Ну зачем тебе пароль? Ты ж даже читать не умеешь.
Анонимно   2008-08-28 16:38:07
ах вот это новость )))) RIFF-стандарт ещё в windows 3.1 придумали, и в нём может хранится любое медиа, и оно будет "родное" для винды :whistle:
чем-то похоже на оле-контейнер
Snowy   2008-08-28 23:35:59
Именно. AVI аналогично. Но про ави все знают, а вот про wav нет...
Sneg0k   2008-09-13 12:49:49
Молодец Снови! Отличный ресурс!
navado   2010-02-18 16:24:39
народ, как запустить звук ясно. А как звук остановить? Например, когда закрываешь форму?
Snowy   2010-02-19 15:59:35
PlaySound('SND1', 0, SND_PURGE); остановит SND1.
PlaySound(nil, 0, SND_PURGE); остановит все звуки.
Andrey   2010-04-11 11:37:40
А как заставить файл воспроизводить циклично? (повторять после завершения)
Andrey   2010-04-11 11:42:42
Ага, нашел - флаг SND_LOOP
Роман   2010-06-15 18:47:04
Не понял. Ведь файл ресурсов уже скомпилирован, в него уже запихана песня. Смысл исходную песню конвертировать?
И ещё, функция playSound не читает mp3,
даже если расширение на wav поменять.
Дмирий   2010-07-15 00:57:05
А при чем тут MP3, когда вы описываете как WAV подключать в ресурс?
Snowy   2010-07-15 10:17:33
WAV здесь всего лишь контейнер, внутри которого находится mp3.
WAV - такой же RIFF контейнер, как и avi.
Ни у кого же не вызывает удивления, что видеофайл сжат в mp4, хотя расширение у него avi, а не mp4.
C wav то же самое. Как и в avi там можно хранить несжатые данные, а можно сжатые.
Переименование mp3 в wav тут ничего не даст - это ж другой формат. Нужно просто пережать внутренности wav файла
Как это сделать - в тексте описано.
А в примере есть wav файлик. Если открыть его свойства, то мы увидим, что внутри wav там mp3.
SSS   2010-08-30 09:41:29
А нет ли ограничения на размер ресурса в EXE-шнике?
3-5 Мб файлик скушает?
Пару лет назад я пытался большой WAV в ресурс засунуть - не получилось.
Snowy   2010-09-02 06:57:55
3-5Мб скушает без проблем.
А вот 3-5Гб ни в коем разе. 32-битный ехе не может быть больше 2Гб.
Добавить комментарий
Имя:
Веб-сайт:
Заголовок:
UBB-Код:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Security Image
Пожалуйста, введите проверочный код, который Вы видите на картинке.
 
< Пред.