Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Зашивание wav а в res и его проигрывание   Найти похожие ветки 

 
Pasha L ©   (2005-08-08 17:26) [0]

Здравствуйте.
Я хочу, чтобы в моей программе было несколько 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. Этим способом можно зашить несколько файлов или только один?


 
MetalFan ©   (2005-08-08 17:35) [1]

смотрим справку
BOOL PlaySound(
 LPCSTR pszSound,  
 HMODULE hmod,    
 DWORD fdwSound    
);
fdwSound

Flags for playing the sound. The following values are defined

SND_MEMORY - A sound event"s file is loaded in RAM. The parameter specified by pszSound must point to an image of a sound in memory.

pszSound должен указывать на загруженный в память звук)


 
MetalFan ©   (2005-08-08 17:44) [2]

з.ы. попробуй просто:
PlaySound("snd", 0, SND_RESOURCE)


 
Pasha L ©   (2005-08-08 17:45) [3]

иии?? то есть? о чем это говорит? что я неверно сделал?


 
Pasha L ©   (2005-08-08 17:46) [4]

нее. не выходит


 
Pasha L ©   (2005-08-08 17:56) [5]

в хелпе ещё говорится про какой-то waveform-audio, что именно он проирывет звук. Что это, waveform-audio? Может просто у меня его нет.


 
GuAV ©   (2005-08-08 17:57) [6]

Проще всего PlaySound("sndkey",Hinstance,SND_RESOURCE), при этом звук поместить в ресурс WAVE


 
Pasha L ©   (2005-08-08 18:03) [7]

GuAV ©   (08.08.05 17:57) [6]
поместил в wave.res. Всё равно не пашет


 
Наиль ©   (2005-08-08 18:16) [8]

Никогда в жизни не сталкивался с таким вопросом.
Поэтому использовал только ту информацию которую вы (вдвоём) здесь сообщили. Вот что получилось:
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;

Работает!


 
Fay ©   (2005-08-08 18:18) [9]

>> поместил в wave.res. Всё равно не пашет
LOL!


 
GuAV ©   (2005-08-08 18:20) [10]


> поместил в wave.res. Всё равно не пашет


LOL.

mywav.rc:
sndkey WAVE snd.wav


 
Наиль ©   (2005-08-08 18:22) [11]

>[8]
End; в конце не до копировал


 
Pasha L ©   (2005-08-08 18:23) [12]

Наиль ©   (08.08.05 18:16) [8]
YYYYEEEESSSS!!!!!
спасибо

А можно как то в один res запихать несколько wavов?


 
Наиль ©   (2005-08-08 18:25) [13]

>[6]+[10]
Действительно ПРОЩЕ


 
Pasha L ©   (2005-08-08 18:35) [14]

//А можно как то в один res запихать несколько wavов?
Сам разобрался


 
Наиль ©   (2005-08-08 18:38) [15]

Несмотря на [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 19:00) [16]

Ясно. Существует, значит два способа. А можно ли эти вавы или рес зашить в сам эхэшник?


 
Fay ©   (2005-08-08 19:03) [17]

2 Pasha L ©   (08.08.05 19:00) [16]
Это шутка?


 
Pasha L ©   (2005-08-08 19:07) [18]

Отнюдь


 
Fay ©   (2005-08-08 19:08) [19]

2 Pasha L ©   (08.08.05 19:07) [18]
>> А можно ли эти вавы или рес зашить в сам эхэшник
А где они ("вавы или рес") чичяз, по-вашему?


 
Pasha L ©   (2005-08-08 19:22) [20]

Звуки находятся как я понял в res файле. Я попробовал удалить res и запустить после этого прогу в Дельфи. Он ругнулся. Но как я понимаю, если просто запустить прогу (не из Дельфи), то ругаться не станет. Вроде, так и есть.
Спа


 
Fay ©   (2005-08-08 19:28) [21]

2 Pasha L ©   (08.08.05 19:22) [20]
>> Спа
Не з


 
Наиль ©   (2005-08-08 19:37) [22]

На счёт двух способов. Надеюсь ты догадался что одна строчка из [6] заменяет все строчки из [8].



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.039 c
4-1120640417
slaga
2005-07-06 13:00
2005.08.28
Возможность программы прятаться систем трей


1-1123106623
pOLyMOrpH
2005-08-04 02:03
2005.08.28
Компоненты в run-time


14-1123492515
WonderfulDay
2005-08-08 13:15
2005.08.28
Зажимание шифта


3-1121373663
Kraft
2005-07-15 00:41
2005.08.28
Функция Locate


14-1122927294
ronyn
2005-08-02 00:14
2005.08.28
Переустановка в Install Shield