The Lot Radio App

The Lot Radio is an online independent radio station and hangout spot in Williamsburg that brings the local music community together. Being a huge fan and the digital communication manager at the radio station, I integrated some new functionalities to the previous app to enhance the streaming experience: a real-time program schedule fetched from Google Calendar, a chat room to interact with the DJs, as well as an online merchandise store. The upgraded version is currently available for download in App Store here.

The existing app has only has one page that lets audience switch between audio and video streaming:

One of the most important features that needs to be included in the app is the program schedule, so listeners are able to check upcoming shows.

I also integrated the chatroom from the website, which allows listeners to chat with live DJs on the go.

The third tab is the merch shop, where users can place radio merch orders directly in the app.

Process

App transfer & migration

  • Registered The Lot Radio Inc. apple developer account

  • Requested app transfer

  • Migrated app

Google Calendar API

  • Get calendar ID and API key for API request

  • Google Calendar API documentation 

  • find the right request parameters

  • Alamofire

  • SwiftyJson

Time zone, time format conversion

  • API request parameters in RFC3339 timestamp with mandatory time zone offset

  • RFC3339 TimeStamp standard: 2019-05-09T10:00:00-04:00, 2019-05-09T10:00:00Z

  • Request Json of schedule for next 7 days

  • Display show start/end time in local time 

  • Configure table view sections and rows

UI

  • Tab Bar Controller

  • Navigation Controller

  • Table View

  • Web View

  • UI Gesture Recognizer

  • UI Animation

Challenge

  • API call

  • Time zone/format conversion

  • Auto Layout

  • Communication

Next step

  • Fix chatroom 

  • Mixcloud archive

  • Publish app

Week 9 Non-visual Interfaces

Voice Meme is an app uses non-visual interface that adds sound effects as you talk. It is perfect for comedians, public speakers, youtubers who want to add a touch of humor as they talk to their audience.

The app detects keywords using speech recognition framework, and plays the corresponding sound file and displaying a gif. I used this SwiftGif library to load gif to UIImageView.

I was trying to determine the time it took for user to say certain words, so it only load the gif and sound file when it’s longer than a certain threshold. I tried to use lastSegment.duration. According to the definition of duration, it is the number of seconds it took for the user to say the word represented by the segment, measured from the start of the utterance. However when I printed lastSegment.duration the number seems to keep incrementing instead of returning the time it took to say the last word.

Another issue I encountered was that there is a 60 sec limit to an individual speech request, therefore it’s only going to listen for 60sec of live audio. However, I wanted the app to listen for as long as the user wants, but couldn’t figure out how to reset the SFSpeechRecognitionTask at the end of every 60 seconds.

Week 8 Augmented Reality

I created a 2D AR VJ Camera app that uses audio input to animate camera filters.

To access audio data from microphone, I used AVAudioRecorder, and followed this tutorial to get the averagePower from the recorder.

I used my own map function to scale audio level to parameters of different types of filters.

I went through the entire list of Core Image Filter Reference , and found a few that are interesting for VJ purposes, and referred to this post to set the value of filter parameters.

One issue I encountered was not all the filter parameters I saw on Core Image Filter Reference has a relative Filter Parameter keys, and I wasn’t be able to set parameters dynamically using self.currentFilter!.setValue(inputCount, forKey: ???). Later I figured out I could just use the parameter string for key.

Github link


Here’s a screen capture of the app demo, with camera facing a TV screen playing a festival set.



Week 6-7 Multipeer Connectivity

Mobile Lab Musical Chairs is a virtual musical chairs game where certain number of players occupy less number of circular buttons(chairs), each player can only occupy one button per round, whoever did not end up occupying any button lose the round.

Read More

Week 2 Piano Keyboard Lock Screen App

Originally I wanted to create a drum pad lock screen, where user would tap a certain beat pattern that matches with a predetermined beat pattern to unlock. However, in order to do that, I need a metronome to keep track of the timing and rhythm, and I need to analyze the note duration value(half note, quarter note, rest etc) and record the note pattern. As rhythm is time-based media, it is a little tricky to work with timing in Xcode at this point for me, so I decided to modify the interface from a drum pad to a piano keyboard with an octave of 8 playable C major keys. If the melody/note sequence matches the predetermined melody, it unlocks. In this way, piano keys act just like lock screen buttons, instead of displaying numbers, it plays different pitches based on the key pressed.

Read More