c_breaker
Пользователи-
Постов
12 -
Зарегистрирован
-
Посещение
Достижения c_breaker
-
Maka отреагировал на ответ на вопрос: Проигрывание звуков в формате .mp3 по таймеру
-
Поставил родной Сиэтловский SDK&NDK - все снова заработало. Танцы с бубном, как всегда.
-
ну вот стэк падает на строке begin
-
А это в принципе нормально, что после смены sdk, забилдив и установив на то же самое устройство рабочтавший ранее релиз, причем совершенно без измнений, вылез этот баг? Конечно я не сразу бросился сюда писать, я заходил и в отладчик, и logcat поизучал. стэк пустой, там только системные модули.
-
Переустановил SDK и NDK - выкачал свежие с гугла. После этого приложение которое нормально работало, стало падать при запуске с ошибкой Exception class Segmentation fault (11) Переустанавливать все снова очень не хочется - что можно сделать кроме этого?
-
Rusland отреагировал на ответ на вопрос: Проигрывание звуков в формате .mp3 по таймеру
-
Равиль Зарипов (ZuBy) отреагировал на ответ на вопрос: Проигрывание звуков в формате .mp3 по таймеру
-
Может кому поможет - проблема решилась использованием андроидовского SoundPool: создание: FSoundPool := TJSoundPool.JavaClass.init(10, TJAudioManager.JavaClass.STREAM_MUSIC,0); добавление звуков: FSoundPool.load(StringToJString(FileName),1); проигрывание: FSoundPool.play(i,1,1,0,0,1);
-
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; в метод входит и замечательно выходит, вероятность возникновения при этом звука - пока не определена)
-
В приложении есть коллекция медиаплееров, в каждый экземпляр медиаплеера загружен определенный файл. По таймеру проигрываются те или иные файлы. Проблема: не все звуки проигрываются. метод play вызывается, но звука нет. закономерности не обнаружил - просто какие-то съедаются. Если кто-то сталкивался с подобной проблемой, или знает, в чем дело - проконсультируйте.
-
Добрый день. Пытаюсь запустить под отладчиком приложение под OS X. PAServer пишет >listen Process Control Server Started pid 1007 exe built Jul 18 2014 sentinelFunc 1009 и на этом дельфя подвисает. Если срубить PAServer - дельфи возвращается в режим редактирования. Не из под отладчика приложение запускается нормально.
-
Опытным путем выяснил, что если закомментировать строчки, как ниже: // if mp.CurrentTime <> mp.Duration then // mp.Stop; mp.CurrentTime := 0; mp.Play; то плеер проигрывает звуки, правда некоторые пропускает (почему?) Если же раскомментировать mp.Stop, то не проигрывается ни одного звука (на андроиде; если забилдить приложение под винду - все хорошо). Все же не очень понятно, что я делаю не так. Фактически мне необходимо, чтобы по определенным событиям проигрывался определенный звук, причем если звук до конца еще не доиграл, а событие снова возникло - запускать звук сначала. По деструктору - проверил, TAndroidMedia.Destroy вызывается при закрытии приложения.
-
В общем, вопрос решился созданием коллекции родных JMediaPlayer, к сожалению. Динамически созданные TMediaPlayer на андроиде проигрывать что-либо отказались. Надеюсь, разработчики предпримут какие-либо меры.
-
Коллективный разум не может помочь?
-
Добрый день! Пытаюсь побороть странную проблему. Есть задеплоеный звук формата 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 медиаплеер - он нормально работает на устройстве, но почему-то падает на виртуалке. но это уже другой вопрос) Помогите разобраться в тонкостях динамического создания медиплеера, уж очень хочется пользоваться возможностью написать один код под все приложения.