ওয়েব অডিও m36 এ পরিবর্তন হয়

ক্রিস উইলসন
Chris Wilson

ওয়েব অডিও পরিবর্তন

Google-এ, আমরা মান পছন্দ করি। আমরা মান-সংজ্ঞায়িত ওয়েব প্ল্যাটফর্ম তৈরি করার মিশনে আছি। কিছু সময়ের জন্য এটির একটি ছোট ওয়ার্ট হল ওয়েব অডিও এপিআই (বিশেষ করে ওয়েবকিটঅডিও কনটেক্সট অবজেক্ট) এর ওয়েবকিট-প্রিফিক্সড বাস্তবায়ন এবং ওয়েব অডিওর কিছু অবনমন বিট যা আমরা সমর্থন করে চলেছি।

এটি মূলত পরিকল্পনা করা হয়েছিল যে Chrome 36 উপসর্গযুক্ত webkitAudioContext এর সমর্থন সরিয়ে দেবে, যেহেতু আমরা অপ্রিফিক্সড AudioContext অবজেক্টকে সমর্থন করা শুরু করেছি। এটি প্রত্যাশিত থেকে আরও বেশি সমস্যায় পরিণত হয়েছে, তাই Chrome 36 আনপ্রেফিক্সড এবং প্রিফিক্সড উভয়ই সমর্থন করে - তবে, এমনকি পুনঃপ্রবর্তিত ওয়েবকিটঅডিও কনটেক্সটেও, CreateGainNode এবং createJavaScriptNode এর মতো বৈশিষ্ট্যগুলি সরানো হয়েছে৷ সংক্ষেপে, Chrome 36-এ webkitAudioContext এবং AudioContext একে অপরের উপনাম; উভয়ের মধ্যে কার্যকারিতার মধ্যে কোন পার্থক্য নেই।

আমরা Chrome 36-এর পরে উপসর্গের সমর্থন সম্পূর্ণরূপে সরিয়ে দেব, সম্ভবত কয়েকটি রিলিজের মধ্যে। পরিবর্তন আসন্ন হলে আমরা এখানে একটি ঘোষণা করব, এবং আমরা লেখকদের সাথে তাদের ওয়েব অডিও অ্যাপ্লিকেশন ঠিক করার জন্য যোগাযোগ অব্যাহত রাখছি।

কেন আমরা আগের বাস্তবায়নে ফিরে যাওয়ার পরিবর্তে এটি করেছি? ঠিক আছে, আংশিকভাবে, আমরা খুব বেশি পিছনের দিকে সরে যেতে নমনীয় হয়েছি; আমরা ইতিমধ্যেই সেই APIগুলি সরিয়ে দিয়েছি, এবং এই উপনামের একটি চমৎকার পার্শ্ব-প্রতিক্রিয়া হিসাবে, অ্যাপ্লিকেশনগুলি তখন ফায়ারফক্সে সুন্দরভাবে কাজ করতে পারে, যা তাদের ওয়েব অডিও সমর্থনে প্রাথমিকভাবে প্রকাশিত কোনও অডিও কনটেক্সট অবজেক্টকে (এবং একেবারে সঠিকও!) সমর্থন করেনি। শেষ পতন.

এই আপডেটের বাকি অংশটি এই পরিবর্তনের কারণে আপনার কোডে ভাঙা হতে পারে এমন জিনিসগুলি ঠিক করার জন্য একটি নির্দেশিকা প্রদান করে৷ এই সমস্যাগুলি সমাধান করার বিষয়ে দুর্দান্ত জিনিসটি হল যে আপনার কোডটি ফায়ারফক্সেও কাজ করার যথেষ্ট সম্ভাবনা রয়েছে! (আমি দীর্ঘদিন ধরে ভেবেছিলাম যে ফায়ারফক্সের বাস্তবায়নের কারণে আমার ভোকোডার অ্যাপ্লিকেশনটি ভেঙে গেছে, কিন্তু এটি এই সমস্যাগুলির মধ্যে একটি হয়ে উঠেছে!)

