All Projects → PumpMagic → ostrich

PumpMagic / ostrich

Licence: MIT license
A Game Boy Sound System player for macOS, written in Swift

Programming Languages

swift
15916 projects
objective c
16641 projects - #2 most used programming language

Projects that are alternatives of or similar to ostrich

MiniGBS
Small .gbs chiptune player for Linux
Stars: ✭ 15 (-59.46%)
Mutual labels:  gameboy, chiptune, gbs
Gbemu
WebAssembly based Gameboy Emulator
Stars: ✭ 120 (+224.32%)
Mutual labels:  gameboy, gameboy-emulator
Cryboy
A Game Boy (Color) emulator written in Crystal
Stars: ✭ 68 (+83.78%)
Mutual labels:  gameboy, gameboy-emulator
Metroboy
MetroBoy - A playable, circuit-level simulation of an entire Game Boy
Stars: ✭ 169 (+356.76%)
Mutual labels:  gameboy, gameboy-emulator
Vba M Nx
WIP full featured port of VBA-M for Nintendo Switch
Stars: ✭ 11 (-70.27%)
Mutual labels:  gameboy, gameboy-emulator
Coffee Gb
Gameboy emulator in Java 8.
Stars: ✭ 953 (+2475.68%)
Mutual labels:  gameboy, gameboy-emulator
Gbemu
A Gameboy emulator in modern C++
Stars: ✭ 149 (+302.7%)
Mutual labels:  gameboy, gameboy-emulator
Gearboy
Game Boy / Gameboy Color emulator for iOS, macOS, Raspberry Pi, Windows, Linux and RetroArch.
Stars: ✭ 528 (+1327.03%)
Mutual labels:  gameboy, gameboy-emulator
Gopher Boy
🎮 A Game Boy emulator written in Go
Stars: ✭ 206 (+456.76%)
Mutual labels:  gameboy, gameboy-emulator
Goboy
Multi-platform Nintendo Game Boy Color emulator written in Go
Stars: ✭ 2,403 (+6394.59%)
Mutual labels:  gameboy, gameboy-emulator
Mgba
mGBA Game Boy Advance Emulator
Stars: ✭ 3,355 (+8967.57%)
Mutual labels:  gameboy, gameboy-emulator
RGB
RGB (Rust Game Boy) is a simple emulator for the original game boy
Stars: ✭ 19 (-48.65%)
Mutual labels:  gameboy, gameboy-emulator
Gameboy
🎮 Game Boy emulator written in Rust
Stars: ✭ 17 (-54.05%)
Mutual labels:  gameboy, gameboy-emulator
Wasmboy
Game Boy / Game Boy Color Emulator Library, 🎮written for WebAssembly using AssemblyScript. 🚀Demos built with Preact and Svelte. ⚛️
Stars: ✭ 963 (+2502.7%)
Mutual labels:  gameboy, gameboy-emulator
Mooneye Gb
A Game Boy research project and emulator written in Rust
Stars: ✭ 557 (+1405.41%)
Mutual labels:  gameboy, gameboy-emulator
Giibiiadvance
A GB, GBC and GBA emulator with GB Camera support.
Stars: ✭ 141 (+281.08%)
Mutual labels:  gameboy, gameboy-emulator
Rustyboy
A Gameboy emulator written in Rust.
Stars: ✭ 224 (+505.41%)
Mutual labels:  gameboy, gameboy-emulator
Pyboy
Game Boy emulator written in Python
Stars: ✭ 3,326 (+8889.19%)
Mutual labels:  gameboy, gameboy-emulator
Worldwide
GameBoy Color emulator written in golang.
Stars: ✭ 300 (+710.81%)
Mutual labels:  gameboy, gameboy-emulator
Jitboy
A Game Boy emulator with dynamic recompilation (JIT)
Stars: ✭ 190 (+413.51%)
Mutual labels:  gameboy, gameboy-emulator

Ostrich

Ostrich is a macOS media player app for playback of Game Boy Sound System files. Under the covers, it is a Nintendo Game Boy emulator written in Swift.

This readme captures how to build and use Ostrich. For more technical details, check out my blog post on it here.

A wild Ostrich appeared

Status

Ostrich emulates both of the Game Boy's pulse wave channels, and can play back the music from about half of the Game Boy's commercial titles. The other half require emulation of cartridge memory banking, or some of the less common LR35902 instructions, which are currently unsupported. The 4-bit wave and noise channels are also currently unsupported.

Popular working titles include Tetris, Castlevania, Double Dragon, and Batman.

Building

Ostrich is built using Xcode. It uses AudioKit, an open-source audio framework. Ostrich is most recently tested using Xcode 8.3.3 (Swift 3.1), AudioKit 3.7, and macOS 10.12.5. Ostrich requires macOS 10.11 (El Capitan) or newer.

To build Ostrich:

  1. Clone this repository
  2. Download an AudioKit macOS release; note the most recently tested version above
  3. Open the Ostrich workspace, ostrich.xcworkspace, with Xcode
  4. Install the AudioKit framework to both the gameboy and gbsplayer Xcode projects as described in the AudioKit installation guide
  5. Build the gameboy project
  6. Build the gbsplayer project

Run Ostrich by running the gbsplayer project.

Usage

Run Ostrich and load a GBS file (typically with extension .gbs) using File -> Open.

Playback controls are at the bottom portion of the interface. From left to right:

  • The directional pad controls track selection and volume control:
    • Left: previous track
    • Right: next track
    • Up: volume up
    • Down: volume down
  • The select and start buttons toggle muting of pulse channels 1 and 2, respectively
  • The B and A buttons are stop and play/pause, respectively

The rest of the interface is dedicated to playback state. From top to bottom:

  • The topmost text rows are the game name, composers, and copyright owner
  • The upper and lower waveforms represent pulse channels 1 and 2, respectively
  • The light near the bottom left represents playback state: red is stopped, yellow is paused, green is playing

Note that Ostrich may be resized for your viewing pleasure.

A newborn Ostrich

Technical Details

For technical details on Ostrich, check out my blog post on it here.

Author

Ostrich is written entirely by myself, Ryan Conway. It would not have been possible without the help of Austin Zheng and the documentation of Game Boy hardware written by many and available online. Some of this documentation is captured in resources.txt.

I set out to create Ostrich with the goals of teaching myself Swift and furthering my knowledge of hardware emulation, system design, and retro game music. To those ends I believe Ostrich has been a success.

License

Ostrich is copyright 2016-2017 Ryan Conway. Its source code is released under the MIT license; see LICENSE.txt.

Ostrich uses works that others have produced and made available under the terms of different licenses:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].