Главная страница
    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.112 c
15-1171639983
Parus
2007-02-16 18:33
2007.03.11
Мостостроительство:)


2-1171722811
Andrey-406
2007-02-17 17:33
2007.03.11
Сохранение-загрузка свойств формы


6-1159806707
vedm
2006-10-02 20:31
2007.03.11
TIdMultiPartFormDataStream и большие файлы.


1-1169029785
MegaVolt
2007-01-17 13:29
2007.03.11
Какой шрифт использовать для многоязычных программ.


15-1171473167
GeLLeR
2007-02-14 20:12
2007.03.11
dll и компонент к ней...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский