Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проигрывание звука 
:(
    Опции темы
Illusion Dolphin
  Дата 8.5.2004, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Каким образом лучше всего проиграть звуковой файл, чтобы в каждый момент времени можно было узнать, сколько секунд (и миллисекунд) прошло после начала песни? Просто мне необходимо синхронизировать собатия в программе с звуком, но если использовать функцию

PlaySound('c:\1.wav',0,SND_FILENAME);

то она при запуске некоторое время затрачивает на загрузку файла, и если перед вызовом этой функции просто зафиксировать системное время, то всё равно будет некоторая асинхронность...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 8.5.2004, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Не пробовал, однако, можно загрузить файл в память (каким-нибудь BlockRead-ом, к примеру), потом делаешь так:
PlaySound(Buffer, 0, SND_MEMORY);



--------------------
С уважением, г-н Посол.
PM   Вверх
Illusion Dolphin
Дата 9.5.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



p0s0l, но всё равно как мне узнать, сколько секунд проигралось с начала песни? потоки же будут идти асинхронно, т.к. PlaySound пойдёт в другой поток - до того как не доиграет звук, управление дльше этой страчки передано не будет 8(...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 9.5.2004, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



MediaPlayer...
PM   Вверх
Illusion Dolphin
Дата 9.5.2004, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Pakshin A. S., а если без компонентов???


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
RA
Дата 9.5.2004, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 1
Всего: 115



Uses MMSystem;

Function mciSendString...
PM   Вверх
p0s0l
Дата 11.5.2004, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Illusion Dolphin, если надо проиграть звук асинхронно (я так понял), то делай так:
Код
PlaySound(Buffer, 0, SND_MEMORY or SND_ASYNC);


Далее. Тебе надо узнать сколько прошло времени с начала проигрывания ? Засеки время перед PlaySound и потом вычетай его из текущего времени. Будет примерно так:
Код

var
 Siz : integer;
 Buffer : pointer;
 f : file;
 time1, time2 : cardinal;
begin
 AssignFile(f, 'c:\Windows\Media\tada.wav');
 Reset(f, 1);
 Siz := FileSize(f);
 GetMem(Buffer, Siz);
 BlockRead(f, Buffer^, Siz);
 CloseFile(f);

 time1 := GetTickCount;
 PlaySound(Buffer, 0, SND_MEMORY or SND_ASYNC);

 repeat
   sleep(1);
   time2 := GetTickCount;
   Caption := IntToStr(time2-time1); // сколько мс прошло
   Update;
 until time2 - time1 > 1000;

 FreeMem(Buffer);
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.