Posted May 21, 20205 yr Проекту необходимо добавить аудиофайлы (музыка на заднем фоне и звук нажатия кнопок), как это можно реализовать в вашей библиотеке?
May 24, 20205 yr Author Не подскажете, как именно это сделать и можно ли где-то найти примеры реализации?
May 24, 20205 yr Здравствуйте У Ярослава в поставке есть файл Android.Api.Media.pas. Там реализован класс TJMediaPlayer. Один из конструкторов которого class function create(const AArg0: TJContext; const AArg1: TJUri): TJMediaPlayer; overload; Так же в этом классе есть методы procedure start; procedure stop; Я думаю, Вам стоит посмотреть в этом направлении. Спасибо
August 17, 20204 yr Сделал так: var m : JMediaPlayer; Asset: TfgAssetFile; begin m := TJMediaPlayer.Create; if TfgAssetsManager.Current.Find<TfgAssetFile>(R.Files.MUZ_MP3, Asset) then begin m.setDataSource(StringToJString(Asset.FileName)); m.start; end; end; Но звука нет. Что не так сделал?
August 18, 20204 yr Сделал вот так: var Asset: TfgAssetFile; MP : JMediaPlayer; AudioObj: JObject; begin if TfgAssetsManager.Current.Find<TfgAssetFile>(R.Files.MUZ_MP3, Asset) then begin MP := TJMediaPlayer.Create; MP.setDataSource(StringToJString(Asset.FileName)); MP.setVolume(1, 1); MP.prepare; MP.start; FreeAndNil(MP); end; end; Звук играет. Однако не уверен в этом коде и есть пару вопросов: 1. Правильно ли делать FreeAndNil тут? Если я к примеру загоню это в функцию, то так можно будет ей пользоваться часто? 2. Музыкальный файл был взят длинный и не смотря на то, что после MP.Start идёт сразу FreeAndNil, музыка продолжает играть. Меня это устраивает, просто интересно нормально ли это и правильно ли это? Не будет ли каких либо утечек?
January 11, 20214 yr 23.05.2020 в 17:03, Yaroslav Brovin сказал: Это можно сделать пока только через Android Api. Не подскажете а каким образом сейчас возможно на iOs воспроизвести звук, ну или какой то тоновый стандартный звук? Есть ли возможность? Необходимо звуковое сопровождение на реакцию.
January 11, 20214 yr Administrators Можно воспользоваться AVAudioPlayer. Нужно его создать и указать файл. А дальше все как у обычного плейера.
January 11, 20214 yr @Yaroslav Brovin большое спасибо за направление, но был бы примерчик как его создать, вот это бы помогли. За ранее прошу прощения, но никогда не делал подобного и беглый поиск ничего не дал.
January 12, 20214 yr Administrators В релизе 1.9.0.0 добавил хедеры для AVFoundation, в котором находится AVAudioPlayer. Как выйдет релиз, то вот код по воспроизведению аудио файла: uses iOS.Api.AVFoundation, iOS.Api.Helpers, iOS.Api.Foundation; var AudioPlayer: AVAudioPlayer; AudioFileUrl: NSURL; ErrorPtr: Pointer; Error: NSError; begin AudioPlayer := TAVAudioPlayer.Create; AudioFileUrl := StrToNSUrl('Имя файла'); AudioPlayer := TAVAudioPlayer.Wrap(AudioPlayer.initWithContentsOfURL(AudioFileUrl, @ErrorPtr)); if ErrorPtr = nil then begin // Не удалось открыть файл Error := TNSError.Wrap(ErrorPtr); raise Exception.Create(NSStrToStr(Error.localizedDescription)); end else begin AudioPlayer.prepareToPlay; AudioPlayer.play; end;
January 20, 20214 yr Звук почему то все равно не воспроизводит. Делаю вот так: if (TfgAssetsManager.Current.Find<TfgAssetFile>('muz', Asset)) then begin AudioPlayer := TAVAudioPlayer.Create; AudioFileUrl := StrToNSUrl(Asset.FileName); AudioPlayer := TAVAudioPlayer.Wrap(AudioPlayer.initWithContentsOfURL(AudioFileUrl, @ErrorPtr)); if ErrorPtr = nil then begin // Не удалось открыть файл Error := TNSError.Wrap(ErrorPtr); raise Exception.Create(NSStrToStr(Error.localizedDescription)); end else begin AudioPlayer.prepareToPlay; // <-- на этом месте слетает и дальше не отрабатывает. Хотя ошибок нет AudioPlayer.play; end; end; Что я делаю не так, подскажите пожалуйста.
January 20, 20214 yr Administrators В целом посмотрел. Сделал все, как по документации, но пока не работает: procedure TFormMain.PlaySound(const AAssetName: TfgAssetName); var AudioFileUrl: NSURL; Asset: TfgAssetFile; ErrorPtr: Pointer; Error: NSError; Session: AVAudioSession; d: NSTimeInterval; begin if TfgAssetsManager.Current.Find<TfgAssetFile>(AAssetName, Asset) then begin Session := TAVAudioSession.OCClass.sharedInstance; Session.setCategory(AVAudioSessionCategoryPlayback, @ErrorPtr); if ErrorPtr <> nil then begin // Не удалось задать категорию воспроизведения звуков Error := TNSError.Wrap(ErrorPtr); raise Exception.Create(NSStrToStr(Error.localizedDescription)); end; FAudioPlayer := TAVAudioPlayer.Create; AudioFileUrl := StrToNSUrl(Asset.FileName); FAudioPlayer := TAVAudioPlayer.Wrap(FAudioPlayer.initWithContentsOfURL(AudioFileUrl, @ErrorPtr)); if ErrorPtr <> nil then begin // Не удалось открыть файл Error := TNSError.Wrap(ErrorPtr); raise Exception.Create(NSStrToStr(Error.localizedDescription)); end; if FAudioPlayer.prepareToPlay then FAudioPlayer.play; end else raise Exception.CreateFmt('Cannot play sound. Asset is not available: assetName="%s"', [AAssetName]); end; Завтра продолжу. Файл открывается, но не может забуферизироваться.
January 21, 20214 yr Однако, я тоже попробовал, кстати на FMX тоже не работает, может это SDK(13.5) или особенности трансляции хедеров? Хотя демка на свифте заработала
January 21, 20214 yr Administrators Судя по документации еще надо указать специальный режим для фонового выполнения. Однако, указав его, все равно звук не работает. Посмотрю еще.
January 22, 20214 yr Если использовать TAVPlayer и Sex Pistols, то работает. procedure TFormMain.PlaySound(const AAssetName: TfgAssetName); var Asset: TfgAssetFile; ErrorPtr: Pointer; FName:string; Session: AVAudioSession; begin if TfgAssetsManager.Current.Find<TfgAssetFile>(AAssetName, Asset) then begin FName:=Asset.FileName; FAudioPlayer := TAVPlayer.Create; FAudioPlayer := TAVPlayer.Wrap(FAudioPlayer.initWithURL(TNSURL.OCClass.fileURLWithPath(StrToNSStr(FName)))); Session := TAVAudioSession.OCClass.sharedInstance; Session.setCategory(AVAudioSessionCategoryPlayback, @ErrorPtr); Session.setActive(True,@ErrorPtr); FAudioPlayer.play; end else raise Exception.CreateFmt('Cannot play sound. Asset is not available: assetName="%s"', [AAssetName]); end; testIosSound.zip
January 24, 20214 yr @Stasспасибо за ваше участие! Проверил у себя, звук работает, все отлично! На заметку, в ассет менеджере файл заливаем и ставим место распаковки: Закрытые документы (private)! Иначе чета он там файл не может создать и т.д.
Create an account or sign in to comment