Форум: "Media";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Media";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c