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

c_breaker

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

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

  • Посещение

Сообщения, опубликованные c_breaker

  1. А это в принципе нормально, что после смены sdk, забилдив и установив на то же самое устройство рабочтавший ранее релиз, причем совершенно без измнений, вылез этот баг? 

    Конечно я не сразу бросился сюда писать, я заходил и в отладчик, и logcat поизучал. стэк пустой, там только системные модули.

  2. Переустановил SDK и NDK - выкачал свежие с гугла. После этого приложение которое нормально работало, стало падать при запуске с ошибкой Exception class Segmentation fault (11)

    Переустанавливать все снова очень не хочется - что можно сделать кроме этого?

  3. Может кому поможет - проблема решилась использованием андроидовского SoundPool:

     

    создание:

     

         FSoundPool := TJSoundPool.JavaClass.init(10, TJAudioManager.JavaClass.STREAM_MUSIC,0);

     

    добавление звуков:

     

        FSoundPool.load(StringToJString(FileName),1);

     

    проигрывание:

     

        FSoundPool.play(i,1,1,0,0,1);

  4. 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;
    

    в метод входит и замечательно выходит, вероятность возникновения при этом звука - пока не определена)

  5. В приложении есть коллекция медиаплееров, в каждый экземпляр медиаплеера загружен определенный файл.

     

    По таймеру проигрываются те или иные файлы.

     

    Проблема: не все звуки проигрываются. метод play вызывается, но звука нет. закономерности не обнаружил - просто какие-то съедаются.

     

    Если кто-то сталкивался с подобной проблемой, или знает, в чем дело - проконсультируйте.

  6. Добрый день.

     

    Пытаюсь запустить под отладчиком приложение под OS X. 

    PAServer пишет

     

    >listen

    Process Control Server Started pid 1007 exe built Jul 18 2014

    sentinelFunc 1009

     

    и на этом дельфя подвисает.

     

    Если срубить PAServer - дельфи возвращается в режим редактирования.

     

    Не из под отладчика приложение запускается нормально.

  7. У вас случайно TMediaPlayer не распускается после выхода из процедуры? Проверьте вызов деструктора....

     

    Опытным путем выяснил, что если закомментировать строчки, как ниже:

     

    //  if mp.CurrentTime <> mp.Duration then
    //    mp.Stop;
      mp.CurrentTime := 0;
      mp.Play;
     
    то плеер проигрывает звуки, правда некоторые пропускает (почему?)
     
    Если же раскомментировать  mp.Stop, то не проигрывается ни одного звука (на андроиде; если забилдить приложение под винду - все хорошо).
     
    Все же не очень понятно, что я делаю не так.
     
    Фактически мне необходимо, чтобы по определенным событиям проигрывался определенный звук, причем если звук до конца еще не доиграл, а событие снова возникло - запускать звук сначала.
     
    По деструктору - проверил, TAndroidMedia.Destroy вызывается при закрытии приложения.
  8. Добрый день!

     

    Пытаюсь побороть странную проблему.

     

    Есть задеплоеный звук формата 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 медиаплеер - он нормально работает на устройстве, но почему-то падает на виртуалке. но это уже другой вопрос)

     

    Помогите разобраться в тонкостях динамического создания медиплеера, уж очень хочется пользоваться возможностью написать один код под все приложения.

     

×
×
  • Создать...