|
Вопрос # 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] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|