APAudioToRingVM.swift 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //
  2. // APAudioToRingVM.swift
  3. // AIPlayRingtones
  4. //
  5. // Created by mini on 2025/5/19.
  6. //
  7. import Combine
  8. import ObjectMapper
  9. class APAudioToRingVM {
  10. private var cancellables = Set<AnyCancellable>()
  11. //输入框内容
  12. @Published var promptText:String = ""
  13. @Published var ringFilePath:URL?
  14. //选择生成类类型
  15. var generateStyleIndex:Int = 0
  16. @Published var selectedGenerateModel:ASGenerateStyleModel?
  17. lazy var generateStyleModels: [ASGenerateStyleModel] = {
  18. var ptpStyleModels = [ASGenerateStyleModel]()
  19. if let dataArray = Mapper<ASGenerateStyleModel>().mapArray(JSONfile: "ring_rtr_style.json"){
  20. ptpStyleModels = dataArray
  21. if let model = dataArray.safeObj(At: generateStyleIndex) {
  22. selectedGenerateModel = model //加上默认的选择
  23. }
  24. }
  25. return ptpStyleModels
  26. }()
  27. @Published private(set) var isCanGennerate: Bool = false
  28. init(){
  29. // Publishers.CombineLatest3($promptText, $ringFilePath,$selectedGenerateModel)
  30. Publishers.CombineLatest($ringFilePath,$selectedGenerateModel)
  31. .map { ringFilePath,generateStyleModel in
  32. // 当两者长度都 > 0 时返回 true
  33. return ringFilePath != nil && generateStyleModel != nil
  34. }
  35. .assign(to: \.isCanGennerate, on: self)
  36. .store(in: &cancellables)
  37. }
  38. //用户生成图片的TSGenerateStyleModel
  39. var generateStyleModel:ASGenerateStyleModel{
  40. let generateStyleModel = selectedGenerateModel!
  41. generateStyleModel.inputText = promptText
  42. generateStyleModel.duration = 10
  43. generateStyleModel.upLoadFilePath = ringFilePath
  44. generateStyleModel.generateType = .ringToRing
  45. return generateStyleModel
  46. }
  47. }