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

Вниз

Подскажите текст программы, а может только процедуру   Найти похожие ветки 

 
tamagavk   (2004-06-20 12:37) [0]

Здравствуйте уважаемые любители Delphi!
Помогите и подскажите, как написать прогу(а может только процедуру),которая при определенных действиях,например,при нажатии кнопки, воспроизводила WAV файл, но не откуда-то с жесткого диска, а из памяти программы. Все ответы и предполо-
жения присылать по адресу tamagavk@comail.ru   Зараннее благодарен!


 
Anatoly Podgoretsky ©   (2004-06-20 13:02) [1]

PlaySound


 
Огромное Кулясище   (2004-06-20 13:09) [2]

2 Anatoly Podgoretsky:

Вы имеете ввиду флаг SND_RESOURCE, т.е. проигрывание из ресурса как проигрывание из памяти?


 
Anatoly Podgoretsky ©   (2004-06-20 13:14) [3]

SND_MEMORY


 
tamagavk   (2004-06-20 13:47) [4]

A можно поподробнее насчет PlaySound или SND_Memory(я имею ввиду текст)Я ведь начинающий.


 
Огромное Кулясище   (2004-06-20 14:16) [5]

> SND_MEMORY

Прикольно, не знало раньше.

>A можно поподробнее насчет PlaySound или SND_Memory(я имею ввиду текст)Я ведь начинающий.

Э-э, побачь тута:
http://www.latiumsoftware.com/en/delphi/00024.php


 
tamagavk   (2004-06-20 18:02) [6]

Насчет PlaySound сделал все,как написано, но звука нетууу. В чем дело напишите поподробнее


 
tamagavk   (2004-06-20 18:13) [7]

Кстати, пишу методом PlaySound как указано на предложенной выше странице, но если стереть файл с жесткого диска, звука не будет!!
Что такое SND_Memory?  Может оно поможет?  Напишите куда надо это вставлять


 
Огромное Кулясище   (2004-06-20 18:50) [8]

>Кстати, пишу методом PlaySound как указано на предложенной выше странице

На предложеной выше странице предлагается метод sndPlaySound, если уж быть точным.

Далее, ты уверен, что написал так:

uses SysUtils, Classes, MMSystem;

var
 tada: string;

function LoadFile(const FileName: TFileName): string;
begin
 with TFileStream.Create(FileName,
     fmOpenRead or fmShareDenyWrite) do begin
   try
     SetLength(Result, Size);
     Read(Pointer(Result)^, Size);
   except
     Result := "";  // Deallocates memory
     Free;
     raise;
   end;
   Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 sndPlaySound(Pointer(tada), SND_MEMORY
   Or SND_NODEFAULT Or SND_ASYNC);
end;

initialization
 tada := LoadFile("C:\Windows\Media\Tada.wav");

finalization
 tada := ""; // Releases the memory taken by the string
end.

Как видишь, SND_MEMORY уже вставлено.


 
tamagavk   (2004-06-20 19:13) [9]

Все написал как вы сказали, но ведь все равно идет обращение к файлу на жестком диске?Стоит мне переместить мой WAV файл в другое место жесткого диска, так проект не запускается и вылетает ошибка!


 
}{enon ©   (2004-06-20 19:25) [10]

А с какой стати он будет запускаться, если ты переместил файл? Он не может найти файл, который нужно загрузить в память, потому и выдает ошибку. Вот если ты запустишь программу, а ПОТОМ переместишь файл, то все будет работать. WAV играется из памяти, но сам по себе он там не окажется - его нужно или загрузить, или записать.


 
tamagavk   (2004-06-20 19:31) [11]

Так я запускал программу не один раз, все игралось, но после перемещения перестало проигрываться


 
}{enon ©   (2004-06-20 19:59) [12]

... то все будет работать В ТОЛЬКО ЧТО ЗАПУЩЕННОЙ КОПИИ ПРОГРАММЫ. Ну не может прога загрузить несуществующий файл. Видимо ты неверно сформулировал вопрос, и звук надо запускать не из памяти а из ресурса.


 
tamagavk   (2004-06-20 20:03) [13]

Наверно,скажите тогда метод загрузки из ресурса. Но только я с ним никогда не работал, объясните поподробнее или пришлите на e-mail   tamagavk@comail.ru


 
tamagavk   (2004-06-20 20:45) [14]

Ну же, мастера, Расскажите как создать ресурс и использовать его в программе


 
}{enon ©   (2004-06-20 21:02) [15]

Сорри, временно отключился. Про работу с ресурсами читай тут:
http://blackman.wp-club.net/lection/resurs.php


 
Огромное Кулясище   (2004-06-20 21:35) [16]

2 tamagavk:

Вот модуль:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, MMSystem;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

function LoadFile(const FileName: TFileName): string;

var
 Form1: TForm1;
 tada: String;

implementation

{$R *.DFM}

function LoadFile(const FileName: TFileName): string;
begin
with TFileStream.Create(FileName,
    fmOpenRead or fmShareDenyWrite) do begin
  try
    SetLength(Result, Size);
    Read(Pointer(Result)^, Size);
  except
    Result := "";  // Deallocates memory
    Free;
    raise;
  end;
  Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound(Pointer(tada), SND_MEMORY
  Or SND_NODEFAULT Or SND_ASYNC);
end;

initialization
tada := LoadFile("C:\s1.wav");

finalization
tada := ""; // Releases the memory taken by the string

end.

На форме одна кнопка. Так вот, я запустил, проверил что играет. Удалил файл - нажал кнопку и всё играет. Так что делай выводы.


 
tamagavk   (2004-06-20 22:00) [17]

Напмсал точно также. Сначала все работает.После удаления Wav файла запускаю программу и она мне выдает:  что типа выполнила недопустимую ошибку и будет закрыта, а затем еще одна ошибка:
"Runtime error 217 at 0041576A"
В чем дело?


 
}{enon ©   (2004-06-20 22:05) [18]

2 Огромное Кулясище

Блин, объясни мне КАК он играет, если при инициализации LoadFile(tada) вызывает ошибку, т.к. файл не существует?


 
Огромное Кулясище   (2004-06-20 22:10) [19]

2 }{enon:

Блин! Я же сразу не понял, что он удаляет файл и потом ещё раз запускает программу!!!!


 
Огромное Кулясище   (2004-06-20 22:12) [20]

2 tamagavk:

Запусти программу, не знакрывая её удали файл и нажми кнопку. Когда ты закрываешь программу выполняется код:

finalization
tada := ""; // Releases the memory taken by the string

т.е. файл выгружается из памяти. Естественно, что при старте программы вновь этот файл понадобится на диске.


 
tamagavk   (2004-06-20 22:20) [21]

Так а если я стираю эти две строки все равно не помогает


 
}{enon ©   (2004-06-20 22:28) [22]

Пристрелите меня [ по Интернету :) ]!
Если в вопросе "из памяти программы" значит, что файл не должен валяться на диске, а должен быть запрятан где-то в самой программе, то это делается через ресурсы (смотри ссылку выше). Через "tada := " и т.д. ты не чего не зделаешь, как не издевайся над кодом, т.к. файл должен существовать хоть где-то, а раз его нет на диске, то "где-то" - это твой экзешник.


 
tamagavk   (2004-06-20 22:35) [23]

