সুচিপত্র:

ব্লুটুথ অডিও এবং ডিজিটাল সিগন্যাল প্রসেসিং: একটি Arduino ফ্রেমওয়ার্ক: 10 টি ধাপ
ব্লুটুথ অডিও এবং ডিজিটাল সিগন্যাল প্রসেসিং: একটি Arduino ফ্রেমওয়ার্ক: 10 টি ধাপ

ভিডিও: ব্লুটুথ অডিও এবং ডিজিটাল সিগন্যাল প্রসেসিং: একটি Arduino ফ্রেমওয়ার্ক: 10 টি ধাপ

ভিডিও: ব্লুটুথ অডিও এবং ডিজিটাল সিগন্যাল প্রসেসিং: একটি Arduino ফ্রেমওয়ার্ক: 10 টি ধাপ
ভিডিও: ভয়ানক সাউন্ড😲 মিনি ব্লুটুথ এম্পলিফায়ার টেস্ট // 100W Bluetooth AMP Circuit | JLCPCB 2024, নভেম্বর
Anonim
Image
Image
ব্লুটুথ অডিও এবং ডিজিটাল সিগন্যাল প্রসেসিং: একটি Arduino ফ্রেমওয়ার্ক
ব্লুটুথ অডিও এবং ডিজিটাল সিগন্যাল প্রসেসিং: একটি Arduino ফ্রেমওয়ার্ক

সারসংক্ষেপ

যখন আমি ব্লুটুথের কথা ভাবি তখন আমি সঙ্গীতের কথা ভাবি কিন্তু দুlyখের বিষয় অধিকাংশ মাইক্রোকন্ট্রোলার ব্লুটুথের মাধ্যমে সঙ্গীত বাজাতে পারে না। রাস্পবেরি পাই কিন্তু এটি একটি কম্পিউটার। আমি মাইক্রোকন্ট্রোলারদের জন্য ব্লুটুথের মাধ্যমে অডিও চালানোর জন্য একটি Arduino ভিত্তিক কাঠামো তৈরি করতে চাই। আমার মাইক্রোকন্ট্রোলারের পেশীকে পুরোপুরি ফ্লেক্স করার জন্য আমি অডিওতে রিয়েল-টাইম ডিজিটাল সিগন্যাল প্রসেসিং (ডিএসপি) যোগ করতে যাচ্ছি (হাই-পাস ফিল্টারিং, লো-পাস ফিল্টারিং এবং ডায়নামিক রেঞ্জ কম্প্রেশন)। উপরে চেরির জন্য, আমি একটি ওয়েব সার্ভার যুক্ত করব যা ডিএসপি ওয়্যারলেস কনফিগার করতে ব্যবহার করা যেতে পারে। এমবেডেড ভিডিওটি ব্লুটুথ অডিওর মূল কাজগুলি দেখায়। এটি আমাকে কিছু হাই-পাস ফিল্টারিং, লো-পাস ফিল্টারিং এবং ডায়নামিক রেঞ্জ কম্প্রেশন করতে ওয়েব সার্ভার ব্যবহার করে দেখায়। ডাইনামিক রেঞ্জ কম্প্রেশনের প্রথম ব্যবহার উদ্দেশ্যমূলকভাবে দুর্বল প্যারামিটার পছন্দের উদাহরণ হিসাবে বিকৃতি ঘটায়। দ্বিতীয় উদাহরণ এই বিকৃতি দূর করে।

এই প্রকল্পের জন্য, ESP32 হল পছন্দের মাইক্রোকন্ট্রোলার। এটির দাম £ 10 এরও কম এবং এটি এডিসি, ডিএসি, ওয়াইফাই, ব্লুটুথ লো এনার্জি, ব্লুটুথ ক্লাসিক এবং একটি 240 মেগাহার্টজ ডুয়াল কোর প্রসেসরের বৈশিষ্ট্যযুক্ত। অনবোর্ড DAC টেকনিক্যালি অডিও চালাতে পারে কিন্তু এটি দুর্দান্ত শব্দ হবে না। পরিবর্তে, আমি একটি লাইন আউট সংকেত উত্পাদন করতে Adafruit I2S স্টিরিও ডিকোডার ব্যবহার করব। আপনার বর্তমান হাইফাই সিস্টেমে তাৎক্ষণিকভাবে ওয়্যারলেস অডিও যোগ করার জন্য এই সংকেতটি সহজেই যেকোনো হাইফাই সিস্টেমে পাঠানো যেতে পারে।

