Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.Memory
PlaySound(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
15-1171630707
DrDe
2007-02-16 15:58
2007.03.11
Реестр


2-1171828169
Adios
2007-02-18 22:49
2007.03.11
Media Player


3-1166083953
cad2206
2006-12-14 11:12
2007.03.11
Помогите составить запрос


2-1171645054
RedBanner
2007-02-16 19:57
2007.03.11
Хитрость


2-1172047781
webpauk
2007-02-21 11:49
2007.03.11
Сообщение для Timage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский