Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork168
Reads an audio file and displays the waveform
License
fulldecent/FDWaveformView
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
FDWaveformView displays audio waveforms in Swift apps so users can preview audio, scrub, and pick positions with ease.
Add anFDWaveformView programmatically, then load audio. If your file is missing an extension, see theStack Overflow answer on AVURLAsset without extensions.
letthisBundle=Bundle(for:type(of:self))leturl= thisBundle.url(forResource:"Submarine", withExtension:"aiff")self.waveform.audioURL= url
Highlight a portion of the waveform to show progress.
self.waveform.highlightedSamples=0..<(self.waveform.totalSamples/2)
Render only the visible portion while progressively adding detail as you zoom.
self.waveform.zoomSamples=0..<(self.waveform.totalSamples/4)
Allow scrubbing, stretching, and scrolling with built-in gestures.
self.waveform.doesAllowScrubbing=trueself.waveform.doesAllowStretch=trueself.waveform.doesAllowScroll=true
Animate property changes for smoother UI feedback.
UIView.animate(withDuration:0.3){letrandomNumber=arc4random()%self.waveform.totalSamplesself.waveform.highlightedSamples=0..< randomNumber}
- Antialiased waveforms draw extra pixels to avoid jagged edges.
- Autolayout-driven size changes trigger re-rendering to prevent pixelation.
- Supports iOS 15+ and visionOS 1.0+.
- Includes unit tests running on GitHub Actions.
Use Swift Package Manager: in Xcode choose File > Swift Packages > Add Package Dependency and point to this repository. Legacy installation options are available if needed.
Following is the complete API for this module:
FDWaveformView(open class, subclass ofUIView)init()(public init) default initializerdelegate: FDWaveformViewDelegate?(open var, get/set) delegate for loading and rendering callbacksaudioURL: URL?(open var, get/set) audio file to render asynchronouslytotalSamples: Int(open var, get) sample count of the loaded assethighlightedSamples: CountableRange<Int>?(open var, get/set) range tinted withprogressColorzoomSamples: CountableRange<Int>(open var, get/set) range currently displayeddoesAllowScrubbing: Bool(open var, get/set) enable tap and pan scrubbingdoesAllowStretch: Bool(open var, get/set) enable pinch-to-zoomdoesAllowScroll: Bool(open var, get/set) enable panning across the waveformwavesColor: UIColor(open var, get/set) tint for the base waveform imageprogressColor: UIColor(open var, get/set) tint for the highlighted waveformloadingInProgress: Bool(open var, get) indicates async load in progress
FDWaveformViewDelegate(@objc public protocol)waveformViewWillRender(_ waveformView: FDWaveformView)(optional)waveformViewDidRender(_ waveformView: FDWaveformView)(optional)waveformViewWillLoad(_ waveformView: FDWaveformView)(optional)waveformViewDidLoad(_ waveformView: FDWaveformView)(optional)waveformDidBeginPanning(_ waveformView: FDWaveformView)(optional)waveformDidEndPanning(_ waveformView: FDWaveformView)(optional)waveformDidEndScrubbing(_ waveformView: FDWaveformView)(optional)
A couple other things are exposed that we do not consider public API:
FDWaveformView(implementsUIGestureRecognizerDelegate)gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:) -> Bool
Find an available simulator:
xcrun simctl list devices available| grep iPhoneBuild and test using a simulator ID from the output:
# Build the libraryxcodebuild build -scheme FDWaveformView -destination'id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'# Run unit testsxcodebuildtest -scheme FDWaveformView -destination'id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'# Build the Example app (requires a newer iOS simulator)cd Examplexcodebuild build -scheme Example -destination'id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
- This project's layout is based onhttps://github.com/fulldecent/swift6-module-template
About
Reads an audio file and displays the waveform
Topics
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.




