Форум: "Media";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
ВнизПодскажите текст программы, а может только процедуру Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.042 c