সরবরাহ

আশা করি, বেশিরভাগ নির্মাতাদের ব্রেডবোর্ড, জাম্পার, ইউএসবি কেবল, পাওয়ার সাপ্লাই সোল্ডারিং আয়রন থাকবে এবং শুধুমাত্র ESP32 এবং স্টেরিও ডিকোডারে £ 15 খরচ করতে হবে। যদি না হয়, তাহলে প্রয়োজনীয় সমস্ত যন্ত্রাংশ নীচে তালিকাভুক্ত করা হয়েছে।

  • একটি ESP32 - ESP32 -PICO -KIT এবং TinyPico- তে পরীক্ষিত - £ 9.50/ £ 24
  • Adafruit I2S Stereo Decoder - £ 5.51
  • ব্রেডবোর্ড - £ 3- each 5 প্রতিটি
  • জাম্পার তার - £ 3
  • তারযুক্ত হেডফোন/হাই -ফাই সিস্টেম -
  • পুশ হেডার বা সোল্ডারিং আয়রন - £ 2.10 / £ 30
  • মাইক্রো ইউএসবি কেবল - £ 2.10/ £ 3
  • 3.5 মিমি থেকে আরসিএ সংযোগকারী/ 3.5 মিমি জ্যাক থেকে জ্যাক (অথবা আপনার স্পিকারের যা প্রয়োজন) - £ 2.40/ £ 1.50
  • ইউএসবি পাওয়ার সাপ্লাই - £ 5

ধাপ 1: নির্মাণ - ব্রেডবোর্ড

নির্মাণ - ব্রেডবোর্ড
নির্মাণ - ব্রেডবোর্ড

আপনি যদি ESP32-PICO-KIT কিনে থাকেন তাহলে আপনাকে কোন পিন বিক্রি করতে হবে না কারণ এটি প্রি-সোল্ডার্ড। কেবল এটি রুটিবোর্ডে রাখুন।

ধাপ 2: নির্মাণ - পুশ হেডার/সোল্ডারিং

নির্মাণ - পুশ হেডার/সোল্ডারিং
নির্মাণ - পুশ হেডার/সোল্ডারিং
নির্মাণ - পুশ হেডার/সোল্ডারিং
নির্মাণ - পুশ হেডার/সোল্ডারিং

আপনার যদি সোল্ডারিং আয়রন থাকে তবে অ্যাডাফ্রুট ওয়েবসাইটে নির্দেশাবলী অনুসারে পিনগুলি স্টিরিও ডিকোডারে সোল্ডার করুন। লেখার সময় আমার সোল্ডারিং লোহা কাজ করছিল যা বন্ধ ছিল। আমি একটি অস্থায়ী সোল্ডারিং লোহার জন্য অর্থ দিতে চাইনি তাই আমি পিমোরোনি থেকে কিছু পুশ হেডার কেটে দিলাম। আমি সেগুলো কেটে দিলাম যাতে তারা স্টিরিও ডিকোডারের সাথে মানানসই হয়। এটি সর্বোত্তম সমাধান নয় (এবং শিরোনামগুলি কীভাবে ব্যবহার করার উদ্দেশ্যে করা হয়েছিল তা নয়) তবে এটি একটি সোল্ডারিং লোহার সবচেয়ে সস্তা বিকল্প। ব্রেডবোর্ডে কাট-আপ হেডারটি স্লট করুন। ডিকোডারের জন্য আপনার কেবল 6 টি পিনের 1 লাইন প্রয়োজন। আপনি স্থিতিশীলতার জন্য অন্য দিকে আরও ছয়টি যোগ করতে পারেন কিন্তু এই প্রোটোটাইপ সিস্টেমের জন্য এটি প্রয়োজনীয় নয়। হেডারগুলিকে স্লট করার জন্য পিনগুলি হল vin, 3vo, gnd, wsel, din এবং bclk।

ধাপ 3: নির্মাণ - পাওয়ার পিনের তারের

নির্মাণ - পাওয়ার পিনের তারের
নির্মাণ - পাওয়ার পিনের তারের

ধাক্কা শিরোনামে (vin, 3vo, gnd, wsel, din এবং bclk pins) স্টিরিও ডিকোডার রাখুন এবং দৃ them়ভাবে তাদের একসাথে ধাক্কা দিন। আবার, এটি আদর্শভাবে একটি সোল্ডারিং লোহা দিয়ে করা উচিত কিন্তু আমাকে উন্নতি করতে হয়েছিল। আপনি লক্ষ্য করবেন যে এই নির্দেশযোগ্য সমস্ত তারগুলি নীল। কারণ আমার কোন জাম্পার তার ছিল না তাই আমি 1 টি দীর্ঘ তারকে ছোট ছোট টুকরো করে কেটেছি। এছাড়াও, আমি colourblind এবং সত্যিই তারের রঙ সম্পর্কে যত্ন না। নিম্নরূপ পাওয়ার পিন সংযুক্ত করা হয়:

3v3 (ESP32) -> vin to stereo decoder

gnd (ESP32) -> gnd to stereo decoder

ধাপ 4: নির্মাণ - I2S তারের

নির্মাণ - I2S তারের
নির্মাণ - I2S তারের

ESP32 থেকে স্টেরিও ডিকোডারে ব্লুটুথ অডিও পাঠানোর জন্য আমরা I2S নামে ডিজিটাল যোগাযোগের একটি পদ্ধতি ব্যবহার করতে যাচ্ছি। স্টিরিও ডিকোডার এই ডিজিটাল সিগন্যালটি গ্রহণ করবে এবং এটি একটি অ্যানালগ সিগন্যালে পরিণত করবে যা স্পিকার বা হাইফাইতে প্লাগ করা যাবে। I2S- এর জন্য কেবল 3 টি তারের প্রয়োজন এবং তা বোঝার জন্য যুক্তিসঙ্গতভাবে সহজবোধ্য। বিট ক্লক (bclk) লাইনটি নতুন এবং বিট ট্রান্সমিট হওয়ার ইঙ্গিত দিতে উচ্চ এবং নিচু হয়ে যায়। ডাটা-আউট লাইন (ডাউট) উঁচু বা নিচু হয়ে যায় যে সেই বিটের মান 0 বা 1 আছে কি না এবং সিলেক্ট লাইন (wsel) শব্দটি উচ্চ বা নিচু হয়ে যায় কিনা তা নির্দেশ করতে বাম বা ডান চ্যানেল প্রেরণ করা হচ্ছে কিনা। প্রতিটি মাইক্রোকন্ট্রোলার I2S সমর্থন করে না কিন্তু ESP32 এর 2 I2S লাইন আছে। এটি এই প্রকল্পের জন্য এটি একটি সুস্পষ্ট পছন্দ করে তোলে।

ওয়্যারিং নিম্নরূপ:

27 (ESP32) -> wsel (স্টিরিও ডিকোডার)

25 (ESP32) -> দিন (স্টিরিও ডিকোডার)

26 (ESP32) -> bclk (স্টিরিও ডিকোডার)

ধাপ 5: BtAudio লাইব্রেরি ইনস্টল করা

BtAudio লাইব্রেরি ইনস্টল করা
BtAudio লাইব্রেরি ইনস্টল করা
BtAudio লাইব্রেরি ইনস্টল করা
BtAudio লাইব্রেরি ইনস্টল করা

যদি আপনি ইতিমধ্যে এগুলি ইনস্টল না করে থাকেন তবে ESP32 এর জন্য Arduino IDE এবং Arduino কোর ইনস্টল করুন। একবার আপনি সেগুলি ইনস্টল করার পরে আমার গিথুব পৃষ্ঠাটি দেখুন এবং সংগ্রহস্থলটি ডাউনলোড করুন। Arduino IDE এর মধ্যে Sketch >> Include Library >> "Add. ZIP library" নির্বাচন করুন। তারপর ডাউনলোড করা জিপ ফাইলটি নির্বাচন করুন। এটি আপনার আরডুইনো লাইব্রেরিতে আমার btAudio লাইব্রেরি যোগ করা উচিত। লাইব্রেরি ব্যবহার করার জন্য আপনাকে Arduino স্কেচে প্রাসঙ্গিক হেডার অন্তর্ভুক্ত করতে হবে। আপনি পরবর্তী ধাপে এটি দেখতে পাবেন।

ধাপ 6: BtAudio লাইব্রেরি ব্যবহার করা

BtAudio লাইব্রেরি ব্যবহার করে
BtAudio লাইব্রেরি ব্যবহার করে
BtAudio লাইব্রেরি ব্যবহার করে
BtAudio লাইব্রেরি ব্যবহার করে

