NGALAC/Subsystems: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
No edit summary
Line 6: Line 6:
'''BIOS setting for Auto-on with power-on (e.g. from switch)'''
'''BIOS setting for Auto-on with power-on (e.g. from switch)'''


[[File:ngalac_bios1.png|none|340px]]
[[File:ngalac_bios1.png|none|340px]] [[File:ngalac_bios2.png|none|340px]]
 
 
[[File:ngalac_bios2.png|none|340px]]


=== Audio ===
=== Audio ===
Line 204: Line 201:
Awaited for 'StreamStarting' event!
Awaited for 'StreamStarting' event!
</nowiki>
</nowiki>
== Arduino ==
* [https://www.arduino.cc/en/Tutorial/Debounce Debounce buttons]
* [http://www.instructables.com/id/Use-a-DIY-Pressure-Plate-Switch-to-Automate-Your-H Pressure switch for "player in front of machine"]
* Note: arduino.ArduinoBoard(enable_dtr=False) See: ##Known Issues in PyCmdMessenger

Revision as of 22:06, 24 March 2018


Power

Streaming PC

BIOS setting for Auto-on with power-on (e.g. from switch)

Ngalac bios1.png
Ngalac bios2.png

Audio

Gainclones are a DIY version of a $3000 audio system called the GainCard.

NGALAC possesses a LM3886TF based dual supply amp which requires a split rail +28/-28 DC supply

Amazon Link

LM3886TF based gainclone amp


Example DIY circuits which are easy to build with clear instructions

Example Circuits

Error creating thumbnail: Unable to save thumbnail to destination

Example PSU design

DIY PSU price is very high, will compare to purchase options
Using computer PSU may be possible after boosting +/-12 to +/-28, however, current on -12V line may not be enough to rate maximum wattage


Possible DIY Design
Qty Short Name Price Part Link Part Total
1 Transformer Dual 28V secondaries $3.00 - $10.00 (based on current required) F56-220-C2 (e.g.) Digikey $10.00
16 Diode $1.00 MUR860 Digikey $16.00
4 Linear Voltage Regulator $2.10 LM338T Digikey $9.00
8 Rectifier Diode $0.20 LM4002 Digikey $1.60
4 1200uF Radial Aluminum Electrolytic Caps $1.00 - $6.00 (depending on current) EEU-FS1J102B Digikey $24.00
$10.00 Various Caps and Resistors (1W) * * * $10.00
Total $76.80

OBS automation

inputs -> Arduino/RaspberryPi <-> CmdMessenger <-> Serial port <-> USB <-> streaming CPU <-> PyCmdMessenger <-> obs-wc-controller <-> obs


Guardian Process - Windows OBS restart automatically on fail strategy


OBS Web Socket Plugin Sets up a websocket API for OBS
obs-wc-rc Python library to interface with OBS websocket API
PyCmdMesssenger Python library for CmdMessenger using serial port
CmdMessenger for Arduino Arduino CmdMessenger library to communicate with PyCmdMessenger on server via serial port

OBS websocket plugin

Error creating thumbnail: Unable to save thumbnail to destination

Tools -> Websocket Plugin

obs-wc-rc

Query and send commands to OBS from python (can theoretically control everything)

import asyncio                                                                  
from obswsrc import OBSWS                                                       
from obswsrc.requests import (ResponseStatus,                                   
                              StartStreamingRequest,                            
                              GetStreamingStatusRequest                         
                              )                                                 
from obswsrc.types import Stream, StreamSettings                                
                                                                                
                                                                                
async def main():                                                               
                                                                                
    async with OBSWS('localhost', 4444, 'password') as obsws:                   
                                                                                
        response = await obsws.require(GetStreamingStatusRequest())             
                                                                                
        print("Streaming: {}".format(response.streaming))                       
        print("Recording: {}".format(response.recording))                       
                                                                                
                                                                                
loop = asyncio.get_event_loop()                                                 
loop.run_until_complete(main())                                                 
loop.close()


Output:

Streaming: False
Recording: True

Event Listener


import asyncio                                                                  
import logging                                                                  
import sys                                                                      
                                                                                
from obswsrc import OBSWS                                                       
from obswsrc.logs import logger                                                 
                                                                                
                                                                                
# We will output logging to sys.stdout, as many events might raise errors          
# on creation (that's because protocol.json is not perfect) - such errors          
# are logged by obs-ws-rc automatically, we just need to see them               
logger.setLevel(logging.ERROR)                                                  
logger.addHandler(logging.StreamHandler(stream=sys.stdout))                     
                                                                                
                                                                                
async def main():                                                               
                                                                                
    async with OBSWS('localhost', 4444, "password") as obsws:                   
                                                                                
        print("Connection established.")                                        
                                                                                
        # We will receive events here by awaiting for them (you can await for   
        # an event of a specific type by providing `type_name` argument to         
        # the obsws.event() method)                                             
        event = await obsws.event()                                             
                                                                                
        # Awaited event might be None if connection is closed                   
        while event is not None:                                                
            print("Awaited for '{}' event!".format(event.type_name))            
            event = await obsws.event()                                         
                                                                                
        print("Connection terminated.")

Output:

Awaited for 'TransitionBegin' event!
Awaited for 'SwitchScenes' event!
Awaited for 'RecordingStarting' event!
Awaited for 'StreamStarting' event!

Arduino