Allows the birdwatcher to record birdcalls in the field, for later identification

Overview

iBirdcall Librarian

By Jonathan Mason for Project: You Decide!, iOS Developer Nanodegree.

Allows the birdwatcher to record birdcalls in the field, for later identification.

A birdcall is sometimes the best way to identify a bird. However, it is difficult to remember a sound, and many birdcalls are also indistinct, so that when attempting to match the remembered birdcall to an audio reference guide, e.g. a CD, it is often an almost impossible task.

The location, time and date of the recording are automatically captured along with each recording. Other information may also be entered, including species, title and notes.

Once a species has been entered, an image is downloaded form the internet and saved with the birdcall. This can be changed at any time by simply tapping the image.

Past recordings can be reviewed either on a map or in a list.

Notes for Building and Running App

It should be possible to build and run the app using the code as it is.

Development Tools

iBirdcall Librarian was developed using:

  • XCode 13.1
  • Swift 5
  • UIKit/Storyboard

External Libraries/Web APIs

  • Flickr API (key already included in apiKey constant of FlickrClient class).

Implementation Notes

  • Internet access is used by Details screen to load and update image corresponding to entered bird species.
  • The Auto-Play setting and map state is persisted to UserDefaults.
  • Birdcall meta-data is persisted to Core Data.
  • Recordings are saved as files with unique UUIDs.

User Guide

Main Screen

The Main screen is the first screen to be shown and can be toggled between Map and List modes using the Map and List buttons at the bottom of the screen. The starting mode is Map.

Map Mode

Map mode shows a map of the current or last viewed location. A past recording is represented as a pin. The map can be zoomed and moved in the usual way. Changes to map zoom level and position are automatically persisted.

Record: There are 2 round Record buttons, a large red one to the top-right of the screen and a smaller one in the top-left of the navigation bar. Pressing either of these will show the Record screen and immediately begin recording.

Pin: Selecting a pin by tapping it shows a bubble containing a summary of the birdcall. Pressing the bubble itself shows the details of the birdcall in the Details screen.

Settings: Pressing the Settings button shows the Settings screen.

Info: Pressing the Info button shows the Info screen.

List Mode

List mode shows a list of past recordings, newest first. A past recording is represented as a row of the list.

Record: Same as Map mode.

Row: Selecting a row by tapping it shows the details of the birdcall in the Details screen.

Settings: Same as Map mode.

Info: Same as Map mode.

Record Screen

When shown, the Record screen immediately begins recording, which is indicated by a flashing red, ON-AIR indicator. Date, time and location are also automatically captured. A default title is shown along with the captured date and time.

Stop: There are 2 square Stop buttons, a large black one to the bottom-right of the screen and a smaller one in the top-left of the navigation bar. Pressing either of these will stop the recording. The flashing red ON-AIR indicator changes to OFF-AIR to indicate the recording has been stopped. The recording is automatically saved and the screen closed, returning to the main screen. The main screen shows the newly recorded birdcall, either at its location on the map or at the top of the list.

Details Screen

The details screen shows the details of the birdcall.

Species: Enter or edit speicies, if known, e.g. Coot, Kestrel, Wren. As soon as editing finishes, a corresponding image is downloaded from the internet.

Title: Edit title. A default title is automatically generated at the time of recording based upon the time of day, i.e. morning, afternoon, evening or night.

Notes: Enter or edit any notes about the bird or recording.

Latitude and Longitude: Location of birdcall; cannot be edited.

Date and time: Date and time of birdcall; cannot be edited.

Image: Image corresponding to species, if entered; downloaded from the internet. To change, for whatever reason, simply tap the image.

Play: There are 2 triangular Play buttons, a large green one to the top-right of the screen and a smaller one in the top-left of the navigation bar. Press either of these to play the recording of the birdcall. The birdcall can also be set to automatically play as the Details screen is shown by enabling the Auto-Play setting. See the Settings screen.

