Главная arrow Лаборатория arrow Воспроизведение mp3 из exe без компонент  
10.02.2012
Главное меню
Главная
Лаборатория
Книги по дельфи
Инструменты
Статьи
Видео
Юмор
Ссылки
Поиск
База знаний Delphi
Общие вопросы
Windows, WinAPI
Графика, Звук
IDE Delphi
Консоль
Авторизация





Забыли пароль?
Вы не зарегистрированы. Регистрация
Каталог@Mail.ru - каталог ресурсов интернет
Воспроизведение mp3 из exe без компонент Версия для печати
Рейтинг: / 55
ХудшаяЛучшая 
Лаборатория кода
Написал 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кб)
Добавить новыйПоиск
[ все камменты ] [---- 1 ----] [ 2 ]
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Гб.
AndA   2010-09-06 11:36:44
Благодарен за пример!!! :)
Радиохулиган - ну-ну   2010-09-22 16:45:16
Ключевая фраза статьи:
"... при наличии в системе установленного MP3 кодека".
А кодек может быть кривой или его может не быть вовсе. Скажем, в свежеустановленной XP его нет.
Берите уж BASS.dll, загоняйте её в свой exe-шник dll-loader'ом, mp3 - в ресурс и звучите надёжно. Да ещё и с морем всяких возможностей.
Snowy   2010-09-23 16:21:21
Найти винду без mp3 кодека - проблемматично...
Ставил недавно XP SP3 - есть там кодек.
vovapd   2010-12-19 09:41:50
чтобы музыку остановить надо в OnClose
RostislavHohlov - отзыв на этот пост   2011-02-11 07:30:36
inteco.ua - лучший металлопрофиль в Киеве
Алексей   2011-03-02 18:53:53
:0 Чёто вообще не то, когда компилировать нада в цмд пишу brcc32 sounds.rc он выдает ошибку, было бы круто создать видео! Мало времени что-ли?
Алексей   2011-03-02 19:19:16
У меня делфи выдает ошибку "Error Could not open input file sounds.rc" что делать? :(
Snowy   2011-03-02 21:35:59
Значит ты не создал файл sounds.rc
или сохранил, но не туда
или расширение у него не rc
Попробуй взять файл из примера и изменяй его
Алексей   2011-03-02 22:01:51
Ага :) поработал с вашим файлом) спасибо огромное, ну всё таки не понятно как пере компилировать) один фиг ошибку выдает :( Ещё бы было бы круто если бы вы сделали видео, цены бы не было вам :) Спасибо
whiledo   2011-05-17 12:27:56
на Delphi7 выдает ошибку в строке
PlaySound('SND1', 0, SND_RESOURCE or SND_ASYNC);

[Error] Unit1.pas(29): Undeclared identifier: 'PlaySound'
[Error] Unit1.pas(29): Undeclared identifier: 'SND_RESOURCE'
[Error] Unit1.pas(29): Undeclared identifier: 'SND_ASYNC'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
whiledo   2011-05-17 12:32:41
нада добавить MMSystem

(пример не посмотрел сразу)
ntv   2011-06-04 11:34:22
Добрый день.
Подскажите решение задачи.
Внешний девайс по USB передает цифровой контент (оцифрованный адуосигнал в реальном времени в формате МР3). Я умею по USB на стороне ПК принять указанный контент - последовательность байтов (некий буфер). Теперь мне надо на стороне ПК эту последовательность байтов воспроизвести. Я не знаю - что с этой последовательностью байтов делать - сохранять ли в какой-то временный файл или что-то еще, чтобы воспользоваться функцией PlaySound.

Возможно и не так надо делать, и совсем другой функцией. Кто что либо знает - подскажите. Можно через почту ntv1978@mail.ru
Виктор   2011-09-03 02:35:15
А как вот это сделать Компилим его из коммандной строки: brcc32 sounds.rc вот это как сделать?
klemsa - re:   2011-09-08 09:04:43
Виктор написано:
А как вот это сделать Компилим его из коммандной строки: brcc32 sounds.rc вот это как сделать?


Сохраняешь к примеру свои файлы (sounds.rc и WAVы) в папочку "1" на диске С:
через командную строку заходишь туда (cd c:\1) и набираешь brcc32 sounds.rc
Димон   2011-11-06 14:53:19
Твоюж мать или я тупой или не канает! Заманало! Пишет
[Error] File C:\Users\Raphael\Desktop\s\sound.RES resource kept; file C:\Users\Raphael\Desktop\s\sound.RES resource discarded.
Димон   2011-11-06 15:45:59
Прошу прощения, я сам ступил :confused:
Costas   2011-12-01 12:13:40
Ладно, Димон, прощаем.
комментарии
Имя:
Заголовок:
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
Пожалуйста, введите проверочный код, который Вы видите на картинке.
 
< Пред.