Coder Social home page Coder Social logo

grey-software / toonin Goto Github PK

View Code? Open in Web Editor NEW
68.0 7.0 6.0 8.89 MB

Technology that allows you to tune in to your friends and family in realtime using peer-to-peer sharing.

Home Page: https://toonin.grey.software

License: MIT License

HTML 0.69% JavaScript 47.42% Shell 0.56% Vue 50.30% Dockerfile 0.23% Sass 0.79%
webrtc vue quasar-framework hacktoberfest

toonin's Introduction

Toonin Icon

Toonin

CircleCI Codacy Badge Netlify Status

Toonin is technology that allows you to share or stream audio and video over the web in real time.

Overview

Toonin consists of a web app and a signaling server. WebRTC is used to stream the music from the provider to its peers.

The signaling server facilitates a WebRTC handshake between two Toonin web app instances, after which the two apps speak directly to each other over P2P WebRTC streams.

Development setup

yarn setup

Running Toonin

Toonin comes with a local development script that launches the server and app simultaneuously.

yarn dev

Running the web app independently

yarn run app

Running the signalling server independently

yarn run server

toonin's People

Contributors

alir128 avatar dependabot[bot] avatar dlqqq avatar lakshya2610 avatar luu-alex avatar patrickmonteiro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

toonin's Issues

Make the toonin box non-persistent

The toonin box currently persists on the DOM of the source stream tab. This is intrusive to the experience of someone using a service such as Youtube or Spotify.

Following chrome extension best practices, we should have our chrome extension's ui persist only as long as the user currently requires it to.

This would likely involve a re-design on the states that the chrome extension can be in as well so that the user sees the appropriate UI when they click the extension.

WebRTC data channel audio streaming audio break-up

recieveChannel.onmessage = function(event) {
              
                  if(typeof(event.data) === "string") {
                      // recieve the offset from the src to compensate for extra data at the start of 
                      // every arraybuffer
                      firstBufferDur = Number(event.data);
                      console.log('offset: ' + firstBufferDur);
                  }
                  else {
                      audioContext.decodeAudioData(event.data, function(buffer) {
                          if(bufferQueue.length < 4) {
                              bufferQueue.unshift(buffer);
                          }
                          else {
                              bufferQueue.unshift(buffer);
                              nextBuffer = bufferQueue.pop();
                              soundSource = audioContext.createBufferSource();
                              soundSource.buffer = nextBuffer;


                              // here there is breakup because there is a gap between new buffer playing and old one ending


                              soundSource.start(audioContext.currentTime + prevBufferDur, firstBufferDur);
                              prevBufferDur = nextBuffer.duration;
                              soundSource.connect(soundDest); 
                              tabAudio.srcObject = soundDest.stream;
                              tabAudio.play();
                          }
                        
                        //visualizer();
                        
                    }, function(error) {
                        console.log('Audio Decoding failed. Error: ' + String(error));
                    });
                  }
              }

Add support for tuning in via the chrome extension

How do users toonin at the moment?

Toonin currently supports tuning in via the web app by having the user enter the room name they want to enter.

How would users toonin via the extension?

I envision the user being able to enter the room name into the popup box that appears when the chrome extension is clicked.

**Would this open a new tab to the toonin web app or tune in on the current tab. **

We could make this configurable in the future, but I would imagine opening a new tab is the feature we're looking for, since you wouldn't want your toonin session to be tied to another tab's lifecycle.

Tuning in via routes doesn't work on production

The web app currently does not tune in via routes such as /roomName

This is because the app is served statically.

We may have to investigate to see if wrapping our Vue web app with a SSR framework like Nuxt would solve this for us.

Setup continuous integration

We should look into setting up continuous integration for toonin. Students get Travis CI as a part of their student developer pack.

Add debugging support for chrome extension

It is currently difficult to debug the extension because we only see the minified js. We could have an option to build dev and prod versions, with the former not being minified for debugging purposes.

Write a one command setup script

Toonin's DX could be improved by writing a one command setup script.

Install all reqs
Set IPs in app and ext
Build ext and output folder path
Serve app and output url
Run server

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.