micro-nova / amplipi Goto Github PK
View Code? Open in Web Editor NEWWhole House Audio System ๐
Home Page: https://amplipi.com
License: GNU General Public License v3.0
Whole House Audio System ๐
Home Page: https://amplipi.com
License: GNU General Public License v3.0
Add initial upgrade site which allows for file upload for updates and lets user know whether or not the upgrade was successful
Roon is a widely used music player software which streams locally from a "core" on the LAN to audio devices that support network access. It can be supported on audio equipment, include Pi-based devices like AmpliPi, by downloading and installing the Linux version of Roon Bridge. It would be great if the AmpliPi web page had a button which would cause it to download and install Roon Bridge.
Would be great if Tidal could be added with HiTide.
Tabled until later:
Snapcast support
Snapcast is a multi-room client-server audio player, where all clients are time synchronized with the server to play perfectly synced audio.
The idea is that the AmpliPi could be either a client or a server for snapcast. For larger locations you could have 2 AmpliPis in different locations powering lots of zones but minimizing wiring issues/distance. For some homes you could have the home on an AmpliPi+extenders, and portable speaker(s) or a pi+amp powering a backyard zone.
The "Monoprice 6 Zone Home Audio Multizone Controller and Amplifier Kit" has a cool feature which is a 3.5mm input jack for a Public Address system. It mutes the input audio and plays whatever comes in on the line and then resumes the channels back to where they were.
I think something similar, if not the same, would be really useful. It doesn't even need to be a hardware input jack for my use case.
Example use case: An automation in Home Assistant triggered on the doorbell that announces over the entire house that there is a visitor at the front door. If this could be done via API command that simply plays a specific audio file over all the speakers and then restores those speakers back to whatever they were playing before would be excellent.
Optionally if it could be done via ducking and not a complete cut out of the playing audio, just a lowering of the volume by some percent and the audio file played over top. If "ducking" vs "mute" could be controlled via the API command that would be even better.
AmpliPi uses an mmc on board the Pi Cm3+. To reduce the wear on the mmc, we should configure any volatile writes to use a RAM disk. Almost all of the stream config should be moved to this.
We would like to add full Alexa support for the following command structures
Some interesting links to investigate:
See: https://developer.amazon.com/en-US/docs/alexa/music-skills/steps-to-create-a-music-skill.html
Python audio support: https://github.com/alexa/skill-sample-python-audio-player/tree/master/MultiStream
Basic integration with Volumio: https://github.com/alior101/Alexa-Volumio-Plugin
Layout:
config/house.json -> /etc/amplipi.conf # includes hints for this directory layout (stop saving this all the time)
streams -> /usr/loca/bin/amplipi/streams # streaming scripts
amplipi -> /usr/local/lib/amplipi
web -> /var/web/amplipi
We still need to figure out where to put documentation, and source code
Maybe idee for next version compute module 4 from raspberry pi
Follow steps at https://github.com/DrMint/Intranet-Lets-Encrypt-Certification
It looks something like this:
Jason:
Lincoln:
Matthew:
Ben
Mark:
Ed:
Michael:
Rick:
Olek:
Mopidy is an open source music player that can play local files as well as some online sources and has a full API.
This combined with USB storage would enable the AmpliPi to play completely offline music on the system without the need for Internet or a second device (other than a USB Storage plugged into one of the USB ports).
Make an initial development release of the AmpliPi system so that it can be installed on the controller in a controlled fashion.
TBD
Use this as inspiration: https://github.com/jaedb/Iris/wiki/Getting-started#installing
sudo modprobe snd-aloop
SSE will allow notification on change events to be sent when the system state is modified. The idea is that a client registers to receive types of change events and is alerted when they happen. This will be useful for enhancing our webapp and should be useful for many different types of home automation integration.
We are testing out Nginx Unit for this right now in #83
The api should add the concept of a preset configuration.
The idea is to save specific setups and make them loadable. Here are a couple of instances I though of:
This could be tied to the concept of a play event, where when a specific source starts playing a specific preset configuration could be loaded. This has the potential to minimizes the use of the webapp for common setups.
Once play events are added many additional presets could be added. For instance there could be a whole house shairport stream that when it was played started playing music and connected all of the zones in the house to the source.
I've put some work into adding Plexamp support for the AmpliPi system - this issue will detail my findings.
Thanks to odinb1's efforts (detailed here: https://github.com/odinb/bash-plexamp-installer) I was able to reach the current state. You can install plexamp on the Pi using their script, or you can follow the official install guide here: https://forums.plex.tv/t/plexamp-for-raspberry-pi-release-notes/368282
Be sure to include the workaround that OttoKerner linked in the post above. In either guide, you will have to edit the server settings @ /home/pi/.config/Plexamp/server.json. Odinb1 talks about this on their GitHub README.md - you'll have to get a working copy of server.json from an old desktop version of plexamp.
Perhaps there's something hidden in there that we haven't been able to find - for now, plexamp plays on ch1, ch2, and ch3 when cast to. These are the channels associated with the USB sound card.
I will try to keep this issue up to date as more information comes out!
EDIT 3/30/21: Jason and I are both in an external channel of the Plexamp Slack. Elan recommended an earlier version of headless plexamp for Pi (ver. 1.x), so I'm trying that now. I don't see any differences so far.
https://files.plexapp.com/elan/plexamp-v1.0.5-pi.tar.gz
EDIT 4/19/21: The older version of Plexamp is working! We had to make some tweaks to the javascript (after de-obfuscating), but you are now able to select an audio device! We're still unable to get multiple running at the same time - it seems like this will take significant changes to the plexamp software.
EDIT 5/4/21: Gist of the file actually being used on the AmpliPi (difficult to read because it is fully obfuscated and on one line)
https://gist.github.com/micronova-jb/1156b1d04639284e5c6a354de4ec3002
De-obfuscated version:
https://gist.github.com/micronova-jb/e66e4a78ad3feaa655c292de64c189cd
Look for the specific changes around lines 25200 - 25205 in the de-obfuscated file. Basically, we have to tell it to use the MPD configuration, taking the device name. In mpd.conf, the audio device can be selected (e.g. ch2)
EDIT 5/12/21: Check out the new forum post - I detailed some more of the process here: https://forums.plex.tv/t/configuration-settings-for-playing-audio-on-a-specific-channel-of-a-usb-audio-device-connected-to-raspberry-pi/696974/11
We will need to add a background thread to check for this condition. From a web application point of view there should be a play button to restart/reconnect the stream.
Question: Should unmuting a connected group/zone restart the stream?
I checked the padnora error and output files. Looks like this needs to be added to update_config.bash to configure some of the scripts to be executable:
# make scripts executable
chmod +x eventcmd.sh shairport_metadata.bash
Add basic tests for the following interfaces
Could you publish the PCB files, not in pdf schematics, but the actual files? I would like to build my own board for compute module 3.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.