Я понял, что это не то, что я хочу. Вы все имеете ввиду не закрывая программу удалять Wav файл и после нажимать на кнопку. Это получается.Мне НАДО чтобы я закрыл программу, файл удалил, затем снова запустил программу и файл воспроизводился. Тут наверно не обойтись без ресурсов. Но этого я вообще не знаю.
Растолкуйте, пожайлуста, последовательность моих действий(только не надо указывать на страницу, там много всего нового и я ничего не понял).Желательно с примером, например,тот же проигрыш WAV файла


 
Anatoly Podgoretsky ©   (2004-06-20 22:43) [24]

Помести его в ресурсы и затем играй или из памяти или напрямую из ресурса.


 
tamagavk   (2004-06-20 23:00) [25]

Так я и спрашиваю последовательность моих действий:как создавать ресурс и т.п.


 
Огромное Кулясище   (2004-06-20 23:04) [26]

2 tamagavk:

Все твои пожелания и предложения Anatoly Podgoretsky реализованы на той странице, что я тебе посоветовал. Никто тебе в двух словах не сможет объяснить, как создать ресурс. Заодно читай ссылку из }{enon © (20.06.04 21:02) [15].


 
tamagavk   (2004-06-20 23:59) [27]

Я так понял, что  myres.inc , myres.rc и myres.bat надо создавать в Блокноте. Я запускаю bat файл и где искать myres.res. Затем эти все файлы помещать в папку с программой Верно? Но программа не работает


 
Anatoly Podgoretsky ©   (2004-06-21 00:12) [28]

Огромное Кулясище   (20.06.04 23:04) [26]
Ну почему, в .rc файле
RESNAME RETYPE RESPATH
и подключить к проекту и это все.


 
Огромное Кулясище   (2004-06-21 00:52) [29]

2 Anatoly Podgoretsky:

А компилировтаь кто будет? Неужели само?


 
Anatoly Podgoretsky ©   (2004-06-21 09:22) [30]

Само, начиная с Д5


 
tamagavk   (2004-06-21 11:35) [31]

УРААААА!НАКОНЕЦ-ТО!Получилось!Просидел полночи и добил этот ресурс.Все работает. Всем спасибо за помощь.

P.S
Получается Wav файл заносится в память ресурса и остается там навсегда и при каждом запуске программы и соответствующих действий он загружается из ресурса?Верно?


 
Anatoly Podgoretsky ©   (2004-06-21 11:39) [32]

А черт его знает, ты же код не приводишь.


 
Kind ©   (2004-06-21 22:19) [33]

Это что первоапрельские шутки тут? :) Дык уже поздно!
tamagavk - если ты прикалываешься то Орехи это оценят, а если нет то ... наверно тебя неправильно понимают из-за того, что ты неправильно формулируешь вопрос.
WAV файл пристыковывается к твоему EXEшнику и остаётся в нём навсегда!

P.S. Единственное, что мне не понятно до сих пор это вот что - А зачем тебе удалять этот WAV файл??? :)



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

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

Наверх




Память: 0.55 MB
Время: 0.031 c
4-1090517704
juiceman
2004-07-22 21:35
2004.09.05
программировать в Windows устройства


10-1035224514
Прохожий
2002-10-21 22:21
2004.09.05
OMNIORB и C++ Builder


14-1092605401
Baron
2004-08-16 01:30
2004.09.05
Фотоприколы


1-1092856567
Gear
2004-08-18 23:16
2004.09.05
ReadSections и ListBox


3-1091801616
Руслан
2004-08-06 18:13
2004.09.05
Как некоторые строки в DBGrid выделить жирным шрифтом?