All Projects → q-p → Soundpusher

q-p / Soundpusher

Licence: mit
Virtual audio device, real-time encoder and SPDIF forwarder for macOS

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Soundpusher

Trinity
android video record editor muxer sdk
Stars: ✭ 609 (+569.23%)
Mutual labels:  audio, ffmpeg
Homebridge Camera Ffmpeg
Homebridge Plugin Providing FFmpeg-based Camera Support
Stars: ✭ 726 (+697.8%)
Mutual labels:  audio, ffmpeg
Ffmpeg Normalize
Audio Normalization for Python/ffmpeg
Stars: ✭ 631 (+593.41%)
Mutual labels:  audio, ffmpeg
Blackhole
BlackHole is a modern macOS virtual audio driver that allows applications to pass audio to other applications with zero additional latency.
Stars: ✭ 6,834 (+7409.89%)
Mutual labels:  driver, audio
Tdarr
Tdarr - Distributed transcode automation using FFmpeg/HandBrake + Audio/Video library analytics + video health checking (Windows, macOS, Linux & Docker)
Stars: ✭ 911 (+901.1%)
Mutual labels:  audio, ffmpeg
Axiom
An FFmpeg GUI for Windows
Stars: ✭ 560 (+515.38%)
Mutual labels:  audio, ffmpeg
Ffmpeg
Mirror of https://git.ffmpeg.org/ffmpeg.git
Stars: ✭ 27,382 (+29990.11%)
Mutual labels:  audio, ffmpeg
Ffmpegcore
A .NET FFMpeg/FFProbe wrapper for easily integrating media analysis and conversion into your C# applications
Stars: ✭ 429 (+371.43%)
Mutual labels:  audio, ffmpeg
Flavy
Simple API for convert audio/video files, get thumbnails from video, information of files
Stars: ✭ 25 (-72.53%)
Mutual labels:  audio, ffmpeg
Mlt
MLT Multimedia Framework
Stars: ✭ 836 (+818.68%)
Mutual labels:  audio, ffmpeg
Ffsubsync
Automagically synchronize subtitles with video.
Stars: ✭ 5,167 (+5578.02%)
Mutual labels:  audio, ffmpeg
Androidaudioconverter
Convert audio files inside your Android app easily. Supported formats: AAC, MP3, M4A, WMA, WAV and FLAC.
Stars: ✭ 1,156 (+1170.33%)
Mutual labels:  audio, ffmpeg
Mediatoolkit
A .NET library to convert and process all your video & audio files.
Stars: ✭ 492 (+440.66%)
Mutual labels:  audio, ffmpeg
Green Recorder
A simple screen recorder for Linux desktop. Supports Wayland & Xorg
Stars: ✭ 594 (+552.75%)
Mutual labels:  audio, ffmpeg
Ffmpeg Php
FFmpegPHP is a pure OO PHP port of ffmpeg-php library that was written in C. It adds an easy to use, object-oriented API for accessing and retrieving information from video and audio files. It has methods for returning frames from movie files as images that can be manipulated using PHP's image functions. This works well for automatically creating thumbnail images from movies. FFmpegPHP is also useful for reporting the duration and bitrate of audio files (mp3, wma...). FFmpegPHP can access many of the video formats supported by ffmpeg (mov, avi, mpg, wmv...)
Stars: ✭ 446 (+390.11%)
Mutual labels:  audio, ffmpeg
Roc Toolkit
Real-time audio streaming over the network.
Stars: ✭ 673 (+639.56%)
Mutual labels:  audio, real-time
Mystiq
Qt5/C++ FFmpeg Media Converter
Stars: ✭ 393 (+331.87%)
Mutual labels:  audio, ffmpeg
Awesome Video
A curated list of awesome streaming video tools, frameworks, libraries, and learning resources.
Stars: ✭ 397 (+336.26%)
Mutual labels:  audio, ffmpeg
Ffmediaelement
FFME: The Advanced WPF MediaElement (based on FFmpeg)
Stars: ✭ 733 (+705.49%)
Mutual labels:  audio, ffmpeg
Ffmpeg Example
FFMPEG 0.11-4.4/LibAV 0.8-11 example application with byte exact reading
Stars: ✭ 44 (-51.65%)
Mutual labels:  audio, ffmpeg

Sound Pusher — real-time encoded audio output for OS X

Provides a virtual 5.1-channel audio output device whose contents are real-time encoded to AC3 and sent as digital SPDIF stream to a real audio device output.

