Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

AVI, WAV, потоки и ресурсы


Zeqfreed ©   (2004-09-25 14:59:00) 

Зравствуйте, форумчане!
Помогите, кто знает. У меня задача проиграть wav или avi файлы из ресурсов. Пока я реализовал сохранение на диск и проигрывание файлов с него. Но это требует дополнительных ресурсов и вообще не желательно сохранение на диске. Я использовал ф-цию PlaySound для wav`ов, с ней все хорошо. Она играет из памяти, но как я понял пока не закончится проигрывание звука PlaySound не передаст управление программе, то есть программа ждет завершения проигрывания. Есть ли возможность проиграть звук из памяти так, чтобы управление программе было передано немедленно?
А способов проиграть avi из памяти я, к сожалению, пока не нашёл... Может кто-нибудь поделится этой ценной информацией?


Zeqfreed   (2004-09-26 08:38:00) [1]

2Mihey_temporary:
Ну насколько я помню (просто щас переделал, а старый вариант не оставил) не из ресурса а из памяти, то есть LockResource/ResourceStream.Memory и SND_MEMORY

2PGM_X:
Мда... какая-то мрачная перспектива, но за решения спасибо. Если сильно приспичит попробую покопать. Пока видимо придется оставить через диск.


Mihey_temporary   (2004-09-25 23:37:00) [2]

А из ресурса играешь? Типа:
PlaySound('SOUND', 0, SND_RESOURCE); ????


PGM_X   (2004-09-25 23:33:00) [3]

Как вариант: динамическое создание виртуального диска (память все-таки), выгрузка туда и проигрывание оттуда.

А если хочешь "по-взрослому", то придется писать фильтр для DirectShow (есть один в SDK DirectShow его надо под сои нужды модифицировать - это С++ к сожалению, никакого Delphi). У меня была другая задача - засосать в память файлы и играть оттуда. Сней я справился играл в Delphi, но фильтр писал на Visual C++.


Zeqfreed   (2004-09-25 22:20:00) [4]

Спасибо, за решение. Но я лично не люблю использовать сторонние библиотеки/модули (за рядом исключений), да и не желательно использовать их в моей задаче. Так что по большей части меня интересуют решения с открытыми исходниками или стандартными средствами.


programania   (2004-09-25 22:10:00) [5]

Билиотека BASS может играть из памяти
сразу несколько сэмплов одновременно
один раз или бесконечно независимо от программы:

BASS_Init(-1, 11000, 0, form1.handle);
BASS_Start;
data:=BASS_SampleCreate(q, 11000, 1, BASS_SAMPLE_MONO);
//data указатель на array[0..$FFFF] of smallInt;
//в массиве z q отсчетов +-32000;
for j:=1 to q do begin data^[j]:=z[j];
h:=BASS_SampleCreateDone;
BASS_SamplePlayEx(h, 0{start},11000,100{volume}, 0{pan}, false{BOOL loop});


Zeqfreed   (2004-09-25 16:26:00) [6]

А в заголовке я имею ввиду стримы (Stream)


Zeqfreed   (2004-09-25 16:25:00) [7]

2Dmy:
Нехочется здесь использовать потоки (Thread), если ты это имеешь ввиду

2Mihey_temporary
Даже с SND_ASYNC, насколько я помню, я ставил этот флаг.


Mihey_temporary   (2004-09-25 16:06:00) [8]


> Она играет из памяти, но как я понял пока не закончится
> проигрывание звука PlaySound не передаст управление программе,
> то есть программа ждет завершения проигрывания. Есть ли
> возможность проиграть звук из памяти так, чтобы управление
> программе было передано немедленно?


Даже при SND_ASYNC????


Dmy   (2004-09-25 15:50:00) [9]

У тебя же в заголовке написано, как сделать, чтобы управление программе передать %) Проигрывай wav в потоке


Наверх

Титульная страница Поиск, карта сайта Написать письмо