Delete: Press this button to delete the birdcall, which also automatically closes the screen.

Settings Screen

Contains the settings of the app.

Auto-Play: If enabled, automatically plays the birdcall when showing the Details screen.

Info Screen

Contains information about the app, including acknowledgments.

You might also like...
A menu bar app to change input source swiftly using shortcuts on macOS Big Sur or later.

Source Switcher A menu bar app to change input sources swiftly using shortcuts on macOS Big Sur and later. View screenshots Introduction This app uses

Log every incoming notification to view them again later, also includes attachments and advanced settings to configure

Vē Natively integrated notification logger Installation Add this repository to your package manager

Bookmark important links with categories to read them later on the go!
Bookmark important links with categories to read them later on the go!

Kicking Off Hacktoberfest with ACM-VIT! Sticky Links Save link of your favourite websites, articles, videos and pretty much anything! Overview This is

macOS app to save links for later
macOS app to save links for later

Later Later is a SwiftUI, macOS app to store and save links for later use! Why? I was tired of Reddit's terrible post saving, and wanted an easy, conv

Zilla connect is an easy, fast and secure way for your users to buy now and pay later from your app

Zilla Checkout iOS SDK Zilla connect is an easy, fast and secure way for your us

MrCode is a simple GitHub iPhone App that can cache Markdown content (include images in HTML) for read it later.
MrCode is a simple GitHub iPhone App that can cache Markdown content (include images in HTML) for read it later.

MrCode is a simple GitHub iPhone App that can cache Markdown content (include images in HTML) for read it later.

Save all your Mac apps for later with one click 🖱️

Later videoplayback.mp4 Save all your Mac apps for later with one click 🖱️ Later is a Mac menu bar app that clears and restores your workspace with e

An iOS Framework Capture & record ARKit videos 📹, photos 🌄, Live Photos 🎇, and GIFs 🎆.
An iOS Framework Capture & record ARKit videos 📹, photos 🌄, Live Photos 🎇, and GIFs 🎆.

An iOS Framework that enables developers to capture videos 📹 , photos 🌄 , Live Photos 🎇 , and GIFs 🎆 with ARKit content.

A minimalistic, thread safe, non-boilerplate and super easy to use version of Active Record on Core Data.
A minimalistic, thread safe, non-boilerplate and super easy to use version of Active Record on Core Data.

Skopelos A minimalistic, thread-safe, non-boilerplate and super easy to use version of Active Record on Core Data. Simply all you need for doing Core

SwiftCop is a validation library fully written in Swift and inspired by the clarity of Ruby On Rails Active Record validations.
SwiftCop is a validation library fully written in Swift and inspired by the clarity of Ruby On Rails Active Record validations.

SwiftCop is a validation library fully written in Swift and inspired by the clarity of Ruby On Rails Active Record validations. Objective Build a stan

🌤 Swift Combine extensions for asynchronous CloudKit record processing

Swift Combine extensions for asynchronous CloudKit record processing. Designed for simplicity.

iOS app to record how much things cost using various data persistence implementations.
iOS app to record how much things cost using various data persistence implementations.

