|
Вопрос # 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, 21:19 [#41]:
Блазер, да сам рад-то как!
Ученый, спасибо, уже матерится меньше! Только выдает следующее - Unknown directive 'joue' - может ее в type вписать надо?
|
31 января 2011, 19:33: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Страницы: [« Предыдущая] [1] [2] [3]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|