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

Вниз

AVI, WAV, потоки и ресурсы   Найти похожие ветки 

 
Zeqfreed ©   (2004-09-25 14:59) [0]

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


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

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


 
Mihey_temporary ©   (2004-09-25 16:06) [2]


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


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


 
Zeqfreed ©   (2004-09-25 16:25) [3]

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

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


 
Zeqfreed ©   (2004-09-25 16:26) [4]

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


 
programania ©   (2004-09-25 22:10) [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 22:20) [6]

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


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

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

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


 
Mihey_temporary ©   (2004-09-25 23:37) [8]

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


 
Zeqfreed ©   (2004-09-26 08:38) [9]

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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.028 c
3-1100983386
ser_ega
2004-11-20 23:43
2004.12.19
Oбработчик DBGrid1DrawDataCell


3-1101193679
first_may
2004-11-23 10:07
2004.12.19
Yaffil, сборка 885


14-1101926263
Knight
2004-12-01 21:37
2004.12.19
Можно ли подключить в VMWare модем?


1-1101919692
ALex17
2004-12-01 19:48
2004.12.19
трей


14-1101515011
Andy BitOff
2004-11-27 03:23
2004.12.19
Дорогой IE, я ухожу от тебя навсегда