একবার ইনস্টল হয়ে গেলে, মাইক্রো ইউএসবি এর মাধ্যমে আপনার ইএসপি 32 আপনার কম্পিউটারে সংযুক্ত করুন এবং তারপরে আপনার স্টেরিও ডিকোডারটি আপনার স্পিকারের সাথে আপনার 3.5 মিমি তারের সাথে সংযুক্ত করুন। আপনি স্কেচ আপলোড করার আগে আপনাকে Arduino এডিটরে কিছু জিনিস পরিবর্তন করতে হবে। আপনার বোর্ড নির্বাচন করার পর আপনাকে টুলস >> পার্টিশন স্কিমের অধীনে পার্টিশন স্কিম সম্পাদনা করতে হবে এবং "No OTA (Large APP)" অথবা "Minimal SPIFFS (OTA সহ বড় APPS)" নির্বাচন করতে হবে। এটি প্রয়োজনীয় কারণ এই প্রকল্পটি ওয়াইফাই এবং ব্লুটুথ উভয়ই ব্যবহার করে যা উভয়ই খুব মেমরি ভারী লাইব্রেরি। একবার আপনি এটি সম্পন্ন করলে ESP32 এ নিম্নলিখিত স্কেচ আপলোড করুন।

#অন্তর্ভুক্ত

// অডিও ডিভাইসের নাম সেট করে btAudio audio = btAudio ("ESP_Speaker"); অকার্যকর সেটআপ () {// ESP32 audio.begin () এ অডিও ডেটা প্রবাহিত করে (); // একটি I2S DAC int bck = 26 তে প্রাপ্ত ডেটা আউটপুট করে; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } অকার্যকর লুপ () {}

স্কেচ ব্যাপকভাবে 3 ধাপে বিভক্ত করা যেতে পারে:

  1. একটি বৈশ্বিক btAudio অবজেক্ট তৈরি করুন যা আপনার ESP32 এর "ব্লুটুথ নাম" সেট করে
  2. BtAudio:: start পদ্ধতিতে অডিও পাওয়ার জন্য ESP32 কনফিগার করুন
  3. BtAudio:: I2S পদ্ধতি দিয়ে I2S পিন সেট করুন।

সফটওয়্যারের দিক থেকে এটাই! এখন আপনাকে যা করতে হবে তা হল আপনার ESP32 এর সাথে ব্লুটুথ সংযোগ চালু করা। শুধু আপনার ফোন/ল্যাপটপ/এমপিথ্রি প্লেয়ারে নতুন ডিভাইসের জন্য স্ক্যান করুন এবং "ESP_Speaker" উপস্থিত হবে। একবার আপনি খুশি যে সবকিছু কাজ করছে (সঙ্গীত বাজানো) আপনি আপনার কম্পিউটার থেকে ESP32 সংযোগ বিচ্ছিন্ন করতে পারেন। ইউএসবি পাওয়ার সাপ্লাই দিয়ে এটিকে পাওয়ার করুন এবং এটি আপনার আপলোড করা শেষ কোডটি মনে রাখবে। এইভাবে, আপনি আপনার ESP32 কে আপনার হাইফাই সিস্টেমের পিছনে চিরতরে লুকিয়ে রাখতে পারেন।

ধাপ 7: ডিএসপি - ফিল্টারিং

ডিজিটাল সিগন্যাল প্রসেসিং সহ রিসিভার প্রসারিত করা

যদি আপনি সমস্ত ধাপ অনুসরণ করেন (এবং আমি কিছু ছাড়িনি) আপনার হাইফাই সিস্টেমের জন্য এখন আপনার সম্পূর্ণরূপে কার্যকরী ব্লুটুথ রিসিভার আছে। যদিও এটি শীতল তবে এটি মাইক্রোকন্ট্রোলারকে তার সীমাতে ধাক্কা দেয় না। ESP32 এর দুটি কোর 240MHz এ কাজ করে। তার মানে এই প্রজেক্টটি শুধু রিসিভারের চেয়ে অনেক বেশি। এটি একটি ডিজিটাল সিগন্যাল প্রসেসর (DSP) সহ একটি ব্লুটুথ রিসিভার হওয়ার ক্ষমতা রাখে। DSPs মূলত রিয়েল টাইমে সিগন্যালে গাণিতিক ক্রিয়াকলাপ সম্পাদন করে। একটি কার্যকর অপারেশনকে বলা হয় ডিজিটাল ফিল্টারিং। আপনি একটি হাই-পাস বা লো পাস ফিল্টার ব্যবহার করছেন কিনা তার উপর নির্ভর করে এই প্রক্রিয়াটি একটি নির্দিষ্ট কাটঅফ ফ্রিকোয়েন্সি নীচে বা উপরে একটি সিগন্যালে ফ্রিকোয়েন্সি হ্রাস করে।

