Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 143

/ вопрос решён /

Здравствуйте!
Эх, почти закончил программу, но осталось сделать последний шаг, который для меня пока что нереальным является! Поэтому и снова обращаюсь к вам... Мне нужно добавить mp3 файл в экзешник проги! Мне говорили - что с помощью ресурсов можно сделать - но сколько инфы я не перечитал - ничего не понял! Я даже с принципом работы не разобрался... получается как - при запуски проги mp3 файл из ресурсов копируется куда-то в глубокий темп, если на него сослаться - он воспроизводится - а по закрытии проги автоматически удаляется, так? Ну вот и все, впринципе, как добавить mp3 файл в ресурсы или куда-то еще, но чтобы небыло его на жестком... может где-то есть статья, как это сделать, написанная для гиперчайников, как я, или кому-то объяснить не лень будет! Был бы не то, что бы очень признателен - а гипер признателен! Спасибо)

Вечперик Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Вечперик (статус: Посетитель)
Вопрос отправлен: 30 ноября 2008, 11:42
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Аксион

Здравствуйте, Вечперик!
Сначала кидаем mp3 на диск с (для быстрого доступа) обзываем его например: music.mp3
Создаем файл music.RC и в него записываем: music music "music.mp3" сохраняем.
Входим в командную строку (cmd) и пишем команду: brcc32 C:\music.RC
На диске с появится файл music.res с запакованым в нём music.mp3, осталось его только подключить и использовать...
Распаковать этот mp3 пишем процедуру:

 procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res : TResourceStream;
Begin
Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
 end;

И собственно воспроизведение:
 ExtractRes('music', 'music', 'music.mp3');
 with MediaPlayer1 do
begin
  FileName:='music.mp3';
 Open;
   Play
   end;
Т.e. сначало файл распаковывается в папку с exe, а потом воспроизводится...при выходе из проги его можно удалить...
П.с. еще файл ресурса надо подключить, вписав строку {$R music.res} под строкой {$R *.dfm}...

Удачи, надеюсь все написал правильно...ибо со звуком давно не работал...если что то не получится, пишите на мф....

(редактировалось 1 раз)

Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 30 ноября 2008, 12:18
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Ученый

Здравствуйте, Вечперик! Создаете music.RC, точно так как вам сказал Блазер, только писать надо music WAV music.mp3. Далее создаем ресурс music.res, надеюсь в этом вы не затруднитесь.
Собственно сама процедур а выглядит так:
procedure joue;
var
h: THandle;
p: pointer;
begin
h := FindResource(hInstance,'music','WAV');
h := LoadResource(hInstance, h);
p := LockResource(h);
sndPlaySound(p,
SND_MEMORY or SND_SYNC);
UnLockResource(h);
FreeResource(h);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
joue('music');
end;

Но есть один недостаток, пока звук не проиграет до конца, ни один объект на форме не будет доступен. Решить эту проблему можно при помощи потоков.

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 30 ноября 2008, 19:16
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 41; последнее сообщение — 30 ноября 2008, 21:19; участников в обсуждении: 3.

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 19:17 [#21]:

Да у меня там 200 килов - думаю и без сжатия покатит! А вот то, что он на распаковывается - это заманчиво) На счет не используется - возможно - на счет - не имееся - имеется! Но это не используется меня бы устроило - а т. к. на запускает его второй раз - пишет - что файл занят - настораживает...
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 19:18 [#22]:

Да если надо, я поясню как решить вопрос с потоками, хотя возможно это не самый рациональное решение.
Аксион

Аксион (статус: 4-ый класс), 30 ноября 2008, 19:20 [#23]:

Его просто сначало надо отключить, а потом уже удалять....
MediaPlayer1.Stop;
MediaPlayer1.Close;
DeleteFile('Путь/music.mp3');
Вот так попробуйте....
Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 19:21 [#24]:

Ученый, спасибо! Щас попробую! А у меня на форуме нет компонентов - там просто картинка - играется звук - как он заканчивается - форма закрывается, так что все ok с этим)
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 19:24 [#25]:

А закрытие формы стоит на окончании игры Медиа плеера?
Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 19:31 [#26]:

Блазер, спасибо - щас попробую так!

Ученый, да!
Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 19:33 [#27]:

Ученый, А можно 1 вопрос - только писать надо music WAV music.mp3 - не надо сам mp3 формат в wav переделывать? т. е. из music.mp3 делать music.wav?
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 19:34 [#28]:

Ну в данном случае это не получится. Можно сделать так, просчитат продолжительность песни, кинуть на форму таймер, и по прошествии нужного периода времени форма закроется.
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 19:36 [#29]:

Ой что то я кажется не туда полез. Просто в процедуру joue надо дописать в самом конце form1.Close;
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 19:39 [#30]:

на счет mp3! Его надо конвертировать в Wav! Иначе ничего не получится.
Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 19:48 [#31]:

О... ну все - че-то я вообще запутался!! Сейчас выкипит мозг!
Блазер, по вашему варианту нивкакую не хочет второй раз проигрывать его... не знаете, в чем дело? Уже и останавливаю на закрытии плеер...

Ученый, че-то не хочет запускаться - кучу ошибок пишет! Но я еще щас попробую разик - если что - выложу код, просмотрите, что не так! Вы мне одно скажите, надо мне формат из mp3 в wav менять или нет?
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 19:49 [#32]:

Надо! Никак иначе! Звук должен быть Wav формата!
Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 19:51 [#33]:

Ух - так - тогда и в ресурсе пишем music WAV music.wаv - так - скобок тут не надо никакй? Или ковычек?
Аксион

Аксион (статус: 4-ый класс), 30 ноября 2008, 19:53 [#34]:

Я не могу понять, как второй раз не играет если прога должна проиграть мп3 и выключится? Откуда берется второй раз? Или она при повторном включении не играет?
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 19:55 [#35]:

Вечперик ! да! никаких с кобок и ковычек...
Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 19:55 [#36]:

Нет - выключается толкьо вторая форма! Которая вызывается с первой формы - пасхаольное яйцо типа!
Аксион

Аксион (статус: 4-ый класс), 30 ноября 2008, 19:58 [#37]:

а мп3 удаляется? При том коде который я дал?
MediaPlayer1.Stop;
MediaPlayer1.Close;
DeleteFile('Путь/music.mp3');
Вечперик

Вечперик (статус: Посетитель), 30 ноября 2008, 20:02 [#38]:

Стоп... извиняюсь - я MediaPlayer1.Close; забыл! Тысяча извинений! Теперь все работает нормально) Аж не верится! Так - ладно - надо немного отдохнуть - ато вскипает мозг - и попробовать еще с wav файлом! Всем спасибо!
Аксион

Аксион (статус: 4-ый класс), 30 ноября 2008, 20:08 [#39]:

Ну наконец-то :)
Ученый

Ученый (статус: 8-ой класс), 30 ноября 2008, 20:53 [#40]:

Да чуть не забыл, в uses надо добавить MMSystem и WinTypes.

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 22:05
Выполнено за 0.03 сек.