ZHTrackProcessing.swift 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. //
  2. // ZHTrackProcessing.swift
  3. // ZHWaveform_Example
  4. //
  5. // Created by wow250250 on 2018/1/2.
  6. // Copyright © 2018年 wow250250. All rights reserved.
  7. //
  8. import UIKit
  9. import AVFoundation
  10. struct ZHTrackProcessing {
  11. public static func cutAudioData(size: CGSize, recorder data: NSMutableData, scale: CGFloat) -> [CGFloat] {
  12. var filteredSamplesMA: [CGFloat] = []
  13. let sampleCount = data.length / MemoryLayout<Int>.size
  14. let binSize = CGFloat(sampleCount) / (size.width * scale)
  15. var i = 0
  16. while i < sampleCount {
  17. let rangeData = data.subdata(with: NSRange(location: i, length: 1))
  18. let item = rangeData.withUnsafeBytes({ (ptr: UnsafePointer<Int>) -> Int in
  19. return ptr.pointee
  20. })
  21. filteredSamplesMA.append(CGFloat(item))
  22. i += Int(binSize)
  23. }
  24. return trackScale(size: size, source: filteredSamplesMA)
  25. }
  26. private static func trackScale(size: CGSize, source: [CGFloat]) -> [CGFloat] {
  27. if let max = source.max() {
  28. let k = size.height / max
  29. return source.map{ $0 * k }
  30. }
  31. return source
  32. }
  33. }