Форум: "Media";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
ВнизЗвук из ресурса Найти похожие ветки
← →
!_SM_! (2006-07-08 23:37) [0]Из справки Делфи Windows SDK:
You can use the PlaySound function to play a sound that is stored as a resource. Although this is also possible using the sndPlaySound function, sndPlaySound requires you to find, load, lock, unlock, and free the resource; PlaySound achieves all of this with a single line of code.
Вопрос 1) Почему не проигрывается звук из ресурса? -PlaySound("SoundName", HInstance, SND_RESOURCE or SND_ASYNC);
PlaySound achieves all of this with a single line of code. :(((????
а так играет
procedure PlaySound5(const S: PChar);
var hRes: THandle;
pRes: Pointer;
begin
hRes := LoadResource( HInstance, FindResource( HInstance, S, RT_RCDATA));
try pRes := LockResource(hRes);
if pRes=nil then Exit;
PlaySound(pRes, 0, SND_MEMORY or SND_ASYNC);
finally FreeResource(hRes); end;
end;
PlaySound5("SoundName");
Спасибо.
← →
KilkennyCat © (2006-07-09 00:42) [1]http://borland.xportal.ru/forum/viewtopic.php?t=1163
← →
!_SM_! (2006-07-09 01:48) [2]Вот установил bass ... изучаю...
можно ли используя bass проиграть wav файл из ресурса
если можно пример?
← →
KilkennyCat © (2006-07-09 01:53) [3]Думаю, что да. Но я c bass не работал.
← →
!_SM_! (2006-07-09 05:16) [4]Кто нибудь знает как, используя bass, можно проиграть wav файл из ресурса? Спасибо.
← →
!_SM_! (2006-07-09 05:19) [5]
> KilkennyCat © (09.07.06 00:42) [1]
Кстати, Спасибо за ссылку, я там разобрался почему у меня не пел
PlaySound из ресурса.... я его (ресурс) не правильно собрал
надо для PlaySound"a SOUND указывать, а не RCDATA... Вот.
← →
!_SM_! (2006-07-09 16:07) [6]
> !_SM_! (09.07.06 05:16) [4]
Ответьте пожалуйста..... кто - нибудь, на вопрос.
Спасибо.
← →
!_SM_! (2006-07-10 16:35) [7]Похоже никто не знает...
← →
antonn © (2006-07-10 16:51) [8]!_SM_! (10.07.06 16:35) [7]
загрузить в TMemorystream и проиграть оттудаvar chan:HSTREAM; _M:TMemorystream;
begin
chan:=BASS_StreamCreateFile(True, _M.Memory, 0, _M.Size, 0);
BASS_ChannelPlay(chan,true);
← →
!_SM_! (2006-07-11 02:34) [9]
> antonn © (10.07.06 16:51) [8]
Будь добр, подскажи пожалуйста как из ресурса загрузить
в TMemorystream
Я вот вообще так пытался, нифига не получается:
procedure TForm1.SpeedButton7Click(Sender: TObject);
var HGlobRes: THandle; HRes: TResourceHandle; pDataRes: Pointer;
Snd: HSAMPLE;
begin
HRes:=FindResource(HInstance, PChar("SND"), PChar("SOUND"));
HGlobRes:=LoadResource(HInstance, HRes);
try pDataRes:=LockResource(HGlobRes); if pDataRes=nil then Exit;
Snd:=BASS_SampleLoad(True, pDataRes, 0, 0, 1, BASS_SAMPLE_OVER_POS);
BASS_ChannelPlay(Snd, True);
finally FreeResource(HGlobRes); end;
end;
← →
!_SM_! (2006-07-11 02:38) [10]Ну это без TMemorystream, пытался сделать как PlaySound играет из ресурса...
TStream раньше не пользовал
← →
antonn © (2006-07-11 05:31) [11]TMemorystream - рулит (почти как канвас)
var Res : TResourceStream; _MM:TmemoryStream;
begin
Res := TResourceStream.Create(hInstance, Pchar("music"), Pchar("RESS")); //название и секция ресурса
_MM:=TmemoryStream.Create;
try
_mm.CopyFrom(RES,res.Size); //только селекторы нужно для подстраховки вернуть на начало
finally
_MM.Free; //замечу, что тут память будет убита, а значит нужно создать глобальную переменную
res.Free;
end;
← →
!_SM_! (2006-07-11 16:28) [12]Спасибо, будем пробовать...
← →
!_SM_! (2006-07-12 00:47) [13]
> antonn © (11.07.06 05:31) [11]
Не поет :(((
var Res : TResourceStream; ResMM:TmemoryStream; Snd: HSAMPLE;
procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
Res:=TResourceStream.Create(hInstance, Pchar("SND"), Pchar("SOUND"));
try if Res=nil then Exit;
ShowMessage(IntToStr(Res.Position)); {TEST} // показывает 0
ResMM:=TmemoryStream.Create;
ResMM.CopyFrom(Res, Res.Size);
ShowMessage(IntToStr(ResMM.Position)); {TEST} //показывает 11868 - Size
ResMM.Position:=0;
ShowMessage(IntToStr(ResMM.Position)); {TEST} //показывает 0
Snd:=BASS_SampleLoad(True, ResMM, 0, 0, 1, BASS_SAMPLE_OVER_POS);
ShowMessage(IntToStr(Snd)); {TEST} // показывает 0
BASS_ChannelPlay(Snd, True);
finally end;
end;
← →
!_SM_! (2006-07-12 01:18) [14]Пробовал и так:
Snd1:=BASS_StreamCreateFile(True, ResMM, 0, 0, BASS_SAMPLE_OVER_POS);
BASS_ChannelPlay( BASS_SampleGetChannel( Snd1, False), True);
тоже ноль... тишина
а вот PlaySound поет и Res.memory и ResMM.MemoryPlaySound(Res.Memory, 0, SND_MEMORY or SND_ASYNC);
PlaySound(ResMM.Memory, 0, SND_MEMORY or SND_ASYNC);
но он не катит.... так как 2 раза одновременно не может:(((
Блин, как заставить BASS играть ресурс??????????????????
← →
antonn © (2006-07-12 05:00) [15]!_SM_! (12.07.06 0:47) [13]
так и не будет петь...
!_SM_! (12.07.06 1:18) [14]
во первых, так тоже не будет. Потому что это не тот код, что я приводил...
Во вторых, а инициализация где?BASS_Init(1, 44100, 0, Handle, nil);
BASS_Stop;
Bass_Start;
← →
!_SM_! (2006-07-12 18:44) [16]Вот код примера (ниже) как я делаю он рабочий, компилиться нормально.
В ресурсе есть два wav файла. Ресурсы с именами:
RCDT тип RT_RCDATA и
SND тип SOUND
они загружаються нормально - PlaySound их играет.
На форме 7 кнопок TButton; В папке с exe есть файл 3.wav;
Вот сам код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, BASS, StdCtrls, MMSystem;
type
TForm1 = class(TForm)
ButtonPlayFile: TButton;
ButtonPlayRes: TButton;
ButtonPlayRes1: TButton;
ButtonPlayResMM: TButton;
ButtonPlaySound: TButton;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure ButtonPlayFileClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ButtonPlayResClick(Sender: TObject);
procedure ButtonPlayRes1Click(Sender: TObject);
procedure ButtonPlayResMMClick(Sender: TObject);
procedure ButtonPlaySoundClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ChF, ChR, ChR1, ChR2: HCHANNEL;
SndF, SndR, SndR1, SndR2: HSAMPLE;
ResS, ResRC: TResourceStream;
ResMM: TmemoryStream;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
if not BASS_Init(-1, 44100, 0, Handle, nil) then Halt;
SndF :=BASS_SampleLoad(FALSE, PChar("3.wav"), 0, 0, 3, BASS_SAMPLE_OVER_POS);
ChF :=BASS_SampleGetChannel(SndF, False);
ResS :=TResourceStream.Create(hInstance, Pchar("SND"), Pchar("SOUND"));
ResRC:=TResourceStream.Create(hInstance, Pchar("RCDT"), RT_RCDATA);
ResMM:=TmemoryStream.Create;
ResMM.CopyFrom(ResS, ResS.Size);
if ResS<>nil then begin
SndR:=BASS_StreamCreateFile(True, ResS, 0, 0, BASS_SAMPLE_OVER_POS);
ChR:=BASS_SampleGetChannel(SndR, False);
end else Exit;
if ResRC<>nil then begin
SndR1:=BASS_StreamCreateFile(True, ResRC, 0, 0, BASS_SAMPLE_OVER_POS);
ChR1:=BASS_SampleGetChannel(SndR1, True);
end else Exit;
if ResMM<>nil then begin
//SndR2:=BASS_SampleLoad(True {False}, ResMM, 0, 0, 0, BASS_SAMPLE_OVER_POS); //и так пробовал,
тишина
//ChR2:=BASS_SampleGetChannel(SndR2, True);
SndR2:=BASS_StreamCreateFile(True, ResMM, 0, 0, BASS_SAMPLE_OVER_POS);
ChR2:=BASS_SampleGetChannel(SndR2, True);
end else Exit;
BASS_Start; //Без этого файл играет всеравно
ShowMessage("OK"); {TEST} //Показывается, значит всё создается ..не суть
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BASS_SampleFree(SndF);
BASS_SampleFree(SndR);
BASS_SampleFree(SndR1);
BASS_SampleFree(SndR2);
ResS.Free;
ResRC.Free;
ResMM.Free;
BASS_Free;
end;
procedure TForm1.ButtonPlayFileClick(Sender: TObject);
begin
BASS_ChannelPlay(chF, True); //ПОЕТ
end;
procedure TForm1.ButtonPlayResClick(Sender: TObject);
begin
BASS_ChannelPlay(chR, True); //НЕ поет
end;
procedure TForm1.ButtonPlayRes1Click(Sender: TObject);
begin
BASS_ChannelPlay(chR1, True); //НЕ поет
end;
procedure TForm1.ButtonPlayResMMClick(Sender: TObject);
begin
BASS_ChannelPlay(chR2, True); //НЕ поет
end;
procedure TForm1.ButtonPlaySoundClick(Sender: TObject);
begin
PlaySound(ResS.Memory, hInstance, SND_MEMORY or SND_ASYNC); //ПОЕТ
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PlaySound(ResRC.Memory, hInstance, SND_MEMORY or SND_ASYNC); //ПОЕТ
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PlaySound(ResMM.Memory, hInstance, SND_MEMORY or SND_ASYNC); //ПОЕТ
end;
end.
ПОМОГИТЕ ПОЖАЛУЙСТА, ЧТО НЕ ТАК У МЕНЯ?
или может BASS не умеет играть ресурсы?
для чего нужен тогда первый пораметр BASS_StreamCreateFile(mem: LongBool...
или BASS_SampleLoad(mem: LongBool...?
> antonn © (11.07.06 05:31) [11]
>antonn © (12.07.06 05:00) [15]
>!_SM_! (12.07.06 0:47) [13]
>так и не будет петь...
>!_SM_! (12.07.06 1:18) [14]
во первых, так тоже не будет. Потому что это не тот код, что я приводил...
????????????????????????????
← →
!_SM_! (2006-07-12 19:50) [17]И вот, пользую вот такую Bass
BASS 2.3 - Copyright (c) 1999-2006 Ian Luck.
так, на всякий случай.....
← →
antonn_web (2006-07-12 20:49) [18]не знаю, что там насчет ресурсов, я давал код проигрывания из памяти, вот его и используй. И параметры правильные подставь, по буквам из [8] прочитай
← →
!_SM_! (2006-07-12 23:32) [19]Сделал так:
if ResRC<>nil then begin
SndR1:=BASS_StreamCreateFile(True, ResRC.Memory, 0, ResRC.Size, 0);
//ChR1:=BASS_SampleGetChannel(SndR1, True);
end else Exit;
BASS_ChannelPlay(SndR2, True);
ПОЕТ.... Спасибо... не доглядел.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c