how-much iOS app to record how much things cost using various data persistence implementations. The basic data unit is an item, a simple dictionary: {

A fully functional short video app project.Record a six secends video while playing prank sounds.

prankPro A fully functional short video app project How to Install 1. use coconapod to init your xcode environment. 2. change the app-keys in `applica

SwiftUI App to view the App Activity Record from iOS 15
SwiftUI App to view the App Activity Record from iOS 15

App Activity Viewer A viewer for the iOS 15 "Record App Activity" export. FAQ How do I create an App Activity Report? Go to the "Settings" app of your

📸 iOS Media Capture – features touch-to-record video, slow motion, and photography
📸 iOS Media Capture – features touch-to-record video, slow motion, and photography

PBJVision PBJVision is a camera library for iOS that enables easy integration of special capture features and camera interface customizations in your

iOS camera engine with Vine-like tap to record, animatable filters, slow motion, segments editing
iOS camera engine with Vine-like tap to record, animatable filters, slow motion, segments editing

SCRecorder A Vine/Instagram like audio/video recorder and filter framework in Objective-C. In short, here is a short list of the cool things you can d

Record your beats easily with DongZ DaZ
Record your beats easily with DongZ DaZ

DongZ DaZ Record your beats easily with DongZ DaZ. Table of Contents Introduction Technique Features Feedback Introduction A new way to record and sha

Swift extensions for asynchronous CloudKit record processing

⛅️ AsyncCloudKit Swift extensions for asynchronous CloudKit record processing. D

DotsTest - Create a little Record application and using Pinata for API

Technical Test Create a little Record application and using Pinata for API. The

Owner
Jonathan Mason
An accomplished Senior Software Developer with extensive experience as a developer in .NET and more recently Android, including a portfolio of apps published...
Jonathan Mason
MusicAlbumApp - Applications for training networking, field validation, screen transitions, and GCD

MusicAlbumApp This is an educational application for finding music albums and vi

Vladislav 1 Jul 1, 2022
Magical Data Modeling Framework for JSON - allows rapid creation of smart data models. You can use it in your iOS, macOS, watchOS and tvOS apps.

JSONModel - Magical Data Modeling Framework for JSON JSONModel allows rapid creation of smart data models. You can use it in your iOS, macOS, watchOS

JSONModel 6.9k Dec 8, 2022
Magical Data Modeling Framework for JSON - allows rapid creation of smart data models. You can use it in your iOS, macOS, watchOS and tvOS apps.

JSONModel - Magical Data Modeling Framework for JSON JSONModel allows rapid creation of smart data models. You can use it in your iOS, macOS, watchOS

JSONModel 6.8k Nov 19, 2021
Codable code is a Swift Package that allows you to convert JSON Strings into Swift structs

Codable code is a Swift Package that allows you to convert JSON Strings into Swift structs.

Julio Cesar Guzman Villanueva 2 Oct 6, 2022
Automatic spoken language identification (LID) using deep learning.

iLID Automatic spoken language identification (LID) using deep learning. Motivation We wanted to classify the spoken language within audio files, a pr

Thomas Werkmeister 85 Apr 3, 2022
A passcode entry field for macOS similar to Apple's two-factor authentication field.

DSFPasscodeView A passcode entry field for macOS similar to Apple's two-factor authentication field. About The control is made up of multiple groups o

Darren Ford 10 Nov 12, 2022
🎉 WWDC 2021 Swift Student Challenge Winner 🎉 Dance Party allows users to record choreography and play against other users to try and match the key poses!

?? Dance Party ?? ?? WWDC 2021 Swift Student Challenge Winner ?? Installation Steps (Works on iPad Only) Clone or Download Unzip the .playgroundbook.z

Alan Yan 7 Oct 17, 2022
A drop-in universal library allows to record audio within the app with a nice User Interface.

IQAudioRecorderController IQAudioRecorderController is a drop-in universal library allows to record and crop audio within the app with a nice User Int

Mohd Iftekhar Qurashi 637 Nov 17, 2022
A custom stretchable header view for UIScrollView or any its subclasses with UIActivityIndicatorView and iPhone X safe area support for content reloading. Built for iOS 10 and later.

Arale A custom stretchable header view for UIScrollView or any its subclasses with UIActivityIndicatorView support for reloading your content. Built f

Putra Z. 43 Feb 4, 2022
Socket.io iOS and OSX Client compatible with v1.0 and later

SocketIO-Kit ⚠️ This project is no longer maintained. Please use the official framework Socket.IO-Client-Swift. SocketIO-Kit is a Socket.io iOS client

Ricardo Pereira 140 Mar 9, 2022