উচ্চ পাস ফিল্টার

হাই-পাস ফিল্টার একটি নির্দিষ্ট ব্যান্ডের নিচে ফ্রিকোয়েন্সি কমিয়ে দেয়। আমি Earlevel.com থেকে কোডের উপর ভিত্তি করে Arduino সিস্টেমের জন্য একটি ফিল্টার লাইব্রেরি তৈরি করেছি। প্রধান পার্থক্য হল যে আমি উচ্চতর অর্ডার ফিল্টার নির্মাণের অনুমতি দেওয়ার জন্য শ্রেণীর কাঠামো পরিবর্তন করেছি। উচ্চতর অর্ডার ফিল্টারগুলি আপনার কাটঅফের বাইরে ফ্রিকোয়েন্সিগুলিকে আরও কার্যকরভাবে দমন করে তবে তাদের আরও বেশি গণনার প্রয়োজন হয়। যাইহোক, বর্তমান বাস্তবায়নের সাথে, আপনি রিয়েল-টাইম অডিওর জন্য 6th ষ্ঠ অর্ডার ফিল্টারও ব্যবহার করতে পারেন!

স্কেচ আগের ধাপে পাওয়া একটির মতোই, আমরা মূল লুপ পরিবর্তন করেছি। ফিল্টারগুলি সক্ষম করতে আমরা btAudio:: createFilter পদ্ধতি ব্যবহার করি। এই পদ্ধতি 3 টি যুক্তি গ্রহণ করে। প্রথমটি হল ফিল্টার ক্যাসকেডের সংখ্যা। ফিল্টার ক্যাসকেড সংখ্যা ফিল্টারের অর্ধেক অর্ডার। 6th ষ্ঠ অর্ডার ফিল্টারের জন্য, প্রথম আর্গুমেন্ট 3.. 8th ম অর্ডারের ফিল্টারের জন্য 4. হবে। ডেটাতে সত্যিই নাটকীয় প্রভাব ফেলতে আমি 1000Hz এ সেট করেছি। পরিশেষে, আমরা তৃতীয় যুক্তির সাথে ফাইলারের ধরন উল্লেখ করি। এটি একটি হাই-পাস ফিল্টারের জন্য হাইপাস এবং লো-পাস ফিল্টারের জন্য লোপাস হওয়া উচিত। নীচের স্ক্রিপ্টটি 1000Hz এবং 2Hz এর মধ্যে এই ফ্রিকোয়েন্সিটির কাটঅফ পরিবর্তন করে। আপনি তথ্য উপর একটি নাটকীয় প্রভাব শুনতে হবে।

#অন্তর্ভুক্ত

btAudio অডিও = btAudio ("ESP_Speaker"); অকার্যকর সেটআপ () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } অকার্যকর লুপ () {বিলম্ব (5000); audio.createFilter (3, 1000, highpass); বিলম্ব (5000); audio.createFilter (3, 2, highpass); }

কম পাস ফিল্টার

নিম্ন পাস ফিল্টারগুলি উচ্চ পাস ফিল্টারের বিপরীত কাজ করে এবং একটি নির্দিষ্ট ফ্রিকোয়েন্সি উপরে ফ্রিকোয়েন্সি দমন করে। এগুলি উচ্চ পাস ফিল্টারের মতোই প্রয়োগ করা যেতে পারে তবে তাদের তৃতীয় তর্কটি লোপাসে পরিবর্তনের প্রয়োজন হয়। নিচের স্কেচের জন্য আমি 2000Hz এবং 20000Hz এর মধ্যে লো-পাস কাটঅফ বিকল্প করি। আশা করি, আপনি পার্থক্য শুনতে পাবেন। লো-পাস ফিল্টার 2000Hz এ থাকলে এটি বেশ ঝাপসা হওয়া উচিত।

#অন্তর্ভুক্ত