WARNING: Please turn down the speaker / headphone volume before running this application, as any component misinterpreting a compressed audio stream as "normal" audio signals may result in unexpectedly loud noise.

Requirements

The application is being developed on OS X 11 "Big Sur", but should work back to OS X 10.14 "Mojave" as well. It requires a compatible audio device capable of outputting compressed AC3 audio formats (format IDs ac-3, cac3, IAC3, iac3). All testing was done with cac3 (aka kAudioFormat60958AC3).

Usage

There are two components required to make this work:

  1. SoundPusherAudio — A user-space (sand-boxed) CoreAudio driver (aka AudioServerPlugin) that provides a 5.1 channel output stream whose contents are mirrored ("looped back") to its own input stream. This allows applications to process the audio output of the system (if it is sent to the SoundPusher Audio device). SoundPusherAudio.driver must be installed (copied) into the /Library/Audio/Plug-Ins/HAL directory. This driver was previously called Loopback Audio and you may have to remove the old version (called LoopbackAudio.driver) manually. Instead of this, you can also use any other suitable (6 channel, 48kHz) input device, e.g. Rogue Amoeba's Loopback.
  2. SoundPusher — An application that continuously reads audio from SoundPusher Audio (or any other suitable) device, encodes it into a compressed format, and then sends that compressed stream to a (hopefully) real sound device's digital output stream. This is controlled through its menu bar extra.

Once the driver is installed and SoundPusher running, you should be able to select the desired combination of supported input and digital output devices (which will forward any sound output from the input device to the designated digital output). SoundPusher will set the default output device to the selected input device (e.g. SoundPusher Audio) if it was previously set to the device used for digital output.

Contact & Support

Please report any issues on GitHub.

Dependencies

FFmpeg — libavcodec, libavformat, libswresample

Here's a script that builds a cut-down version of FFmpeg that includes all that's required for SoundPusher:

#!/bin/sh
MACOSX_DEPLOYMENT_TARGET=10.14 export MACOSX_DEPLOYMENT_TARGET
# when compiling for x86_64 on Apple Silicon (aarch64) you probably want to install yasm and add the following:
# --extra-cflags="-target x86_64-apple-macos10.14" --extra-ldflags="-target x86_64-apple-macos10.14" --arch=x86 --x86asmexe=<PATH_TO_YASM>/bin/yasm
./configure --prefix=$FFMPEG_HOME --cc=clang --extra-cflags="-fno-stack-check" --disable-static --enable-shared --disable-all --disable-autodetect --disable-programs --disable-doc --disable-everything --disable-pthreads --disable-network --disable-dct --disable-dwt --disable-lsp --disable-lzo --disable-rdft --disable-faan --disable-pixelutils --enable-avutil --enable-avcodec --enable-avformat --enable-swresample --enable-encoder=ac3 --enable-muxer=spdif
make -j8
make install
# update shared library install names
cd $FFMPEG_HOME/lib
AVUTIL_ID=`otool -D libavutil.dylib | tail -1`
AVCODEC_ID=`otool -D libavcodec.dylib | tail -1`
AVFORMAT_ID=`otool -D libavformat.dylib | tail -1`
SWRESAMPLE_ID=`otool -D libswresample.dylib | tail -1`
for lib in libavutil libavcodec libavformat libswresample
do
    install_name_tool -id @rpath/$lib.dylib -change $AVUTIL_ID @rpath/libavutil.dylib -change $AVCODEC_ID @rpath/libavcodec.dylib -change $AVFORMAT_ID @rpath/libavformat.dylib -change $SWRESAMPLE_ID @rpath/libswresample.dylib $lib.dylib
done

If you're building a universal binary (for Intel (x86_64) and Apple Silicon (aarch64)) you probably want to compile FFmpeg twice and then lipo --create <inLibA> <inLibB> -output <outLib> all the resulting libs together. Note that you should add FFMPEG_HOME in Xcode's Preferences -> Locations -> Custom Paths and point it towards the install directory of FFmpeg so that the Xcode project can find it.

Acknowledgements

This software is built on the experience of others:

  • SoundPusherAudio (formerly known as LoopbackAudio) is based on the NullAudio user-space driver provided by Apple as example code.
  • TPCircularBuffer by Michael Tyson is used to move audio and packet data around.
  • FFmpeg is used to encode to compressed formats and then mux those packets into an SPDIF compliant bit-stream.
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].