|
26.04.2012, 21:03
|
#1
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
сам у себя доступ к файлу забрать норовит MCI
со звуком проблемы возникли в который уж раз. воспроизведение файлов использую нескольких одновременно. структура простая у написанной мной процедуры:
// проигрывание wav-файла
procedure playFile(Filename: string);
begin
try
mciSendString(PChar('Play "' + Filename + '"'), nil, 0, 0);
except
end;
end;
но проблема одна возникает - без них не бывает программ. если файл проигрывать дважды через времени краткий период, то плеер ругается страшно, пугает такими словами: "Can not load file filename"
ибо занят уже этот файл процессом другим. ведь другой экземпляр MCI читает тот звук в этот миг.
что мне делать, коль скоро хочу проиграть этот файл я дважды, причем в одно время? может что-то удобнее есть, чем капризный тупой MCI?
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
26.04.2012, 22:18
|
#2
|
Знающий
Регистрация: 04.11.2011
Сообщений: 285
Написано 66 полезных сообщений (для 159 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
о боже, учитель посетил нас великий, как мох он зеленый
|
(Offline)
|
|
26.04.2012, 23:25
|
#3
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
Сообщение от reumep
о боже, учитель посетил нас великий, как мох он зеленый
|
увы, не учитель. был бы полон ответов тогда я, но не вопросов.
курю мануалы по bass.dll и беседую с буддой. но очень событие воспроизведения завершенье поймать показалось мне сложно, дабы поток я использовать мог для других звуков файлов. а их проиграть мне придется десятки и сотни.
советы бывалого мастера мне попадались:
// если хочешь, чтобы басс тебя дернул, то: function BASS_StreamCreateFileUser(system, flags: DWORD; var procs: BASS_FILEPROCS; user: Pointer): HSTREAM; stdcall; external bassdll; BASS_FILEPROCS = record close: FILECLOSEPROC; length: FILELENPROC; read: FILEREADPROC; seek: FILESEEKPROC; end; // Достаточно BASS_ChannelSetSync + BASS_SYNC_END
но с чем это есть, к сожалению, так и не понял ..(
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
26.04.2012, 23:47
|
#4
|
Знающий
Регистрация: 04.11.2011
Сообщений: 285
Написано 66 полезных сообщений (для 159 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
Сообщение от barsunduk
увы, не учитель. был бы полон ответов тогда я, но не вопросов.
|
Истинный учитель - не тот учитель, что знает ответы на вопросы все. Сей же учитель зелен весьма и ответов не знает многих, но привел он к философии жизни меня, за что благодарен я ему.
надо меньше порошки от простуды есть, болен я
|
(Offline)
|
|
26.04.2012, 23:50
|
#5
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
и опять не по теме ..(
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
26.04.2012, 23:54
|
#6
|
Знающий
Регистрация: 04.11.2011
Сообщений: 285
Написано 66 полезных сообщений (для 159 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
ну, предложить могу костыль тебе я: создай файла два одинаковых, как протия атомы, и их используй
на самом деле не смыслю в дельфи я
|
(Offline)
|
|
27.04.2012, 00:39
|
#7
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
спасибо за совет, но не смогу воспользоваться я им. придется мнооого файлов создавать тогда.
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
27.04.2012, 00:56
|
#8
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
Можно попробовать DXSound из DelphiX использовать, думаю, там таких проблем не будет.
|
(Offline)
|
|
27.04.2012, 01:09
|
#9
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: сам у себя доступ к файлу забрать норовит MCI
спасибо за советы. покурю.
но все же либа bass намного проще. события я так и не осилил, но...
как оказалось, легче завести массив потоков и проверять, активны ли они, когда я добавляю новых звуков. все неактивные я чищу и кидаю в них новьё. проблема решена, я полагаю.
var strm: array [0..255] of HSTREAM; // ... if BASS_ChannelIsActive(strm[i]) = 0 then begin BASS_StreamFree(strm[i]); strm[i] := BASS_StreamCreateFile(False, PChar(Filename), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF}); BASS_ChannelPlay(strm[i], True); end;
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:09.
|