btAudio অডিও = btAudio ("ESP_Speaker"); অকার্যকর সেটআপ () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } অকার্যকর লুপ () {বিলম্ব (5000); audio.createFilter (3, 2000, lowpass); বিলম্ব (5000); audio.createFilter (3, 20000, lowpass); }

ধাপ 8: DSP - ডায়নামিক রেঞ্জ কম্প্রেশন

পটভূমি

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

কোড

ডায়নামিক রেঞ্জ কম্প্রেশনে শুধু ভলিউম কমানো বা সিগন্যাল থ্রেশহোল্ড করা জড়িত নয়। এটা তার চেয়ে একটু বেশি চালাক। যদি আপনি ভলিউম কম করেন তবে শান্ত শব্দগুলির পাশাপাশি উচ্চস্বরের শব্দগুলি হ্রাস পাবে। এর চারপাশে একটি উপায় হল সিগন্যাল থ্রেশহোল্ড করা কিন্তু এর ফলে মারাত্মক বিকৃতি ঘটে। ডায়নামিক রেঞ্জ কম্প্রেশনে নরম থ্রেশহোল্ডিং এবং ফিল্টারিং এর সংমিশ্রণ থাকে যাতে আপনি যদি সিগন্যাল থ্রেশহোল্ড/ক্লিপ করতে পারেন তবে বিকৃতি কমিয়ে আনতে পারেন। ফলাফলটি এমন একটি সংকেত যেখানে বিকৃত ছাড়াই জোরে শব্দগুলি "ক্লিপ" করা হয় এবং শান্ত শব্দগুলি যেমন থাকে তেমনই রেখে দেওয়া হয়। নীচের কোডটি কম্প্রেশনের তিনটি ভিন্ন স্তরের মধ্যে স্যুইচ করে।

  1. বিকৃতি সঙ্গে কম্প্রেশন
  2. বিকৃতি ছাড়া কম্প্রেশন
  3. কোন কম্প্রেশন নেই

#অন্তর্ভুক্ত

btAudio অডিও = btAudio ("ESP_Speaker"); অকার্যকর সেটআপ () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } অকার্যকর লুপ () {বিলম্ব (5000); audio.compress (30, 0.0001, 0.0001, 10, 10, 0); বিলম্ব (5000); audio.compress (30, 0.0001, 0.1, 10, 10, 0); বিলম্ব (5000); audio.decompress (); }

ডাইনামিক রেঞ্জ কম্প্রেশন জটিল এবং btAudio:: কম্প্রেস পদ্ধতিতে অনেকগুলো প্যারামিটার আছে। আমি চেষ্টা করব এবং তাদের ব্যাখ্যা করব (ক্রমানুসারে) এখানে:

  1. থ্রেশহোল্ড - যে স্তরে অডিও হ্রাস পায় (ডেসিবেলে পরিমাপ করা হয়)
  2. আক্রমণের সময় - থ্রেশহোল্ড অতিক্রম হয়ে গেলে কম্প্রেসারের কাজ শুরু করতে সময় লাগে
  3. মুক্তির সময় - কম্প্রেসারের কাজ বন্ধ করতে সময় লাগে।
  4. হ্রাস অনুপাত - যে ফ্যাক্টর দ্বারা অডিও সংকুচিত হয়।
  5. হাঁটুর প্রস্থ - প্রান্ত (ডেসিবেলে) থ্রেশহোল্ডের চারপাশে যেখানে সংকোচকারী আংশিকভাবে কাজ করে (আরও প্রাকৃতিক শব্দ)।
  6. সংকোচনের পরে সংকেতে লাভ (ডেসিবেল) যোগ করা হয়েছে (ভলিউম বৃদ্ধি/হ্রাস)

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

বাস্তবায়ন (জাদু গণিত - alচ্ছিক)

