এখন পর্যন্ত, গন্তব্য অডিও আউটপুট ডিভাইস শুধুমাত্র <video> এবং <audio> এর জন্য HTMLMediaElement.setSinkId() ব্যবহার করে সেট করা যেত। Web Audio- তে, AudioContext ডিফল্ট ডিভাইস ব্যবহার করত, ফলে ব্যবহারকারীকে সিস্টেমের অডিও আউটপুট ডিভাইসটি ম্যানুয়ালি পরিবর্তন করতে হতো।
From Chrome 110, you can use AudioContext.setSinkId() to programmatically direct the audio output in Web Audio to any permitted device.
এটি বিশেষত বিভিন্ন রিয়েল-টাইম যোগাযোগের ক্ষেত্রে সহায়ক। উদাহরণস্বরূপ, একটি ওয়েব অ্যাপ এটি ব্যবহার করে প্রোগ্রামগতভাবে ব্লুটুথ হেডসেট বা স্পিকারফোনের মতো কোনো নির্দিষ্ট অডিও আউটপুট ডিভাইসে আউটপুট পাঠাতে পারে।
অডিও আউটপুট একটি নির্দিষ্ট ডিভাইসে পাঠান
প্রথমে, আপনি যে অডিও আউটপুট ডিভাইসটিকে গন্তব্য হিসেবে ব্যবহার করতে চান, তার আইডেন্টিফায়ারটি আপনার প্রয়োজন হবে। navigator.mediaDevices.enumerateDevices() ব্যবহার করে উপলব্ধ মিডিয়া ডিভাইসগুলোর তালিকা নিন, শুধুমাত্র অডিও আউটপুট ডিভাইসগুলোর উপর ফিল্টার করুন এবং আপনার পছন্দের অডিও আউটপুট ডিভাইসটির deviceId অ্যাট্রিবিউটটি সংগ্রহ করুন। deviceId এর জন্য ডিফল্ট ডিভাইস হিসেবে খালি স্ট্রিং "" ভ্যালুটিও ব্যবহার করা যেতে পারে।
অডিও আউটপুট ডিভাইসের আইডেন্টিফায়ারটি পেয়ে গেলে, একটি AudioContext তৈরি করুন এবং audioContext.setSinkId(deviceId) কল করুন। সফল হলে, নির্বাচিত সংযুক্ত আউটপুট ডিভাইসে অডিও রাউট করার পর রিটার্ন করা প্রমিসটি রিজলভ হয়। AudioContext-টি বন্ধ করা হলে এটি ব্যর্থ হতে পারে।
The example below shows you how to request microphone access if needed and direct the audio output in Web Audio to the first available output device.
const permission = await navigator.permissions.query({ name: "microphone" });
if (permission.state == "prompt") {
// More audio outputs are available when user grants access to the mic.
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
stream.getTracks().forEach((track) => track.stop());
}
// Request a list of media devices and filter audio output devices.
const devices = await navigator.mediaDevices.enumerateDevices();
const audioOutputs = devices.filter(device => device.kind == "audiooutput");
const audioContext = new AudioContext();
// Pick the first available audio output.
const deviceId = audioOutputs[0].deviceId;
await audioContext.setSinkId(deviceId);
Note that you can also pass the deviceId as a sinkId parameter when creating an AudioContext .
const audioContext = new AudioContext({ sinkId: deviceId });
মিউট করা AudioContext ব্যবহার করে অডিও রেন্ডার করুন
You can now specify a "silent output device" in Web Audio to minimize the power consumption. This time, instead of a string value, pass { type: "none" } to AudioContext.setSinkId() .
উল্লেখ্য যে, audioContext.currentTime এর মাধ্যমে অ্যাক্সেসযোগ্য অডিও ক্লকটি অডিও গ্রাফ রেন্ডার করার জন্য ঠিকই এগিয়ে যাবে। এই মিউট করা AudioContext-এর মূল উদ্দেশ্য হলো কোনো শ্রাব্য শব্দ তৈরি না করেই অডিও গ্রাফ রেন্ডার করা। এর প্রধান ব্যবহার হবে কোনো শব্দ না করে মাইক্রোফোন ইনপুট বিশ্লেষণ করা।
// Silent Web Audio output.
await audioContext.setSinkId({ type: "none" });
বৈশিষ্ট্য সনাক্তকরণ
To check if AudioContext.setSinkId() is supported, use:
if ("setSinkId" in AudioContext.prototype) {
// AudioContext.setSinkId() is supported.
}
নমুনা
A demo is available at https://codepen.io/web-dot-dev/pen/emNwEaN/ to play with AudioContext.setSinkId() .
ব্রাউজার সমর্থন
AudioContext.setSinkId() is available in Chrome 110 or later.
প্রতিক্রিয়া
Chrome টিম এবং ওয়েব স্ট্যান্ডার্ড কমিউনিটি AudioContext.setSinkId() ব্যবহারের বিষয়ে আপনার অভিজ্ঞতা জানতে আগ্রহী। অনুগ্রহ করে বিদ্যমান GitHub ইস্যুতে মন্তব্য করে অথবা নতুন ইস্যু তৈরি করে আপনার মতামত জানান।
সহায়ক লিঙ্ক
কৃতজ্ঞতা স্বীকার
Thanks to Hongchan Choi and Michael Wilson for reviewing this article.