Spotify Looper: Day 55
Second TestFlight submission was approved! 🙌🏻
Second TestFlight submission was approved! 🙌🏻
My TestFlight app review was rejected:
==First TestFlight build==
Debugging. I’m having to systematically work through each view to see if it’s working correctly. It’s a pain, but at least it helps to see a clear path forwa...
Added a timer to spotify which changes polling interval depending on the play state
I can check for playlistItem.track using the weird if case let syntax. I think I can solve problem 2 by adding a computed property in the spotify object. How...
Starting to try and wire up the new UI to the API. Issues:
Added pinch to zoom
Finally managed to fix the scroll issue using this package suggested on my stack overflow question(this might also allow [[#^65a91c scro...
Still stuck on how to move forward with MagnifierView. Mandy suggested I post on stackoverflow, which is a great idea!
MinimapView now correctly adjusts the scroll offset in the MagnifierView window. However, I’m struggling to have things work in reverse. Because it’s a scrol...
Still making yesterday’s changes.
The scroll-in-play implementation is harder than I thought—I would need to debounce whenever the scrollview is scrolled to avoid updating the API hundreds of...
Started adding scroll-in-play to MagnifierView. I spent most of today trying to use GeometryReader to expose the ScrollView offset, but I think I only need t...
Add labels to Magnifier section.
Finished with rough mockup.
I’ve had a rethink about the UI, and so over the past few days been working on mocking that up in a new fork. Because I know that the backend is working, I’m...
Completed basic LooperView. Thinking about what happens when a loop is changed. Logic’s cycle works like this: Start playhead has no effect on anything: i...
Started looper indicator, but didn’t get too far today: too many distractions.
It turns out that Timer is far too inaccurate to use for short loops. Instead, I think AudioKit might be a good option, using something like a MIDI sequenc...
Implemented loop logic and button, but there is an issue in that it’s not super consistent. I’ll add some debug statements to figure out whether it’s a netwo...
Fixed bug on not being able to launch the app without being connected to Xcode (was using Environment variables for the client credentials)
âś… Can load the currently playing track and seek to any position using the playhead and segment buttons!!!
Finally managed to sync up the UI to the API (with manual updates via a get button)! Created a State variable for position in Playhead (to allow for locally ...
No luck. I’m not clear on the update model in my head. The PlayheadNavigationView isn’t working because I’ve not clearly defined whether it should take a bin...
sigh the iOS API does work, but playerStateDidChange only updates on play/pause or new track, so isn’t going to work for updating the progress ❌
Implemented a method on Spotify to retrieve the current playback as a subscriber, but this finishes after the request is sent, so I can’t use it to dynamical...
On reflection, the iOS API is too janky to get working well, so I’ve branched back to using the Web API for everything-Loopify will essentially be a controll...
Fixed issue with looping between Spotify and Loopify on auth.
Received access token and used it to get track data in a playground! 🎉
Created a new branch to try and implement my own simpler version of the WebAPI. I only really need to get track analysis, so it seems better than having to d...
Ok, the API works, and successfully downloads track analysis payload, but I’m not sure I like or need the SpotifyWebController class…it seems a bit redundant...
Trying to fix compile issues with frameworks. So far I think there are two independent issues:
Imported the webAPI framework, but having some build issues (probably a result of changing the App name yesterday). Currently unable to run previews in the a...
First commit! I have a working playheadNavigationView that responds to dragging and tapping to update the playhead position on the timeline and segments.
Imported and displayed sample track data 🙌🏻
Finished the timeline (the longer playhead will go on top of the entire playheadnavigation). Added drag gesture to update position of playhead, and call a fu...
Still messing with the timeline view trying to align the controls (specifically the playhead indicator which should extend over the other views). I need to g...
Started with TimelineView. I found some code for a Vertical slider (which bizarrely doesn’t exist as a standard control). I’ll modify this to become the play...
Generalised sectionView into SegmentView to apply to all TimeUnit instances.
Split out sectionView as a subview in playheadNavigationView. Built the basic structure. Trying to work out how to differentiate between adjacent sections. I...
Created a basic design concept.
The above Spotify clone only uses 30s previews in AVPlayer. I think that the initial concept of slowing down the app is not feasible right now. :( However, I...
Successfully obtained playerstate. Had a lot of issues with getting the correct syntax, I think because the expected type was <Any?> and I was explicit...
Managed to get a live update of playerState and the play/pause toggle will switch when the Spotify app changes state. But it’s not two-way yet.
Fixed the callback issue. I had the wrong bundle id set in Xcode 🤦🏻‍♂️
Fixed the Obj-C import, and app launches, but gets caught in a loop authorising with Spotify
Work though iOS SDK tutorial
Are there any existing DJ apps? Are there any existing DJ web implementations?
There doesn’t appear to be a way to get the raw PCM audio stream directly from any of the official APIs—they all implement their own player is some way. Ther...