- 0
Динамическое создание TMediaPlayer
-
Похожий контент
-
- 10 ответов
- 2 510 просмотров
-
- 4 ответа
- 2 318 просмотров
-
- 1 ответ
- 1 540 просмотров
-
- 1 ответ
- 2 293 просмотра
-
Как растянуть видео на весь MediaPlayerControl?
От DANILICH DH,
- TMediaPlayer
- TMediaPlayerControl
- (и ещё 1 )
- 2 ответа
- 2 230 просмотров
-
- 6 ответов
- 2 560 просмотров
-
TMediaPlayer [Отклонение] TMediaPlayerControl не скрывается, если он лежит на вкладке, которая скрывается
От brunnengi,
- TMediaPlayerControl
- TTabControl
- (и ещё 1 )
- 1 ответ
- 1 997 просмотров
-
- 27 ответов
- 7 125 просмотров
-
TMediaPlayer, воспроизведение списка видео файлов по порядку
От FeLDMARShaL,
- Delphi XE7
- TMediaPlayer
- (и ещё 1 )
- 8 ответов
- 6 383 просмотра
-
TMediaPlayer [Android] При задании нового видео-файла TMediaPlayer у меня вываливается из памяти программа. В чем может быть причина?
От Kitty,
- 7 ответов
- 4 131 просмотр
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
c_breaker
Добрый день!
Пытаюсь побороть странную проблему.
Есть задеплоеный звук формата mp3.
Есть кнопка, по которой этот звук проигрывается при помощи лежащего на форме медиаплеера.
все гениальное просто, и сколько бы я не нажимал на кнопку - звук проигрывается как в эмуляторе, так и на устройстве.
Далее. Есть класс, скажем так - банк медиаплееров. Он создает их динамически:
procedure TSoundBank.AddSound(SoundType: TSoundTypes; FileName: String); var mp: TMediaPlayer; i: integer; begin for i := 0 to FSounds.Count-1 do if FSounds[i].Tag = ord(SoundType) then raise Exception.Create('Sound of type TSoundTypes('+IntToStr(Ord(SoundType))+') already added!'); mp := TMediaPlayer.Create(FOwner); // эту и следующую строку я добавил уже потом, попробовав привязать компонент к форме mp.Parent := FOwner; FSounds.Add(mp); mp.FileName := FileName; if mp.Media = nil then raise Exception.Create('Filе format for the file '+FileName+' doesn''t supported!'); mp.Tag := Ord(SoundType); end;И метод, проигрывающий нужный звук.
procedure TSoundBank.PlaySound(SoundType: TSoundTypes); var mp: TMediaPlayer; i: integer; begin mp := nil; for i := 0 to FSounds.Count-1 do if FSounds[i].Tag = Ord(SoundType) then mp := FSounds[i]; if mp = nil then raise Exception.Create('Cannot find sound of such type : TSoundTypes('+ IntToStr(Ord(SoundType)) + ')'); if mp.CurrentTime <> mp.Duration then mp.Stop; mp.CurrentTime := 0; mp.Volume := 1; //добавил позже на всякий случай mp.Play; end;Вот этот метод ничего не воспроизводит ни на устройстве, не на виртуалке. Причем нигде не падает, FMedia у MediaPlayer'а заполнен. Отладчик нормально проходит.
Надо отметить, что все прекрасно работает если сбилдить под винду.
Пробовал динамически создавать родной Android медиаплеер - он нормально работает на устройстве, но почему-то падает на виртуалке. но это уже другой вопрос)
Помогите разобраться в тонкостях динамического создания медиплеера, уж очень хочется пользоваться возможностью написать один код под все приложения.
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.