(Если вам интересно, вариант использования — воспроизведение короткого сигнала частотой 1750 Гц на аудиоинтерфейсе, подключенном к любительскому радио, который «открывает» ретранслятор).
Для этого я сначала использую:
Код: Выделить всё
navigator.mediaDevices.enumerateDevices()
Затем в функции, прикрепленной к кнопке «Выполнить», я использую текущий выбранный идентификатор устройства в качестве ограничения в:
Код: Выделить всё
navigator.mediaDevices.getUserMedia()
После этого я:
- Создаю экземпляр AudioContext.
- Создаю MediaStreamDestinationNode в этом аудиоконтексте из потока
- Создаю OscillatorNode и подключаю его выход до места назначения.
Похоже, что (проверено на Chrome 145.0.7632.117, macOS Tahoe 26.3), если посмотреть на метку дорожки, первой и единственной дорожкой MediaStream всегда является микрофон моего MacBook, а не выбранное мной динамиковое устройство. По этой причине я также не слышу воспроизводимый звук.
Я создал минимальный фрагмент воспроизведения, демонстрирующий проблему.
Вам нужно будет открыть консоль, чтобы увидеть неожиданную метку дорожки. Вам также может потребоваться вручную предоставить stacksnippets.net разрешения для микрофона и динамика, поскольку Chrome не всегда запрашивает их автоматически.
Код: Выделить всё
$(document).ready(function() {
let enumeratorPromise = navigator.mediaDevices.enumerateDevices();
enumeratorPromise.then((devices) => {
console.log(devices);
devices.forEach((device) => {
console.log("Got device from enumerator", device);
if (device.kind !== "audiooutput") return;
let $deviceOption = $("")
.text(device.label)
.val(device.deviceId)
.appendTo($("#audioout"));
});
});
$("#run").click(function() {
let id = $("#audioout").val();
navigator.mediaDevices
.getUserMedia({
audio: {
deviceId: id
}
})
.then(function(stream) {
console.log(
"got MediaStream for",
id,
stream,
stream.getTracks(),
stream.getTracks()[0].label
);
let audioContext = new AudioContext();
let mediaStreamDestination = audioContext.createMediaStreamDestination(
stream
);
audioContext.createOscillator();
oscillatorNode.type = "sine";
oscillatorNode.frequency.setValueAtTime(1750, audioContext.currentTime);
console.log(mediaStreamDestination);
oscillatorNode.connect(mediaStreamDestination);
//oscillatorNode.connect(audioContext.destination);
oscillatorNode.start();
});
});
});Код: Выделить всё
Select audio device:
Play 1750 HzПодробнее здесь: https://stackoverflow.com/questions/799 ... ong-device
Мобильная версия