![]() |
|
|
![]()
|
|
| livo |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
Здравствуйте! Пишу свой аудиоплеер, используя TMediaPlayer как основу. Сделал плейлист, в котором отображается номер файла, его имя и длина в минутах и секундах.
После загрузки списка файлов запускается поток, в котором создается объект TMediaPlayer, определяющий длину каждого звукового файла из списка. Все бы ничего, но конструктор TMediaPlayer требует в качестве параметра либо указатель на родительский компонент, либо дескриптор родительского окна. В случае передачи в конструктор NULL не срабатывает метод Open() TMediaPlayer"а, а если передать дескриптор главной формы, то возникают проблемы с этим окном: например, при изменении размера окна у меня выдавалось сообщение о недостаточном объеме памяти для завершения операции. Вот код потока:
И еще вот функции, работающие с этим потоком:
Это сообщение отредактировал(а) livo - 18.11.2010, 12:28 |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
VCL'ные визуальные объекты расчитанны на работу ТОЛЬКО из главного потока (там где был main). У вас TMediaPlayer создается в главном потоке, запускается в отдельном потоке, а парентом вы ему хотите передать вообще нечто
И только он? Вам повезло |
|||
|
||||
| livo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
Тогда как можно организовать работу TMediaPlayer"а в потоке, чтобы все работало корректно?
Мне нужно только узнать время звучания звуковых дорожек. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
использует интерфейс MCI http://msdn.microsoft.com/en-us/library/dd...v=VS.85%29.aspx
Можно посмотреть чего какой минимум MCI команд нужен и реализовать и реализовать в обход его. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Никак. TMediaPlayer это визуальный компонент, обертка над MCI (см сообщение Alexeis). Без родительской формы он работать не будет. А почему вам нужно именно в потоке? А в нормальном виде чем не устраивает? |
|||
|
||||
| livo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
Alexeis, спасибо, попробую вручную использовать MCI.
xvr, подсчет длительностей звучания дорожек нужно делать только в потоке. Если сделать иначе, то скажем при добавлении 1000 файлов можно идти попить чайку, а после садиться слушать музыку. |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 11 Всего: 18 |
||||
|
||||
| livo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.10.2007 Репутация: 1 Всего: 1 |
Метод Open() не срабатывает. Используя MCI в обход TMediaPlayer"а мне удалось решить задачу. Вот функция, которая вычисляет длину звукового файла. Значения верные для wav,wma,mp3; для других форматов не проверял. Результат в миллисекундах.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |