The Amazing Audio Engine is a sophisticated framework for iOS audio applications, built so you don't have to.

Overview

Important Notice: The Amazing Audio Engine has been retired. See the announcement here

The Amazing Audio Engine

The Amazing Audio Engine is a sophisticated framework for iOS audio applications, built so you don't have to.

It is designed to be very easy to work with, and handles all of the intricacies of iOS audio on your behalf.

Built upon the efficient and low-latency Core Audio Remote IO system, The Amazing Audio Engine lets you get to work on making your app great instead of reinventing the wheel.

See https://youtu.be/OZQT4IGS8mA for introductory video.

See http://theamazingaudioengine.com for details and http://theamazingaudioengine.com/doc2 for documentation.

TAAE was written by developer of Audiobus and Loopy Michael Tyson, in consultation with Jonatan Liljedahl, developer of AUM and AudioShare.

The Amazing Audio Engine Library License

Copyright (C) 2012-2016 A Tasty Pixel

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.

  2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.

  3. This notice may not be removed or altered from any source distribution.

The Amazing Audio Engine Sample Code (TAAESample) License

Strictly for educational purposes only. No part of TAAESample is to be distributed in any form other than as source code within the TAAE2 repository.

Comments
  • OS X Fixes

    OS X Fixes

    This fixes a few issues with the OS X version of TAAE2. With these changes, I was able to get a basic Mac app working.

    The first fix is in -[AEIOAudioUnit streamFormatForDefaultDeviceScope:], it was trying write an AudioStreamBasicDescription into an AudioDeviceID (likely because it was copy-pasted from the method above it).

    The second fix guards out certain parts of -[AEIOAudioUnit setup:] that don't apply on OS X. It skips setting kAudioOutputUnitProperty_EnableIO (only applies to AURemoteIO unit on iOS) and skips setting the render callback or input callback, depending on whether we're setting up for input or output. I'm not sure if the conditions I'm using are ideal (if (TARGET_OS_IPHONE || self.outputEnabled) etc), so that might need to be tweaked to always check for input/output enabled, even on iOS.

    opened by jayrhynas 10
  • AEContext->frameIndex

    AEContext->frameIndex

    I would like to see a UInt64 frameIndex added to the rendercontext which basically would be the equivalent of timestamp->mSampleTime minus the pitfalls of the AudioTimeStamp and floatingpoint bs.

    opened by 32Beat 9
  • Confused on how to add the library to a project

    Confused on how to add the library to a project

    Hey Michael,

    First off thanks for all of the hard work that you put into the original TAAE, this is my first time using it but have been a fan and following the progress over the years. Was really interested in this re-write, so wanted to start testing it.

    I had no problem installing the original TAAE via Cocoapods in a project a few minutes ago, but having trouble installing this one. I dragged the files over from the sample, but i'm getting "file not found" errors in TheAmazingAudioEngine.h file.

    Am I understanding correctly that this is a new library, or is it still utilizing the old one? Would love to install this ASAP so I can continue testing.

    Thanks.

    opened by mitchellporter 8
  • Bug with HeadPhones

    Bug with HeadPhones

    Hey Michael,

    TAAE2 Lib seems to have a bug with the headphones. You can reproduce easily the bug with your sample. Just kill the sample app, Plug your headphones launch the sample app and play a beat The beat seems to be 2 times faster

    opened by darnat 5
  • Added AEMeteringModule

    Added AEMeteringModule

    I cleaned up the files a bit as per your suggestions first, then merged just the AEMeteringModule.h/m files into master. I updated TheAmazingAudioEngine.h to import the new files.

    opened by jcypher 5
  • Odd behavior when accessing out-of-bounds index for AEArray

    Odd behavior when accessing out-of-bounds index for AEArray

    I noticed some odd behavior when using an AEArray inside a renderer.block today (which may be intentional actually). Let me know if this is actually desired behavior though, if not, it should be a pretty easy fix that I can throw into a PR.

    1. Create an AEArray of NSNumbers of type AESeconds for demonstration purposes

    self.durationArray = [[AEArray alloc] init]; NSMutableArray *intervalArray = [[NSMutableArray alloc] init]; for (int i = 0; i < 3; i++) { [intervalArray addObject:@((AESeconds)i)]; } [self.durationArray updateWithContentsOfArray:intervalArray];

    1. Now if you use a subscript to access something out of bounds of the array, I would expect an exception to be thrown. Instead, it appears that the thread just gets locked and the execution stops at the line in which the index is being accessed out of bounds. For instance, if I put a breakpoint on the following line, which is out of bounds of the array, the thread does not continue past that line of execution:

    AESeconds seconds = [self.durationArray[6] doubleValue];

    Is this expected or should there be an exception thrown? Maybe I'm just getting odd behavior since I have only tested this inside the renderer.block which is happening on the core audio thread, so you may have some insight into what is going on. Thanks!

    opened by manderson-productions 4
  • Should AEAudioFileOutput call AEManagedValueCommitPendingUpdates ?

    Should AEAudioFileOutput call AEManagedValueCommitPendingUpdates ?

    The docs for AEManagedValueCommitPendingUpdates state:

    "If you are not using AEAudioUnitOutput, then you must call the AEManagedValueCommitPendingUpdates function at the beginning of your main render loop."

    But in reading AEAudioFileOutput, I don't see where AEManagedValueCommitPendingUpdates is called. Should it be called somewhere near line 71 of AEAudioFileOutput.m? (Top of the while loop inside of |AEAudioFileOutput runForDuration:completionBlock:|

    opened by jackpal 4
  • Crash when using `AEAudioFilePlayerModule`

    Crash when using `AEAudioFilePlayerModule`

    Hey,

    I get a crash when I use AEAudioFilePlayerModule to play audio stored in a file.

    Steps to reproduce:

    1. Start playing content of the audio file using AEAudioFilePlayerModule class.
    2. Set all references to the instance of the AEAudioFilePlayerModule class to nil in the completion block of the aforementioned class. In most cases there application keeps only one instance to that object.

    Block of the renderer looks in the following way:

    __weak typeof(self) weakSelf = self;
    _renderer.block = ^(const AERenderContext * _Nonnull context) {
         __strong typeof(weakSelf) self = weakSelf;
        AEModuleProcess(self.audioFilePlayerModule, context);
        AERenderContextOutput(context, 1);
    }
    

    Result:

    1. Application crashes.

    Expected result:

    1. No crash. 😀

    crashscreenshot

    opened by Augustyniak 4
  • iOS forcing setPreferredIOBufferDuration

    iOS forcing setPreferredIOBufferDuration

    I ran into a problem of frame sizes being a power of 2 on iOS (tested on iPhone 6+).

    For example, setting setPreferredIOBufferDuration:0.01 in "TAAESample/Classes/AEAudioController.m" will result in a buffer size of 512 on the iPhone 6+ (sample rate is 44100), which is ~11.6ms of data vs the 10ms that I'd like the buffer to contain (so a buffer size of 441).

    Is this possible? If so, how would I force each buffer duration to be the specified length? Basically, I'd like to get 10ms buffers of microphone data.

    opened by Artaches 3
  • Readme Organization

    Readme Organization

    Hey, your library is really interesting.

    The only problem I found was the README.md, which lacks information. I created this iOS Open source Readme Template so you can take a look on how to better organize.

    If you want, I can help you to do it.

    What are your thoughts?

    opened by lfarah 3
  • Problem Record Input

    Problem Record Input

    I think the library has a main issue which that is impossible to record only the input, it causes a EXC_BAD_ACCESS on "ExtAudioFileWriteAsync"

    opened by darnat 3
  • how to use playAtTime

    how to use playAtTime

    i need play 2 beat with different time ,first on the 1s, tow with 3s . how to use playAtTime.

    i try use

    
     [loop1 playAtTime:AETimeStampNone];
    
     AudioTimeStamp time = AETimeStampWithSamples(5 *self.saveRenderer.sampleRate);
    
    [loop2 playAtTime:time];
    
    

    loop1 work done! but loop2 it not work!

    opened by davieds 0
  • Feature request: Podspec

    Feature request: Podspec

    Hi, I'm aware of the retired situation of TAAE2, but I wonder if someone could help making a podspec file for TAAE2 similar to the podspec file in TAAE 1
    thank you!

    opened by alfonsodev 0
  • React Native version?

    React Native version?

    Hello guys,

    Is there anyone who converted this library into React Native?

    I would love to use this on React Native... https://facebook.github.io/react-native/

    opened by ghost 1
  • Remove echo effect when recording using Mic

    Remove echo effect when recording using Mic

    I am getting echo effect when recording from Mic. But when record using only instruments, it's don't have any echo effect. How to remove echo effect. Attached sample file. Recording.m4a.zip

    opened by girishagsft 1
  • Accessin rear mic and doing an FFT

    Accessin rear mic and doing an FFT

    Is it possible to access rear mic and do FFT with audio data on any of the mic data? Let me know. I came across your remoteio page and I am trying to record audio data but have not been successful. I am using auriotouch source code and I want to record and play audio data from rear microphone..

    opened by sriranjanr 0
AudiosPlugin is a Godot iOS Audio Plugin that resolves the audio recording issue in iOS for Godot Engine.

This plugin solves the Godot game engine audio recording and playback issue in iOS devices. Please open the Audios Plugin XCode Project and compile the project. You can also use the libaudios_plugin.a binary in your project.

null 3 Dec 22, 2022
Functional DSP / Audio Framework for Swift

Lullaby Lullaby is an audio synthesis framework for Swift that supports both macOS and Linux! It was inspired by other audio environments like FAUST,

Jae 16 Nov 5, 2022
Porcupine is a highly-accurate and lightweight wake word engine.

Porcupine Made in Vancouver, Canada by Picovoice Porcupine is a highly-accurate and lightweight wake word engine. It enables building always-listening

Picovoice 2.8k Jan 7, 2023
Soundable is a tiny library that uses AVFoundation to manage the playing of sounds in iOS applications in a simple and easy way

Soundable is a tiny library that uses AVFoundation to manage the playing of sounds in iOS applications in a simple and easy way. You can play

Luis Cárdenas 89 Nov 21, 2022
AudioKit is an audio synthesis, processing, and analysis platform for iOS, macOS, and tvOS.

AudioKit is an audio synthesis, processing, and analysis platform for iOS, macOS (including Catalyst), and tvOS. Installation To add AudioKit