আপনি যদি কেবল উঠতে এবং দৌড়াতে চান তবে আপনি একটি বানর-প্যাচ লাইব্রেরি দেখতে চাইতে পারেন যা আমি পুরানো ওয়েব অডিও কোডে লেখা অ্যাপ্লিকেশনগুলির জন্য লিখেছিলাম - এটি আপনাকে ন্যূনতম পরিমাণে উঠতে এবং দৌড়াতে সাহায্য করতে পারে সময়, এটি উপযুক্তভাবে অবজেক্ট এবং পদ্ধতির নাম দেবে। প্রকৃতপক্ষে, লাইব্রেরি তালিকাগুলির প্যাচগুলি পরিবর্তিত জিনিসগুলির জন্য একটি ভাল গাইড।

প্রথম এবং সবখানে

window.webkitAudioContext এর যেকোনো রেফারেন্স window.AudioContext এ করা উচিত। প্রায়শই, এটি একটি সাধারণ দিয়ে সংশোধন করা হয়েছে:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

যদি আপনার অ্যাপ এমন কিছু দিয়ে সাড়া দেয় "দুর্ভাগ্যবশত, আপনার ব্রাউজার ওয়েব অডিও সমর্থন করে না। অনুগ্রহ করে ক্রোম বা সাফারি ব্যবহার করুন।" - এটি সম্ভবত স্পষ্টভাবে webkitAudioContext খুঁজছে। খারাপ ডেভেলপার! আপনি কয়েক মাস ধরে ফায়ারফক্স সমর্থন করতে পারতেন!

