mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-11 21:58:35 +00:00
loudness iframe api improved + &pushloudness and &getloudness added
This commit is contained in:
parent
e6dee5ca09
commit
7f191a0b93
@ -415,7 +415,7 @@
|
||||
|
||||
|
||||
if ("loudness" in e.data){
|
||||
console.log(e.data);
|
||||
//console.log(e.data);
|
||||
if (document.getElementById("loudness")){
|
||||
outputWindow = document.getElementById("loudness");
|
||||
} else {
|
||||
|
||||
@ -2208,11 +2208,11 @@
|
||||
// session.defaultBackgroundImages = ["./media/bg_sample1.webp", "./media/bg_sample2.webp"]; // for &effects=5 (virtual backgrounds)
|
||||
</script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=388"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=389"></script>
|
||||
<!--
|
||||
// If you wish to change branding, blank offers a good clean start.
|
||||
<script type="text/javascript" id="main-js" src="./main.js" data-translation="blank"></script>
|
||||
-->
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=402"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=403"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
113
lib.js
113
lib.js
@ -25476,65 +25476,74 @@ function updateIncomingVideoElement(UUID, video=true, audio=true){
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (audio){
|
||||
if (session.audioEffects===true){
|
||||
var tracks = session.rpcs[UUID].streamSrc.getAudioTracks();
|
||||
if (tracks.length){
|
||||
var track = tracks[0];
|
||||
track = addAudioPipeline(UUID, track)
|
||||
|
||||
var added = false;
|
||||
var tracks2 = session.rpcs[UUID].videoElement.srcObject.getAudioTracks();
|
||||
tracks2.forEach(trk2 =>{
|
||||
if (trk2.label && (trk2.label == "MediaStreamAudioDestinationNode")){ // an old morphed node; delete it.
|
||||
session.rpcs[UUID].videoElement.srcObject.removeTrack(trk2);
|
||||
} else if (track.id == trk2.id){ // maybe it didn't morph; already added either way
|
||||
added = true;
|
||||
} else if ((trk2.id == tracks[0].id) && (track.id != tracks[0].id)){ // remove original audio track that is now morphed
|
||||
session.rpcs[UUID].videoElement.srcObject.removeTrack(trk2);
|
||||
}
|
||||
});
|
||||
if (!added){
|
||||
session.rpcs[UUID].videoElement.srcObject.addTrack(track);
|
||||
updateIncomingAudioElement(UUID) // do the same for audio now.
|
||||
}
|
||||
}
|
||||
|
||||
function updateIncomingAudioElement(UUID){ // this can be called when turning on/off inbound audio processing.
|
||||
if (!session.rpcs[UUID] || !session.rpcs[UUID].videoElement || !session.rpcs[UUID].streamSrc){return;}
|
||||
|
||||
if (!session.rpcs[UUID].videoElement.srcObject) {
|
||||
session.rpcs[UUID].videoElement.srcObject = createMediaStream();
|
||||
}
|
||||
|
||||
if ((session.audioEffects===true) || session.pushLoudness){
|
||||
var tracks = session.rpcs[UUID].streamSrc.getAudioTracks();
|
||||
if (tracks.length){
|
||||
var track = tracks[0];
|
||||
track = addAudioPipeline(UUID, track)
|
||||
|
||||
var added = false;
|
||||
var tracks2 = session.rpcs[UUID].videoElement.srcObject.getAudioTracks();
|
||||
tracks2.forEach(trk2 =>{
|
||||
if (trk2.label && (trk2.label == "MediaStreamAudioDestinationNode")){ // an old morphed node; delete it.
|
||||
session.rpcs[UUID].videoElement.srcObject.removeTrack(trk2);
|
||||
} else if (track.id == trk2.id){ // maybe it didn't morph; already added either way
|
||||
added = true;
|
||||
} else if ((trk2.id == tracks[0].id) && (track.id != tracks[0].id)){ // remove original audio track that is now morphed
|
||||
session.rpcs[UUID].videoElement.srcObject.removeTrack(trk2);
|
||||
}
|
||||
|
||||
} else {
|
||||
session.rpcs[UUID].videoElement.srcObject.getAudioTracks().forEach(trk=>{ // make sure to remove all tracks.
|
||||
session.rpcs[UUID].videoElement.srcObject.remove(trk);
|
||||
});
|
||||
});
|
||||
if (!added){
|
||||
session.rpcs[UUID].videoElement.srcObject.addTrack(track);
|
||||
}
|
||||
|
||||
} else {
|
||||
var expected = [];
|
||||
tracks = session.rpcs[UUID].videoElement.srcObject.getAudioTracks(); // add audio tracks
|
||||
session.rpcs[UUID].streamSrc.getAudioTracks().forEach((trk)=>{
|
||||
var added = false;
|
||||
tracks.forEach(trk2 =>{
|
||||
if (trk2.id == trk.id){
|
||||
added=true;
|
||||
expected.push(trk2); //
|
||||
}
|
||||
});
|
||||
if (!added){
|
||||
session.rpcs[UUID].videoElement.srcObject.addTrack(trk);
|
||||
}
|
||||
});
|
||||
tracks.forEach((trk)=>{
|
||||
var added = false;
|
||||
expected.forEach((trk2)=>{
|
||||
if (trk2.id == trk.id){
|
||||
added=true;
|
||||
}
|
||||
});
|
||||
if (!added){ // not expected. so lets delete.
|
||||
warnlog("this shouldn't happen that often, audio track orphaned. removing it");
|
||||
session.rpcs[UUID].videoElement.srcObject.removeTrack(trk);
|
||||
}
|
||||
session.rpcs[UUID].videoElement.srcObject.getAudioTracks().forEach(trk=>{ // make sure to remove all tracks.
|
||||
session.rpcs[UUID].videoElement.srcObject.remove(trk);
|
||||
});
|
||||
}
|
||||
resetupAudioOut(session.rpcs[UUID].videoElement, true);
|
||||
|
||||
} else {
|
||||
var expected = [];
|
||||
tracks = session.rpcs[UUID].videoElement.srcObject.getAudioTracks(); // add audio tracks
|
||||
session.rpcs[UUID].streamSrc.getAudioTracks().forEach((trk)=>{
|
||||
var added = false;
|
||||
tracks.forEach(trk2 =>{
|
||||
if (trk2.id == trk.id){
|
||||
added=true;
|
||||
expected.push(trk2); //
|
||||
}
|
||||
});
|
||||
if (!added){
|
||||
session.rpcs[UUID].videoElement.srcObject.addTrack(trk);
|
||||
}
|
||||
});
|
||||
tracks.forEach((trk)=>{
|
||||
var added = false;
|
||||
expected.forEach((trk2)=>{
|
||||
if (trk2.id == trk.id){
|
||||
added=true;
|
||||
}
|
||||
});
|
||||
if (!added){ // not expected. so lets delete.
|
||||
warnlog("this shouldn't happen that often, audio track orphaned. removing it");
|
||||
session.rpcs[UUID].videoElement.srcObject.removeTrack(trk);
|
||||
}
|
||||
});
|
||||
}
|
||||
resetupAudioOut(session.rpcs[UUID].videoElement, true);
|
||||
}
|
||||
|
||||
|
||||
@ -25585,6 +25594,8 @@ function addAudioPipeline(UUID, track){ // INBOUND AUDIO EFFECTS
|
||||
} else if (session.quietOthers){
|
||||
log("adding a loudness meter node to audio");
|
||||
source = audioMeterGuest(source, UUID, trackid);
|
||||
} else if (session.pushLoudness){
|
||||
source = audioMeterGuest(source, UUID, trackid);
|
||||
}
|
||||
|
||||
if (session.rpcs[UUID].channelOffset !== false){
|
||||
|
||||
24
main.js
24
main.js
@ -273,6 +273,9 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.pushEffectsData=true;
|
||||
}
|
||||
|
||||
if (urlParams.has('pushloudness') || urlParams.has('getloudness')) { // this sets the loudness IFRAME API output, if available.
|
||||
session.pushLoudness = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('notmobile')){
|
||||
session.mobile = false;
|
||||
@ -4233,9 +4236,17 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if ("getLoudness" in e.data) {
|
||||
log("GOT LOUDNESS REQUEST");
|
||||
if (e.data.getLoudness == true) {
|
||||
session.pushLoudness = true;
|
||||
var loudness = {};
|
||||
|
||||
if (!session.pushLoudness && (session.audioEffects!==true)){
|
||||
session.pushLoudness = true;
|
||||
for (var i in session.rpcs) {
|
||||
updateIncomingAudioElement(i); // this can be called when turning on/off inbound audio processing.
|
||||
}
|
||||
} else {
|
||||
session.pushLoudness = true;
|
||||
}
|
||||
|
||||
var loudness = {};
|
||||
for (var i in session.rpcs) {
|
||||
loudness[session.rpcs[i].streamID] = session.rpcs[i].stats.Audio_Loudness;
|
||||
}
|
||||
@ -4245,7 +4256,14 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}, session.iframetarget);
|
||||
|
||||
} else {
|
||||
session.pushLoudness = false;
|
||||
if (session.pushLoudness && !session.audioEffects){ // turn off audio processing
|
||||
session.pushLoudness = false;
|
||||
for (var i in session.rpcs) {
|
||||
updateIncomingAudioElement(i)
|
||||
}
|
||||
} else {
|
||||
session.pushLoudness = false; // can't turn off audio processing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user