আমি খুঁজে পেয়েছি যে নিরীহভাবে ডায়নামিক রেঞ্জ কম্প্রেশন বাস্তবায়ন করা চ্যালেঞ্জিং। অ্যালগরিদমের জন্য একটি 16-বিট পূর্ণসংখ্যাকে ডেসিবেলে রূপান্তর করতে হবে এবং তারপর সিগন্যাল প্রক্রিয়া করার পরে এটিকে 16-বিট পূর্ণসংখ্যায় রূপান্তর করতে হবে। আমি লক্ষ্য করেছি যে কোডের একটি লাইন স্টিরিও ডেটা প্রক্রিয়া করতে 10 মাইক্রোসেকেন্ড গ্রহণ করছে। 44.1 KHz এ স্টিরিও অডিও স্যাম্পল করা মাত্র 11.3 মাইক্রোসেকেন্ড ডিএসপি -র জন্য এটি অগ্রহণযোগ্যভাবে ধীর… তবে, একটি ছোট লুকআপ টেবিল (400 বাইট) এবং নেটওয়ানের বিভক্ত পার্থক্যের উপর ভিত্তি করে একটি ইন্টারপোলেশন পদ্ধতি একত্রিত করে আমরা 0.2 মাইক্রোসেকেন্ডে প্রায় 17 বিট নির্ভুলতা পেতে পারি । আমি সত্যিকারের আগ্রহীদের জন্য সমস্ত গণিতের সাথে একটি পিডিএফ নথি সংযুক্ত করেছি। এটি জটিল, আপনাকে সতর্ক করা হয়েছে!

ধাপ 9: ওয়াইফাই ইন্টারফেস

ওয়াইফাই ইন্টারফেস
ওয়াইফাই ইন্টারফেস
ওয়াইফাই ইন্টারফেস
ওয়াইফাই ইন্টারফেস

এখন আপনার একটি ব্লুটুথ রিসিভার আছে যা রিয়েল-টাইম ডিএসপি চালাতে সক্ষম। দুlyখজনকভাবে, যদি আপনি কোন ডিএসপি প্যারামিটার পরিবর্তন করতে চান তবে আপনাকে আপনার হাইফাই থেকে সংযোগ বিচ্ছিন্ন করতে হবে, একটি নতুন স্কেচ আপলোড করতে হবে এবং তারপরে পুনরায় সংযোগ করতে হবে। এই clunky হয়। এটি ঠিক করতে আমি একটি ওয়েব সার্ভার তৈরি করেছি যা আপনি আপনার কম্পিউটারে পুনরায় সংযোগ না করে সমস্ত ডিএসপি পরামিতি সম্পাদনা করতে ব্যবহার করতে পারেন। ওয়েব সার্ভার ব্যবহারের স্কেচ নিচে দেওয়া হল।

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত btAudio অডিও = btAudio ("ESP_Speaker"); webDSP ওয়েব; অকার্যকর সেটআপ () {Serial.begin (115200); audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); // আপনার ওয়াইফাই আইডি এবং পাসওয়ার্ড const char* ssid = "SSID" দিয়ে প্রতিস্থাপন করুন; const char* password = "PASSWORD"; web.begin (ssid, password, & audio); } অকার্যকর লুপ () {web._server.handleClient (); }

কোডটি আপনার ESP32 এ একটি আইপি ঠিকানা বরাদ্দ করে যা আপনি ওয়েবপেজ অ্যাক্সেস করতে ব্যবহার করতে পারেন। এই কোডটি প্রথমবার চালানোর সময় এটি আপনার কম্পিউটারে সংযুক্ত করা উচিত। এই ভাবে আপনি আপনার সিরিয়াল মনিটরে আপনার ESP32 এর জন্য নির্ধারিত IP ঠিকানা দেখতে পারেন। আপনি যদি এই ওয়েবপৃষ্ঠাটি অ্যাক্সেস করতে চান তবে কেবল এই ওয়েব ঠিকানাটি যে কোনও ওয়েব ব্রাউজারে প্রবেশ করুন (ক্রোমে পরীক্ষিত)।

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

ধাপ 10: ভবিষ্যতের পরিকল্পনা

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

  • অডিওর ওয়াইফাই স্ট্রিমিং সক্ষম করুন (সেরা অডিও মানের জন্য)
  • ভয়েস কমান্ড সক্ষম করতে একটি I2S মাইক্রোফোন ব্যবহার করুন
  • একটি ওয়াইফাই নিয়ন্ত্রিত সমতুল্য বিকাশ করুন
  • এটিকে সুন্দর করে তুলুন (ব্রেডবোর্ডটি দুর্দান্ত পণ্য নকশা করে না)

যখন আমি এই ধারনাগুলি বাস্তবায়নের জন্য ঘুরে বেড়াব তখন আমি আরও নির্দেশযোগ্য করব। অথবা হয়তো অন্য কেউ এই বৈশিষ্ট্যগুলি বাস্তবায়ন করবে। সবকিছুই ওপেন সোর্স বানানোর আনন্দ!

প্রস্তাবিত: