Цель
- Изменение усиления (громкости микрофона) в прямом эфире.
- В демоверсии вы сможете перейти с низкого усиления (0,1) навысокий коэффициент усиления (1).Когда он установлен на 0,1, вы вряд ли услышите себя, это похоже на шепот.
Проблема
Код ниже работает на Windows, Android и Safari для настольных версий, нокогда я пытался запустить его в Safari на своем iPhone SE, я не слышал ни шепота, ни низкого усиления.Я проверил значение узла усиления, и оно было установлено на 0,1, когда я нажал кнопку, но похоже, что оно не вступило в силу.
Ссылка на демонстрацию:
https://unrupt.github.io/webrtc-samples/stream-gain-control.html
Поддерживаемые Safari Media ограничения на iPhone
- aspectRatio
- deviceId
- echoCancellation
- сторонойMode
- frameRate
- groupId
- высота
- samepleRate
- sampleSize
- объем
- ширина
Код:
<h2 class="w3-center">Media Stream with Gain Control</h2>
<p class="w3-center">The aim of this sample is to control the gain of the stream</p>
<audio id="audio" playsinline="true" controls autoplay></audio><br>
<button class="btn-fn" onclick="start()">Start!</button>
<button class="btn-fn" onclick="updateGain(0.001)">Low Gain</button>
<button class="btn-fn" onclick="updateGain(1)">Default Gain</button>
<script>
var AudioContext = window.AudioContext || window.webkitAudioContext;
var localStream;
var gainNode;
var ctx;
var dst;
var start = () => navigator.mediaDevices.getUserMedia({audio: true})
.then(stream => audio.srcObject = modifyGain(stream, 2.5))
.catch(e => log(e));
var modifyGain = (stream, gainValue) => {
localStream = stream;
ctx = new AudioContext();
var src = ctx.createMediaStreamSource(stream);
dst = ctx.createMediaStreamDestination();
gainNode = ctx.createGain();
gainNode.gain.value = gainValue;
src.connect(gainNode);
gainNode.connect(dst);
outputStream = dst.stream;
stream.addTrack(outputStream.getAudioTracks()[0]);
stream.removeTrack(stream.getAudioTracks()[0]);
//[src, gainNode, dst].reduce((a, b) => a && a.connect(b));
return stream;
};
var updateGain = (value) => {
gainNode.gain.value = value;
};
var log = msg => div.innerHTML += "<br>" + msg;
</script>
Есть предложения, что я могу попробовать?