AudioKit 9.5k Dec 31, 2022
AudioPlayer is a simple class for playing audio in iOS, macOS and tvOS apps.

AudioPlayer AudioPlayer is a simple class for playing audio in iOS, macOS and tvOS apps.

Tom Baranes 260 Nov 27, 2022
Swift audio synthesis, processing, & analysis platform for iOS, macOS and tvOS

AudioKit AudioKit is an audio synthesis, processing, and analysis platform for iOS, macOS (including Catalyst), and tvOS. Installation To add AudioKit

AudioKit 8.7k Sep 30, 2021
Voice Memos is an audio recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Swift.

VoiceMemos Voice Memos is a voice recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Sw

Zhouqi Mo 322 Aug 4, 2022
Painless high-performance audio on iOS and Mac OS X

An analgesic for high-performance audio on iOS and OSX. Really fast audio in iOS and Mac OS X using Audio Units is hard, and will leave you scarred an

Alex Wiltschko 2.2k Nov 23, 2022
Audio Filters on iOS and OSX

Audio Filters on iOS and OSX Implement high quality audio filters with just a few lines of code and Novocaine, or your own audio library of choice. NV

Bart Olsthoorn 411 Dec 16, 2022
AudioPlayer is syntax and feature sugar over AVPlayer. It plays your audio files (local & remote).

AudioPlayer AudioPlayer is a wrapper around AVPlayer. It also offers cool features such as: Quality control based on number of interruption (buffering

Kevin Delannoy 676 Dec 25, 2022
Beethoven is an audio processing Swift library

Beethoven is an audio processing Swift library that provides an easy-to-use interface to solve an age-old problem of pitch detection of musical signals.

Vadym Markov 735 Dec 24, 2022
FDWaveformView is an easy way to display an audio waveform in your app

FDWaveformView is an easy way to display an audio waveform in your app. It is a nice visualization to show a playing audio file or to select a position in a file.

William Entriken 1.1k Dec 21, 2022
SwiftAudioPlayer - Swift-based audio player with AVAudioEngine as its base

SwiftAudioPlayer Swift-based audio player with AVAudioEngine as its base. Allows for: streaming online audio, playing local file, changing audio speed

null 417 Jan 7, 2023
YiVideoEditor is a library for rotating, cropping, adding layers (watermark) and as well as adding audio (music) to the videos.

YiVideoEditor YiVideoEditor is a library for rotating, cropping, adding layers (watermark) and as well as adding audio (music) to the videos. YiVideoE

coderyi 97 Dec 14, 2022
App for adding and listening audio files

SomeSa SomeSa (самса) – приложение, позволяющее загружать и воспроизводить произвольные аудиофайлы. Протестировано на форматах файлов .wav и .mp3, раз

Yegor Dobrodeyev 0 Nov 7, 2021
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
Audio visualisation of song

SonogramView Audio visualisation of song Requirements iOS 8.0+ macOS 10.10+ Xcode 8.0+ Installation: Manually First Check SonogramView.swift or MacSon

Gleb Karpushkin 66 Nov 3, 2022
AIB indicates for your app users which audio is playing. Just like the Podcasts app.

Audio Indicator Bars for iOS and tvOS Indicates for your app users which audio is playing. Just like the Podcasts app. Index Requirements and Details

Leonardo Cardoso 285 Nov 23, 2022