কিন্তু কিছু অন্যান্য, আরো সূক্ষ্ম কোড অপসারণ আছে, যার মধ্যে কিছু কম স্পষ্ট হতে পারে।

  • .type অ্যাট্রিবিউটের জন্য BiquadFilter গণনাকৃত টাইপ ধ্রুবকগুলি (যা এখন একটি স্ট্রিং) BiquadFilterNode অবজেক্টে আর প্রদর্শিত হয় না এবং আমরা .type অ্যাট্রিবিউটে তাদের সমর্থন করি না। তাই আপনি আর .LOWPASS (বা 0) ব্যবহার করবেন না - আপনি এটিকে "lowpass" এ সেট করেছেন।
  • এছাড়াও, Oscillator.type বৈশিষ্ট্যটি একইভাবে এখন একটি স্ট্রিং গণনাকৃত টাইপ - আর নয় .SAWTOOTH
  • PannerNode.type ও এখন একটি স্ট্রিং গণনা করা টাইপ।
  • PannerNode.distanceModel এখন একটি স্ট্রিং গণনাকৃত প্রকার।
  • createGainNode নাম পরিবর্তন করে createGain করা হয়েছে
  • createDelayNode নাম পরিবর্তন করে createDelay করা হয়েছে
  • createJavaScriptNode নাম পরিবর্তন করে createScriptProcessor করা হয়েছে
  • AudioBufferSourceNode.noteOn() এখন start() দ্বারা প্রতিস্থাপিত হয়েছে
  • AudioBufferSourceNode.noteGrainOn() এখন start() দ্বারা প্রতিস্থাপিত হয়েছে
  • AudioBufferSourceNode.noteOff() নাম পরিবর্তন করে stop() করা হয়েছে
  • OscillatorNode.noteOn() নাম পরিবর্তন করে start() করা হয়েছে
  • OscillatorNode.noteOff() নাম পরিবর্তন করে stop() করা হয়েছে
  • AudioParam.setTargetValueAtTime() নাম পরিবর্তন করে setTargetAtTime() করা হয়েছে
  • AudioContext.createWaveTable() এবং OscillatorNode.setWaveTable() এখন নতুন নামকরণ করা হয়েছে createPeriodicWave() and setPeriodicWave()`।
  • AudioBufferSourceNode.looping সরানো হয়েছে, .loop এর পক্ষে
  • AudioContext.createBuffer(ArrayBuffer, boolean) সিঙ্ক্রোনাসভাবে ডিকোড করার জন্য এনকোড করা অডিও ডেটার একটি ব্লব সরানো হয়েছে। সিঙ্ক্রোনাস কল যেগুলি সম্পূর্ণ হতে অনেক সময় নেয় তা হল দুর্বল কোডিং অনুশীলন; পরিবর্তে অ্যাসিঙ্ক্রোনাস ডিকোডঅডিওডেটা কল ব্যবহার করুন। এটি আরও চ্যালেঞ্জিং পরিবর্তনগুলির মধ্যে একটি - আপনাকে আসলে যুক্তির প্রবাহ পরিবর্তন করতে হবে - তবে আরও ভাল অনুশীলন। Mozilla-এর Ehsan Angkari স্ট্যান্ডার্ড ওয়েব অডিওতে রূপান্তর করার বিষয়ে তাদের পোস্টে কীভাবে এটি করতে হয় তার একটি চমৎকার উদাহরণ লিখেছেন।

এর মধ্যে অনেকগুলি (যেমন createGainNode-এর পুনঃনামকরণ, এবং createBuffer-এ সিঙ্ক্রোনাস ডিকোডিং অপসারণ) স্পষ্টতই একটি ত্রুটি হিসাবে বিকাশকারী সরঞ্জাম কনসোলে প্রদর্শিত হবে - তবে, অন্য কিছু, এই ব্যবহারের মতো:

MULTI_LINE_CODE_PLACEHOLDER_1

কিছুতেই দেখাবে না, এবং নীরবে ব্যর্থ হবে (myFilterNode.BANDPASS এখন অনির্ধারিত-এ সমাধান করবে, এবং .type-কে অনির্ধারিত-এ সেট করার প্রয়াস কেবল কোনও প্রভাব তৈরি করতে ব্যর্থ হবে৷ যাইহোক, এটিই ভোকোডারের কারণ ছিল ব্যর্থ।) একইভাবে, কাজ করার জন্য ব্যবহৃত একটি নম্বরে filter.type বরাদ্দ করা:

myFilterNode.type = 2;

কিন্তু এখন, আপনাকে স্ট্রিং গণনা ব্যবহার করতে হবে:

myFilterNode.type = “bandpass”;

সুতরাং, আপনি নিম্নলিখিত শর্তাবলীর জন্য আপনার কোড গ্রেপ করতে চাইতে পারেন:

  • webkitAudioContext
  • .LOWPASS
  • .HIGHPASS
  • .BANDPASS
  • .LOWSHELF
  • .HIGHSHELF
  • .PEAKING
  • .NOTCH
  • .ALLPASS
  • .SINE
  • .SQUARE
  • .SAWTOOTH
  • .TRIANGLE
  • .noteOn
  • .noteGrainOn
  • .noteOff
  • .setWaveTable
  • .createWaveTable
  • .looping
  • .EQUALPOWER
  • .HRTF
  • .LINEAR
  • .INVERSE
  • .EXPONENTIAL
  • createGainNode
  • createDelayNode
  • .type (হ্যাঁ, এতে প্রচুর মিথ্যা ইতিবাচক থাকবে - তবে উপরের শেষ উদাহরণটি ধরার এটিই একমাত্র উপায়!)

আরও একবার, আপনি যদি তাড়াহুড়ো করে থাকেন এবং উঠতে এবং দৌড়াতে চান, তবে শুধু আমার মানকিপ্যাচ ওয়েবকিটঅডিও কনটেক্সট লাইব্রেরির একটি অনুলিপি নিন এবং এটি আপনার অ্যাপ্লিকেশনে অন্তর্ভুক্ত করুন। হ্যাপি অডিও হ্যাকিং!