Перейти к содержанию
Fire Monkey от А до Я

c_breaker

Пользователи
  • Постов

    12
  • Зарегистрирован

  • Посещение

Посетители профиля

885 просмотров профиля
  1. Поставил родной Сиэтловский SDK&NDK - все снова заработало. Танцы с бубном, как всегда.
  2. А это в принципе нормально, что после смены sdk, забилдив и установив на то же самое устройство рабочтавший ранее релиз, причем совершенно без измнений, вылез этот баг? Конечно я не сразу бросился сюда писать, я заходил и в отладчик, и logcat поизучал. стэк пустой, там только системные модули.
  3. Переустановил SDK и NDK - выкачал свежие с гугла. После этого приложение которое нормально работало, стало падать при запуске с ошибкой Exception class Segmentation fault (11) Переустанавливать все снова очень не хочется - что можно сделать кроме этого?
  4. Может кому поможет - проблема решилась использованием андроидовского SoundPool: создание: FSoundPool := TJSoundPool.JavaClass.init(10, TJAudioManager.JavaClass.STREAM_MUSIC,0); добавление звуков: FSoundPool.load(StringToJString(FileName),1); проигрывание: FSoundPool.play(i,1,1,0,0,1);
  5. android тот же код под виндой работает как и предполагалось. currenttime обнуляю. begin Logger.Log(Format('-->>Enter TSoundBank.PlaySound(SoundType(%d))',[Ord(SoundType)])); if not FSounds.TryGetValue(SoundType, mp) then raise Exception.Create('Cannot find sound of such type : TSoundTypes('+ IntToStr(Ord(SoundType)) + ')'); case mp.State of TMediaState.Unavailable: raise Exception.Create('Sound of such type : TSoundTypes('+ IntToStr(Ord(SoundType)) + ') is UNAVAILABLE!') ; TMediaState.Playing: begin Logger.Log(Format(' mp.State = Playing',[Ord(SoundType)])); mp.Stop; end; end; mp.CurrentTime := 0; mp.Play; Logger.Log(Format('<<--Exit TSoundBank.PlaySound(SoundType(%d))',[Ord(SoundType)])); end; в метод входит и замечательно выходит, вероятность возникновения при этом звука - пока не определена)
  6. В приложении есть коллекция медиаплееров, в каждый экземпляр медиаплеера загружен определенный файл. По таймеру проигрываются те или иные файлы. Проблема: не все звуки проигрываются. метод play вызывается, но звука нет. закономерности не обнаружил - просто какие-то съедаются. Если кто-то сталкивался с подобной проблемой, или знает, в чем дело - проконсультируйте.
  7. Добрый день. Пытаюсь запустить под отладчиком приложение под OS X. PAServer пишет >listen Process Control Server Started pid 1007 exe built Jul 18 2014 sentinelFunc 1009 и на этом дельфя подвисает. Если срубить PAServer - дельфи возвращается в режим редактирования. Не из под отладчика приложение запускается нормально.
  8. Опытным путем выяснил, что если закомментировать строчки, как ниже: // if mp.CurrentTime <> mp.Duration then // mp.Stop; mp.CurrentTime := 0; mp.Play; то плеер проигрывает звуки, правда некоторые пропускает (почему?) Если же раскомментировать mp.Stop, то не проигрывается ни одного звука (на андроиде; если забилдить приложение под винду - все хорошо). Все же не очень понятно, что я делаю не так. Фактически мне необходимо, чтобы по определенным событиям проигрывался определенный звук, причем если звук до конца еще не доиграл, а событие снова возникло - запускать звук сначала. По деструктору - проверил, TAndroidMedia.Destroy вызывается при закрытии приложения.
  9. В общем, вопрос решился созданием коллекции родных JMediaPlayer, к сожалению. Динамически созданные TMediaPlayer на андроиде проигрывать что-либо отказались. Надеюсь, разработчики предпримут какие-либо меры.
  10. Коллективный разум не может помочь?
  11. Добрый день! Пытаюсь побороть странную проблему. Есть задеплоеный звук формата mp3. Есть кнопка, по которой этот звук проигрывается при помощи лежащего на форме медиаплеера. mp.FileName := System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetPublicPath, 'beep.mp3'); mp.Play; все гениальное просто, и сколько бы я не нажимал на кнопку - звук проигрывается как в эмуляторе, так и на устройстве. Далее. Есть класс, скажем так - банк медиаплееров. Он создает их динамически: 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 медиаплеер - он нормально работает на устройстве, но почему-то падает на виртуалке. но это уже другой вопрос) Помогите разобраться в тонкостях динамического создания медиплеера, уж очень хочется пользоваться возможностью написать один код под все приложения.
×
×
  • Создать...