9 videos, also midi test

This commit is contained in:
Henne 2020-04-28 15:42:06 +02:00
parent 3e22f5483a
commit db6d963e3f
2 changed files with 127 additions and 31 deletions

View File

@ -25,6 +25,9 @@
margin: 0 auto;
border: 1px dotted grey;
}
.volume-slider {
text-align: center;
}
.container-fluid {
padding: 0;
}
@ -88,36 +91,77 @@
<span></span>
</div>
</div>
<div class="row">
<div class="col-md-4 video video-6">
<video autoplay='autoplay'></video>
<audio autoplay='autoplay'></audio>
<input type="text" onchange="setName(6, this.value)">
<span></span>
</div>
<div class="col-md-4 video video-7">
<video autoplay='autoplay'></video>
<audio autoplay='autoplay'></audio>
<input type="text" onchange="setName(7, this.value)">
<span></span>
</div>
<div class="col-md-4 video video-8">
<video autoplay='autoplay'></video>
<audio autoplay='autoplay'></audio>
<input type="text" onchange="setName(8, this.value)">
<span></span>
</div>
</div>
</div>
<div class="volume-slider volume-0">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(0, this.value)">
<span class="name"></span>
<div class="row">
<div class="volume-slider volume-0 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(0, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-1 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(1, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-2 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(2, this.value)">
<span class="name"></span>
</div>
</div>
<div class="volume-slider volume-1">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(1, this.value)">
<span class="name"></span>
<div class="row">
<div class="volume-slider volume-3 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(3, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-4 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(4, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-5 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(5, this.value)">
<span class="name"></span>
</div>
</div>
<div class="volume-slider volume-2">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(2, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-3">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(3, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-4">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(4, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-5">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(5, this.value)">
<span class="name"></span>
<div class="row">
<div class="volume-slider volume-6 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(6, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-7 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(7, this.value)">
<span class="name"></span>
</div>
<div class="volume-slider volume-8 col">
<span class="volume">70%</span>
<input type="range" min="0" max="1" step="0.01" value="0.7" oninput="setLevel(8, this.value)">
<span class="name"></span>
</div>
</div>
</div>

View File

@ -21,8 +21,9 @@ let room = null;
// zu mappende namen.
let remoteMappingName = [
'alpha', 'beta', 'henne',
'delta', 'soeren', 'klaus'
'speaker1', 'speaker2', 'speaker3',
'speaker4', 'speaker5', 'speaker6',
'speaker7', 'speaker8', 'speaker9'
];
// track mapping participant id -> position
let trackMapping = {};
@ -31,6 +32,44 @@ let tracks = {};
// name -> id
let nameMapping = {};
/**
*
* MIDI SECTION
*/
let midi, data;
// start talking to MIDI controller
if (navigator.requestMIDIAccess) {
navigator.requestMIDIAccess({
sysex: false
}).then(onMIDISuccess);
} else {
console.warn("No MIDI support in your browser")
}
// on success
function onMIDISuccess(midiData) {
// this is all our MIDI data
midi = midiData;
let allInputs = midi.inputs.values();
// loop over all available inputs and listen for any MIDI input
for (let input = allInputs.next(); input && !input.done; input = allInputs.next()) {
// when a MIDI value is received call the onMIDIMessage function
input.value.onmidimessage = (messageData ) => {
midiSetLevel(messageData.data[0]-176, Math.round(messageData[2]/127))
console.log(messageData.data);
};
}
}
/**
*
* END MIDI SECTION
*
*/
/**
* Selects all shown participants to receive high quality video. Otherwise Jitsi will only show thumbnail size video to the Streamer
*/
function selectParticipants() {
let part = [];
for(let i in trackMapping) {
@ -165,10 +204,10 @@ function onUserLeft(id) {
function detachUser(id) {
if (trackMapping[id] != null) {
console.log("detaching user " + id);
if(tracks[id].video) {
if(tracks[id] && tracks[id].video) {
tracks[id].video.detach($(`.video-${trackMapping[id]} video`)[0]);
}
if(tracks[id].audio) {
if(tracks[id] && tracks[id].audio) {
tracks[id].audio.detach($(`.video-${trackMapping[id]} audio`)[0]);
}
delete trackMapping[id]
@ -281,6 +320,19 @@ function setLevel(id, level) {
volumeLabel.text(Math.round(level*100) + "%")
}
/**
* Sets the volume level coming from MIDI input, also sets correct fader position to audio slider
* @param id
* @param level
*/
function midiSetLevel(id, level) {
if(id >= remoteMappingName.length) {
return;
}
setLevel(id, level);
$('.volume-' + id + ' input').val(level);
}
/**
* Sets the name of a position
* @param position