![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зашивание wav'а в res и его проигрывание [D6, WinXP]
Pasha L © (2005-08-08 17:26:00)Здравствуйте.
Я хочу, чтобы в моей программе было несколько wav'ов, и чтобы они там проигрывались. Я прочитал, то ли как зашить в ехешник звуки, то ли как зашить их в какой-то один файл. Короче. Я создал mywav.rc, в котором написал
sndkey RCDATA LOADONCALL snd.wav
Потом переписал brcc32.exe в папку, где я всё это делаю. Потом создал bat файл, где написал
brcc32.exe mywav.rc
Запустил bat и получил mywav.res. В моей проге после implementation и {$R *.dfm} написал
{$R mywav.res}
Потом по инструкции создал процедуру извлечения звука из res файла
procedure tform1.RetrieveWaves;
var
hResource: THandle;
pData: Pointer;
begin
hResource:=LoadResource(hInstance, FindResource(hInstance, 'sndkey', RT_RCDATA));
try
pData := LockResource(hResource);
if pData = nil then
raise Exception.Create('Cannot read sndkey');
if not PlaySound('snd', 0, SND_MEMORY) then
raise Exception.Create('Cannot play snd');
finally
FreeResource(hResource);
end;
end;
Но вылезает 'Cannot play snd'. Вопросы:
1. Что неправильно?
2. Что в случае удачи дает мне этот способ (звук зашивается прямо эхэшник или только в res)?
3. Этим способом можно зашить несколько файлов или только один?
Наиль (2005-08-08 19:37:00) [1]На счёт двух способов. Надеюсь ты догадался что одна строчка из [6] заменяет все строчки из [8].
Fay (2005-08-08 19:28:00) [2]2 Pasha L © (08.08.05 19:22) [20]
>> Спа
Не з
Pasha L (2005-08-08 19:22:00) [3]Звуки находятся как я понял в res файле. Я попробовал удалить res и запустить после этого прогу в Дельфи. Он ругнулся. Но как я понимаю, если просто запустить прогу (не из Дельфи), то ругаться не станет. Вроде, так и есть.
Спа
Fay (2005-08-08 19:08:00) [4]2 Pasha L © (08.08.05 19:07) [18]
>> А можно ли эти вавы или рес зашить в сам эхэшник
А где они ("вавы или рес") чичяз, по-вашему?
Pasha L (2005-08-08 19:07:00) [5]Отнюдь
Fay (2005-08-08 19:03:00) [6]2 Pasha L © (08.08.05 19:00) [16]
Это шутка?
Pasha L (2005-08-08 19:00:00) [7]Ясно. Существует, значит два способа. А можно ли эти вавы или рес зашить в сам эхэшник?
Наиль (2005-08-08 18:38:00) [8]Несмотря на [14] высылаю устаревший совет
Я пользуюсь редактором ресурсов, поэтому не уверен но анализируя [10] можно предположить выглядеть mywav.rc будет выглядуть так:
snd1 WAVE snd1.wav
snd2 WAVE snd2.wav
snd3 WAVE snd3.wav
snd4 WAVE snd4.wav
и воспользуйся [6].
Если хочешь использовать [8] то замени RT_RCDATA на 'WAVE'.
Pasha L (2005-08-08 18:35:00) [9]//А можно как то в один res запихать несколько wavов?
Сам разобрался
Наиль (2005-08-08 18:25:00) [10]>[6]+[10]
Действительно ПРОЩЕ
Pasha L (2005-08-08 18:23:00) [11]Наиль © (08.08.05 18:16) [8]
YYYYEEEESSSS!!!!!
спасибо
А можно как то в один res запихать несколько wavов?
Наиль (2005-08-08 18:22:00) [12]>[8]
End;в конце не до копировал
GuAV (2005-08-08 18:20:00) [13]
> поместил в wave.res. Всё равно не пашет
LOL.
mywav.rc:
sndkey WAVEsnd.wav
Fay (2005-08-08 18:18:00) [14]>> поместил в wave.res. Всё равно не пашет
LOL!
Наиль (2005-08-08 18:16:00) [15]Никогда в жизни не сталкивался с таким вопросом.
Поэтому использовал только ту информацию которую вы (вдвоём) здесь сообщили. Вот что получилось:
Var
rs:TResourceStream;
snd:Pointer;
begin
rs:=TResourceStream.Create(HInstance,'snd',RT_RCDATA);
snd:=GetMemory(rs.Size);
rs.Read(snd^,rs.Size);
PlaySound(snd,0,SND_MEMORY);
FreeMemory(snd);
rs.Free;
Работает!
Pasha L (2005-08-08 18:03:00) [16]GuAV © (08.08.05 17:57) [6]
поместил в wave.res. Всё равно не пашет
GuAV (2005-08-08 17:57:00) [17]Проще всего PlaySound('sndkey',Hinstance,SND_RESOURCE), при этом звук поместить в ресурс
WAVE
Pasha L (2005-08-08 17:56:00) [18]в хелпе ещё говорится про какой-то waveform-audio, что именно он проирывет звук. Что это, waveform-audio? Может просто у меня его нет.
Pasha L (2005-08-08 17:46:00) [19]нее. не выходит
Pasha L (2005-08-08 17:45:00) [20]иии?? то есть? о чем это говорит? что я неверно сделал?