# Audio-Course

## Docs

- [🤗 Audio পাঠক্রমে আপনাদের স্বাগতম !](https://huggingface.co/learn/audio-course/bn/chapter0/introduction.md)
- [🤗 সম্প্রদায় যোগদান করুন!](https://huggingface.co/learn/audio-course/bn/chapter0/community.md)
- [প্রস্তুতি পর্ব](https://huggingface.co/learn/audio-course/bn/chapter0/get_ready.md)
- [লাইভ সেশন এবং কর্মশালা](https://huggingface.co/learn/audio-course/bn/events/introduction.md)
- [কোর্সের উপাদান সম্পর্কে আপনার উপলব্ধি পরীক্ষা করুন](https://huggingface.co/learn/audio-course/bn/chapter1/quiz.md)
- [অধ্যায় ১. অডিও ডাটার সাথে কাজ করার পদ্ধতিসমূহ](https://huggingface.co/learn/audio-course/bn/chapter1/introduction.md)
- [আরো জানো](https://huggingface.co/learn/audio-course/bn/chapter1/supplemental_reading.md)
- [অডিও ডাটাসেটকে লোড এবং বিশ্লেষণ করা](https://huggingface.co/learn/audio-course/bn/chapter1/load_and_explore.md)
- [অডিও ডেটা স্ট্রিমিং](https://huggingface.co/learn/audio-course/bn/chapter1/streaming.md)
- [অডিও ডাটা প্রক্রিয়াকরণ](https://huggingface.co/learn/audio-course/bn/chapter1/preprocessing.md)
- [অডিও ডাটার সাথে পরিচয়](https://huggingface.co/learn/audio-course/bn/chapter1/audio_data.md)
- [অধ্যায় ২. অডিও অ্যাপ্লিকেশনের সূচনা](https://huggingface.co/learn/audio-course/bn/chapter2/introduction.md)
- [Pipeline এর মাদ্ধমে Audio classification](https://huggingface.co/learn/audio-course/bn/chapter2/audio_classification_pipeline.md)
- [pipeline এর মাদ্ধমে Automatic speech recognition](https://huggingface.co/learn/audio-course/bn/chapter2/asr_pipeline.md)
- [হাতে-করি অনুশীলন](https://huggingface.co/learn/audio-course/bn/chapter2/hands_on.md)

### 🤗 Audio পাঠক্রমে আপনাদের স্বাগতম !
https://huggingface.co/learn/audio-course/bn/chapter0/introduction.md

# 🤗 Audio পাঠক্রমে আপনাদের স্বাগতম !

প্রিয় শিক্ষার্থী,

অডিও র জন্য Transformer মডেলস ব্যবহার করার এই কোর্সে স্বাগতম। Transformer রা বার বার নিজেরদেরকে Deep Learning এর জন্যে সবচেয়ে
শক্তিশালী এবং অন্যতম হিসেবে নিজেদের প্রমাণ করেছে। Transformers এর ব্যবহার বহুমুখী, Natural Language Processing এবং Computer Vision
থেকে শুরু করে সম্প্রতি Audio Processing এর কাজে অত্যাধুনিক ফলাফল অর্জন করতে সক্ষম হয়েছে।

এই কোর্সে, আমরা অডিও ডাটা তে কীভাবে Transformers এর প্রয়োগ করা যেতে পারে তা অন্বেষণ করব। আপনি শিখবেন কিভাবে Speech Recognition,
Audio Classification, Text to Speech Generating এবং আরো অনেক ক্ষেত্রে Transformers এর ব্যবহার করতে হয়।

এই মডেলস গুলো কী করতে পারে তার স্বাদ দিতে, নীচের ডেমোতে কয়েকটি শব্দ বলুন এবং মডেল এর দ্বারা তৈরী করা real-time প্রতিলিপি দেখুন!

<iframe
	src="https://openai-whisper.hf.space"
	frameborder="0"
	width="850"
	height="450">
</iframe>

পুরো পাঠক্রম জুড়ে, আপনি অডিও ডাটার সাথে কাজ করার সুনির্দিষ্ট বিষয়গুলি সম্পর্কে একটি বোধগম্যতা অর্জন করবেন, আপনি বিভিন্ন Transformer এর
নির্মাণকৌশল এর ব্যাপারে জানতে পারবেন, এবং আপনি আপনার নিজের শক্তিশালী Audio Transformer model তৈরী করতে পারবেন।

এই কোর্সটি এমন শিক্ষার্থীদের জন্য ডিজাইন করা হয়েছে যাদের Deep Learning এর ব্যাকগ্রাউন্ড এবং Transformer এর সাথে সাধারণ পরিচিতি রয়েছে।
অডিও ডাটা প্রক্রিয়াকরণ এর কোনো দক্ষতার প্রয়োজন নেই। আপনি যদি Transformer এর সম্পর্কে আপনার জ্ঞান এর যাচাই করতে চান, তাহলে আমাদের
[NLP Course](https://huggingface.co/course/chapter1/1) এর সাহায্য নিন।

## পাঠক্রমের শিক্ষকদের সাথে পরিচয়

**সঞ্চিত গান্ধী, 🤗 এ Machine Learning Research Engineer**

আমি সঞ্চিত এবং আমি Hugging Face 🤗 এ ওপেন সোর্স টিমে অডিওর জন্য Machine Learning Engineer আমার প্রাথমিক ফোকাস হল
Automatic Speech Recognition and Translation, Speech মডেলস গুলোকে দ্রুততর করা এবং সেগুলোকে হালকা এবং সহজলভ্য করা।

**ম্যাথিজ হোলেম্যানস, 🤗 এ Machine Learning Engineer**

আমি ম্যাথিজ এবং আমি Hugging Face-এ ওপেন সোর্স টিমে অডিওর জন্য একজন Machine Learning Engineer। আমিও কিভাবে সাউন্ড সিন্থেসাইজার
লিখতে হয় তার একটি বই এর লেখক এবং আমি আমার অবসর সময়ে অডিও প্লাগ-ইন তৈরি করি।

**মারিয়া খালুসোভা, 🤗 এ ডকুমেন্টেশন এবং কোর্স, পাঠক্রম**

আমি মারিয়া, এবং আমি Transformers এবং অন্যান্য ওপেন-সোর্স টুলকে আরও বেশি করে সহজ করে তুলতে শিক্ষামূলক সামগ্রী এবং ডকুমেন্টেশন তৈরি করি।
আমি জটিল প্রযুক্তিগত ধারণাগুলি সহজ ভাষায় ভেঙে দিই এবং অত্যাধুনিক প্রযুক্তিগুলিকে সহজলভ্য করে তুলতে সাহায্য করি৷

**বৈভব শ্রীবাস্তব, 🤗 এ ML Developer Advocate Engineer**

আমি বৈভব এবং আমি গবেষণা করি কম রিসোর্স Text To Speech নিয়ে এবং State of the art speech research কে জনসাধারণের কাছে আনতে সাহায্য করি।

## পাঠক্রমের কাঠামো

পাঠক্রমটিকে বেশ কয়েকটি অধ্যায়ে ভাগ করা হয়েছে যা বিভিন্ন বিষয়কে গভীরভাবে কভার করে:

* অধ্যায় ১: অডিও প্রসেসিং কৌশল এবং ডেটা প্রস্তুতি সহ অডিও ডেটা নিয়ে কাজ করার সুনির্দিষ্ট বিষয়ে জানুন।
* অধ্যায় ২: অডিও অ্যাপ্লিকেশনগুলি সম্কর্কে জানুন এবং বিভিন্ন কাজের জন্য 🤗 Transformers পাইপলাইন গুলো কীভাবে ব্যবহার করবেন তা শিখুন,
যেমন Audio Classification এবং Speech Recognition
* অধ্যায় ৩: অডিও Transformers আর্কিটেকচার অন্বেষণ করুন, তারা কীভাবে আলাদা, এবং কোন কাজের জন্য তারা সবচেয়ে উপযুক্ত তা শিখুন।
* অধ্যায় ৪: কীভাবে আপনার নিজস্ব সঙ্গীত ঘরানার শ্রেণীবিভাগ তৈরি করবেন তা শিখুন।
* অধ্যায় ৫: Speech Recognition করা এবং মিটিং রেকর্ডিং প্রতিলিপি করার জন্য একটি মডেল তৈরি করুন।
* অধ্যায় ৬: Text থেকে Speech তৈরি করতে শিখুন।
* ইউনিট ৭: কিভাবে Transformers দিয়ে এক অডিও থেকে অন্য অডিও তে রূপান্তর করতে হয় তা শিখুন।

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

কোর্স শেষে, অডিও ডাটার র জন্য Transformers ব্যবহার করার ক্ষেত্রে আপনার একটি শক্তিশালী ভিত্তি থাকবে এবং অডিও সম্পর্কিত কাজগুলির ক্ষেত্রে বিস্তৃত
পরিসরে এই কৌশলগুলি প্রয়োগ করার জন্য আপনি সুসজ্জিত থাকবেন।

নিম্নলিখিত প্রকাশনার সময়সূচী সহ কোর্স অধ্যায়গুলোকে পরপর কয়েকটি ব্লকে প্রকাশ করা হবে:

| অধ্যায়   | প্রকাশের তারিখ |
|---|-----------------|
| অধ্যায় ০, অধ্যায় ১, অধ্যায় ২  | ১৪ ঐ জুন, ২০২৩   |
| অধ্যায় ৩, অধ্যায় ৪  | ২১ সে জুন, ২০২৩    |
| অধ্যায় ৫  | ২৮ সে জুন, ২০২৩   |
| অধ্যায় ৬  | ৫ ঐ জুলাই, ২০২৩    |
| অধ্যায় ৭, অধ্যায় ৮  | ১২ ঐ জুলাই, ২০২৩   |

[//]: # (| Bonus Unit  | TBD             |)

## শেখার পথ এবং সার্টিফিকেশন

এই কোর্সটি করার কোন সঠিক বা ভুল উপায় নেই। এই কোর্সের সমস্ত উপকরণ ১০০%  বিনামূল্যে, পাবলিক এবং ওপেন সোর্স। আপনি নিজের গতিতে
কোর্সটি নিতে পারেন, তবে আমরা তাদের ক্রম অনুসারে অধ্যায় গুলোর মধ্য দিয়ে যাওয়ার পরামর্শ দিই।

আপনি যদি কোর্স সমাপ্তির পরে সার্টিফিকেট পেতে চান তাহলে আমরা দুটি বিকল্প অফার করি:

| সার্টিফিকেট এর প্রকার   | প্রয়োজনীয়তা                                                                                   |
|---|------------------------------------------------------------------------------------------------|
| শেষ করার সার্টিফিকেট  | জুলাই ২০২৩ শেষ হওয়ার আগে নির্দেশাবলী অনুসারে হাতে-করি অনুশীলন এর ৮০% সম্পূর্ণ করুন। |
| সম্মানের সার্টিফিকেট  | জুলাই ২০২৩ শেষ হওয়ার আগে নির্দেশাবলী অনুসারে হাতে-করি অনুশীলন এর ১০০% সম্পূর্ণ করুন। |

প্রতিটি হাতে-করি অনুশীলন তার সমাপ্তির মানদণ্ডকে রূপরেখা দেয়। একবার আপনি যোগ্যতা অর্জনের জন্য যথেষ্ট হাতে-করি অনুশীলন সম্পন্ন করে থাকলে যেকোনো
একটি সার্টিফিকেটের জন্য, আপনি কীভাবে আপনার শংসাপত্র পেতে পারেন তা জানতে কোর্সের শেষ অদ্ধ্যায় পড়ুন। শুভকামনা!

## পাঠক্রমের প্রচার এর জন্যে Sign up করুন

এই পাঠক্রমের অধ্যায় গুলি কয়েক সপ্তাহের মধ্যে ধীরে ধীরে প্রকাশ করা হবে। আমরা আপনাকে সাইন আপ করতে উৎসাহিত করি যাতে আপনি নতুন অধ্যায় রিলিজ
করার সময় মিস না করেন। আমরা যে বিশেষ সামাজিক ইভেন্টগুলি হোস্ট করার পরিকল্পনা করেছি, যারা পাঠক্রমের প্রচার এর জন্যে Sign up করবেন তারা সে সম্পর্কে
আগে আগে জানতে পারবেন।

[SIGN UP](http://eepurl.com/insvcI)

পাঠক্রমটি উপভোগ করুন!

<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter0/introduction.mdx" />

### 🤗 সম্প্রদায় যোগদান করুন!
https://huggingface.co/learn/audio-course/bn/chapter0/community.md

# 🤗 সম্প্রদায় যোগদান করুন!

আমরা আপনাকে আমাদের [Discord](http://hf.co/join/discord) যোগদান করার জন্যে আমন্ত্রণ করছি। ওখানে আপনি আপনার মতন আরো শিক্ষার্থীদের
সাথে যোগাযোগ করার সুযোগ পাবেন, এছাড়াও আপনি নিজের মতামত অন্যদের সাথে বিনিময় করার সুযোগ পাবেন, প্রশ্ন করতে পারবেন, অন্যদের সাথে সহযোগিতা
করতে পারবেন এবং নিজের হাতে-করি অনুশীলনীর সম্পর্কে মূল্যবান প্রতিক্রিয়া পাবেন।

আমাদের দলও Discord এ সক্রিয়, এবং তারা যখন আপনার প্রয়োজন তখন সহায়তা এবং নির্দেশনা প্রদানের জন্য আছে।
আমাদের সম্প্রদায়ে যোগদান করার মাদ্ধমে আপনি পাঠক্রমের সাথে অনুপ্রাণিত, নিযুক্ত এবং সংযুক্ত থাকতে পারবে। আমরা আপনাকে সেখানে দেখার অপেক্ষায় আছি!

## Discord কি?

ডিসকর্ড একটি বিনামূল্যের চ্যাট প্ল্যাটফর্ম। আপনি যদি Slack ব্যবহার করে থাকেন তবে আপনি এটি বেশ একই রকম পাবেন। 🤗 Discord সার্ভার হলো
১৮ ০০০ এর বেশি A.I. বিশেষজ্ঞ, শিক্ষার্থী এবং উত্সাহীদের একটি সমৃদ্ধশালী সম্প্রদায় যার আপনি একটি অংশ হতে পারেন।

## Discord এর পরিচালনা করা

একবার আপনি আমাদের ডিসকর্ড সার্ভারে Sign Up করলে, আপনাকে `#role-assignment`-এ ক্লিক করে আপনার আগ্রহের বিষয়গুলি বেছে নিতে হব।
বাম দিকে আপনি আপনার পছন্দ হিসাবে অনেক বিভিন্ন বিভাগ চয়ন করতে পারেন. এই কোর্সের অন্যান্য শিক্ষার্থীদের যোগ দিতে, নিশ্চিত করুন "ML for Audio and Speech" ক্লিক করতে।
চ্যানেলগুলি অন্বেষণ করুন এবং `#introduce-yourself` চ্যানেলে আপনার সম্পর্কে কিছু জিনিস শেয়ার করুন যাতে আমরা আপনাকে আরো জানতে পারি।

## Audio course সংক্রান্ত চ্যানেল

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

* `#audio-announcements`: পাঠক্রম সম্পর্কে আপডেট, audio ইভেন্ট ঘোষণা এবং 🤗 সম্পর্কিত আরও অনেক কিছু খবর পাবেন।
* `#audio-study-group`: ধারনা বিনিময় করার জায়গা, পাঠক্রম সম্পর্কে প্রশ্ন জিজ্ঞাসা করুন এবং আলোচনা শুরু করুন।
* `#audio-discuss`: audio সম্পর্কিত বিষয় নিয়ে আলোচনা করার একটি সাধারণ জায়গা।

`#audio-study-group`-এ যোগদানের পাশাপাশি, নির্দ্বিধায় আপনার নিজস্ব স্টাডি গ্রুপ তৈরি করুন, একসাথে শেখা সবসময়ই সহজ!

<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter0/community.mdx" />

### প্রস্তুতি পর্ব
https://huggingface.co/learn/audio-course/bn/chapter0/get_ready.md

# প্রস্তুতি পর্ব

আমরা আশা করি আপনি পাঠক্রমটি শুরু করতে উত্তেজিত, এবং আমরা এই পৃষ্ঠাটি আপনার প্রস্তুতির শুরু করার জন্যে ডিজাইন করেছি!

## পদক্ষেপ ১. Sign up

সমস্ত আপডেট এবং বিশেষ সামাজিক ইভেন্টগুলির সাথে আপ টু ডেট থাকতে, কোর্সে Sign Up করুন ৷

[👉 SIGN UP](http://eepurl.com/insvcI)

## পদক্ষেপ ২. 🤗 account তৈরী করুন

আপনার যদি এখনও একটি 🤗 account না থাকে, একটি 🤗 account তৈরি করুন (এটি বিনামূল্যে)। হাতে-কলমে কাজগুলি সম্পূর্ণ করার জন্য আপনার এটির
প্রয়োজন হব। এছাড়াও এটি আপনার সমাপ্তির শংসাপত্র গ্রহণ করতে, pre-trained models গুলি অন্বেষণ করতে, ডেটাসেটগুলি অ্যাক্সেস করতে এবং আরও
অনেক কিছু করতে সাহায্য করবে ।

[👉 🤗 account তৈরি করুন](https://huggingface.co/join)

## পদক্ষেপ ৩. Transformer models এর যাচাই করে নিন (আপনার যদি প্রয়োজন পরে তবেই)

আমরা অনুমান করি যে আপনার Deep Learning এর সাথে পরিচয় আছে এবং Transformers models এর সাথে সাধারণ পরিচিতি রয়েছে।
আপনার যদি Transformers models এর ব্যাপারে যাচাই করার প্রয়োজন পরে তাহলে আমাদের [NLP Course](https://huggingface.co/course/chapter1/1) এর সাহায্য নিতে পারেন।

## পদক্ষেপ ৪. আপনার সেটআপ চেক করুন

আপনার যা যা প্রয়োজন হবে:
- ইন্টারনেট সংযোগ সহ একটি কম্পিউটার
- [Google Colab](https://colab.research.google.com) এর প্রয়োজন হবে হাতে-করি অনুশীলনীর জন্যে। বিনামূল্যের সংস্করণটি যথেষ্ট.

আপনি যদি আগে কখনো Google Colab ব্যবহার না করে থাকেন তাহলে এটি দেখুন - [official introduction notebook](https://colab.research.google.com/notebooks/intro.ipynb).

## পদক্ষেপ ৫. 🤗 সম্প্রদায় যোগদান করুন

আমাদের Discord সার্ভারে Sign Up করুন, সেই জায়গা যেখানে আপনি আপনার সহপাঠীদের সাথে ধারনা এবং তথ্য বিনিময় করতে পারেন এবং আমাদের সাথে যোগাযোগ করতে পারেন (🤗 Team)।

[👉 🤗 সম্প্রদায় যোগদান করুন](http://hf.co/join/discord)

আমাদের সম্প্রদায়ের সম্পর্কে আরো জানতে পরের [পাতায় যান](community)।


<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter0/get_ready.mdx" />

### লাইভ সেশন এবং কর্মশালা
https://huggingface.co/learn/audio-course/bn/events/introduction.md

# লাইভ সেশন এবং কর্মশালা

নতুন অডিও Transformers কোর্স: Live Launch Event with Paige Bailey (DeepMind), Seokhwan Kim (Amazon Alexa AI), and Brian McFee (Librosa)

<Youtube id="wqkKResXWB8"/>

Hugging Face অডিও কোর্স টিমের সাথে একটি লাইভ AMA এর রেকর্ডিং:

<Youtube id="fbONSVoUneQ"/>

<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/events/introduction.mdx" />

### কোর্সের উপাদান সম্পর্কে আপনার উপলব্ধি পরীক্ষা করুন
https://huggingface.co/learn/audio-course/bn/chapter1/quiz.md

# কোর্সের উপাদান সম্পর্কে আপনার উপলব্ধি পরীক্ষা করুন

### ১. Sampling Rate কোন এককে পরিমাপ করা হয়?

<Question
	choices={[
		{
			text: "dB",
			explain: "না, amplitude ডেসিবেলে (dB) পরিমাপ করা হয়।"
		},
		{
			text: "Hz",
			explain: "Sampling Rate হল এক সেকেন্ডে নেওয়া নমুনার সংখ্যা এবং হার্টজ (Hz) এ পরিমাপ করা হয়।",
			correct: true
		},
		{
			text: "bit",
			explain: "bit, bit depth বর্ণনা করতে ব্যবহৃত হয়, যা একটি অডিও সংকেতের প্রতিটি নমুনাকে উপস্থাপন করতে ব্যবহৃত তথ্যের বিটের সংখ্যা বোঝায়।",
		}
	]}
/>

### ২. একটি বড় অডিও ডেটাসেট স্ট্রিম করার সময়, আপনি কত তাড়াতাড়ি এটি ব্যবহার করা শুরু করতে পারেন?

<Question
	choices={[
		{
			text: "সম্পূর্ণ ডেটাসেট ডাউনলোড হওয়ার সাথে সাথে।",
			explain: "ডেটা স্ট্রিমিংয়ের লক্ষ্য হল একটি ডেটাসেট সম্পূর্ণরূপে ডাউনলোড না করেই এটির সাথে কাজ করতে সক্ষম হওয়া।"
		},
		{
			text: "যত তাড়াতাড়ি প্রথম ১৬টি  উদাহরণ ডাউনলোড করা হয়।",
			explain: "আবার চেষ্টা করুন!"
		},
		{
			text: "যত তাড়াতাড়ি প্রথম উদাহরণ ডাউনলোড করা হয়।",
			explain: "",
			correct: true
		}
	]}
/>

### ৩. spectrogram কি ?

<Question
	choices={[
		{
			text: "অডিও ডিজিটাইজ করতে ব্যবহৃত একটি ডিভাইস যা প্রথমে একটি মাইক্রোফোন দ্বারা ক্যাপচার করা হয়, যা শব্দ তরঙ্গকে বৈদ্যুতিক সংকেতে রূপান্তরিত করে।",
			explain: "এই ধরনের বৈদ্যুতিক সংকেত ডিজিটাইজ করার জন্য ব্যবহৃত একটি ডিভাইসকে বলা হয় অ্যানালগ-টু-ডিজিটাল কনভার্টার। আবার চেষ্টা কর!"
		},
		{
			text: "একটি প্লট যা দেখায় কিভাবে একটি অডিও সংকেতের amplitude সময়ের সাথে পরিবর্তিত হয়। এটি শব্দের *time domain* উপস্থাপনা হিসাবেও পরিচিত।",
			explain: "উপরের বর্ণনাটি waveform বোঝায়, spectrogram নয়।"
		},
		{
			text: "একটি সিগন্যালের ফ্রিকোয়েন্সি বর্ণালীর একটি ভিজ্যুয়াল উপস্থাপনা কারণ এটি সময়ের সাথে পরিবর্তিত হয়।",
			explain: "",
			correct: true
		}
	]}
/>

### ৪. Whisper দ্বারা প্রত্যাশিত লগ-মেল স্পেকট্রোগ্রামে, কাঁচা অডিও ডেটা রূপান্তর করার সবচেয়ে সহজ উপায় কী?

A.
```python
librosa.feature.melspectrogram(audio["array"])
```

B.
```python
feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-small")
feature_extractor(audio["array"])
```

C.
```python
dataset.feature(audio["array"], model="whisper")
```

<Question
	choices={[
		{
			text: "A",
			explain: "`librosa.feature.melspectrogram()` পাওয়ার স্পেক্ট্রোগ্রাম তৈরী করে।"
		},
		{
			text: "B",
			explain: "",
			correct: true
		},
		{
			text: "C",
			explain: "ডেটাসেট ট্রান্সফরমার মডেলের জন্য ফিচারস প্রস্তুত করে না, এটি মডেলের প্রিপ্রসেসর দ্বারা করা হয়।"
		}
	]}
/>

### ৫. আপনি কিভাবে 🤗 হাব থেকে একটি ডেটাসেট লোড করবেন?

A.
```python
from datasets import load_dataset

dataset = load_dataset(DATASET_NAME_ON_HUB)
```

B.
```python
import librosa

dataset = librosa.load(PATH_TO_DATASET)
```

C.
```python
from transformers import load_dataset

dataset = load_dataset(DATASET_NAME_ON_HUB)
```

<Question
	choices={[
		{
			text: "A",
			explain: "সবচেয়ে ভালো উপায় হল 🤗 ডেটাসেট লাইব্রেরি ব্যবহার করা।",
			correct: true
		},
		{
			text: "B",
			explain: "Librosa.load স্যাম্পলিং রেট সহ একটি পাথ থেকে একটি পৃথক অডিও ফাইল লোড করতে উপযোগী, কিন্তু অনেক উদাহরণ এবং একাধিক বৈশিষ্ট্য সহ একটি সম্পূর্ণ ডেটাসেট নয়।"
		},
		{
			text: "C",
			explain: "load_dataset পদ্ধতি 🤗 ডেটাসেট লাইব্রেরিতে আসে, 🤗 ট্রান্সফরমারে নয়।"
		}
	]}
/>

### ৬. আপনার কাস্টম ডেটাসেটে ৩২ kHz sampling rate সহ উচ্চ-মানের অডিও রয়েছে৷ আপনি একটি speech recognition মডেলকে train করতে চান যা আশা করে যে অডিও উদাহরণগুলির একটি ১৬ খজ sampling rate থাকবে। তোমার কি করা উচিত?

<Question
	choices={[
		{
			text: "উদাহরণগুলি যেমন ব্যবহার করুন, মডেলটি সহজেই উচ্চ মানের অডিও উদাহরণে সাধারণীকরণ করবে।",
			explain: "attention mechanism এর উপর নির্ভরতার কারণে, মডেলগুলির জন্য নমুনা হারের মধ্যে সাধারণীকরণ করা চ্যালেঞ্জিং।"
		},
		{
			text: "কাস্টম ডেটাসেটের উদাহরণগুলি ডাউন নমুনা করতে 🤗 ডেটাসেট লাইব্রেরি থেকে Audio মডিউল ব্যবহার করুন।  ",
			explain: "",
			correct: true
		},
		{
			text: "প্রতি দ্বিতীয় নমুনা ফেলে দিয়ে একটি গুণনীয়ক ২x দ্বারা ডাউন নমুনা।",
			explain: "এটি সিগন্যালে বিকৃতি তৈরি করবে। সঠিকভাবে পুনরায় নমুনা তৈরি করা কঠিন এবং ভাল-পরীক্ষিত লাইব্রেরি যেমন librosa বা 🤗 datasets গুলোর উপরে ছেড়ে দেওয়া ভালো।"
		}
	]}
/>

### ৭. আপনি কিভাবে একটি মেশিন লার্নিং মডেল দ্বারা উত্পন্ন একটি spectrogram কে একটি waveform এ রূপান্তর করতে পারেন?

<Question
	choices={[
		{
			text: "আমরা স্পেকট্রোগ্রাম থেকে একটি waveform পুনর্গঠন করতে vocoder নামে একটি নিউরাল নেটওয়ার্ক ব্যবহার করতে পারি।",
			explain: "যেহেতু এই ক্ষেত্রে ফেজের তথ্য অনুপস্থিত, তাই তরঙ্গরূপ পুনর্গঠনের জন্য আমাদের একটি vocodder বা ক্লাসিক Griffin-Lim অ্যালগরিদম ব্যবহার করতে হবে।",
			correct: true
		},
		{
			text: "উৎপন্ন স্পেকট্রোগ্রামকে তরঙ্গরূপে রূপান্তর করতে আমরা inverse STFT ব্যবহার করতে পারি। ",
			explain: "একটি জেনারেট করা spectrogram এ ফেজ তথ্য অনুপস্থিত রয়েছে যা inverse STFT ব্যবহার করার জন্য প্রয়োজন।"
		},
		{
			text: "আপনি একটি মেশিন লার্নিং মডেল দ্বারা উত্পন্ন একটি spectrogram কে waveform এ রূপান্তর করতে পারবেন না।",
			explain: "আবার চেষ্টা করুন!"
		}
	]}
/>


<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter1/quiz.mdx" />

### অধ্যায় ১. অডিও ডাটার সাথে কাজ করার পদ্ধতিসমূহ
https://huggingface.co/learn/audio-course/bn/chapter1/introduction.md

# অধ্যায় ১. অডিও ডাটার সাথে কাজ করার পদ্ধতিসমূহ

## এই অধ্যায় থেকে তুমি কি কি শিখবে?

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

এই অধ্যায়ে, আপনি তরঙ্গরূপ সহ অডিও ডেটা সম্পর্কিত sampling rate, spectrogram এর মতন মৌলিক পরিভাষাগুলির একটি উপলব্ধি লাভ করবেন,
এহকারাও আপনি অডিও লোডিং এবং প্রিপ্রসেসিং সহ অডিও ডেটাসেটগুলির সাথে কীভাবে কাজ করবেন তাও শিখবেন এবং কীভাবে বড় ডেটাসেটগুলি দক্ষতার সাথে স্ট্রিম করা যায়।

এই অধ্যায়ের শেষে, আপনি প্রয়োজনীয় audio ডেটা সম্পর্কিত পরিভাষাগুলির একটি শক্তিশালী উপলব্ধি করতে পারবেন এবং
বিভিন্ন অ্যাপ্লিকেশনের জন্য অডিও ডেটাসেটের সাথে কাজ করার জন্য প্রয়োজনীয় দক্ষতা অর্জন করবেন।  এই অধ্যায় এ আপনি যে জ্ঞান অর্জন করবেন তা পাঠক্রমের অবশিষ্টাংশ বোঝার জন্য একটি ভিত্তি স্থাপন করবে।

<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter1/introduction.mdx" />

### আরো জানো
https://huggingface.co/learn/audio-course/bn/chapter1/supplemental_reading.md

# আরো জানো

এই অধ্যায়ে অডিও ডেটার ব্যাপারে বোঝা এবং এটির সাথে কাজ করা সম্পর্কিত অনেক মৌলিক ধারণাগুলিকে কভার করা করেছে৷ আরো জানতে চান? এখানে আপনি
অতিরিক্ত সংস্থানগুলি পাবেন যা আপনাকে বিষয়গুলি সম্পর্কে আপনার বোঝার গভীরে সাহায্য করবে এবং আপনার শেখার অভিজ্ঞতা উন্নত করবে।

নিম্নলিখিত ভিডিওতে, xiph.org থেকে মন্টি মন্টগোমারি, আধুনিক ডিজিটাল এবং ভিনটেজ অ্যানালগ বেঞ্চ সরঞ্জাম উভয় ব্যবহার করে
sampling, quantization, bit-depth এর বিশ্লেষণ করেছেন। ভিডিওটি দেখুন:

<Youtube id="cIQ9IXSUzuM"/>

আপনি যদি ডিজিটাল সিগন্যাল প্রসেসিংয়ের আরও গভীরে যেতে চান তবে ব্রায়ান ম্যাকফির(যিনি New York University র মিউজিক টেকনোলজি এবং
ডেটা সায়েন্সের একজন সহকারী অধ্যাপক এবং `librosa` প্যাকেজের প্রধান রক্ষণাবেক্ষণকার) লেখা ["Digital Signals Theory" book](https://brianmcfee.net/dstbook-site/content/intro.html)
বইটি পড়ুন।




<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter1/supplemental_reading.mdx" />

### অডিও ডাটাসেটকে লোড এবং বিশ্লেষণ করা
https://huggingface.co/learn/audio-course/bn/chapter1/load_and_explore.md

# অডিও ডাটাসেটকে লোড এবং বিশ্লেষণ করা

এই কোর্সে আমরা অডিও ডেটাসেটের সাথে কাজ করার জন্য 🤗 ডেটাসেট লাইব্রেরি ব্যবহার করব। 🤗 ডেটাসেট হল একটি ওপেন সোর্স লাইব্রেরি যাতে অডিও সহ সমস্ত
পদ্ধতি থেকে ডেটাসেট ডাউনলোড এবং প্রস্তুত করা যায়। Hugging Face Hub-এ সর্বজনীনভাবে উপলব্ধ মেশিন লার্নিং ডেটাসেটের নির্বাচন করার জন্যে 🤗 ডেটাসেট একটি অতুলনীয় সহজ উপায়।
তাছাড়া, 🤗 ডেটাসেট গবেষক এবং অনুশীলনকারী উভয়ের জন্য এই ধরনের ডেটাসেটের সাথে কাজ করা সহজ করে।

অডিও ডেটাসেটগুলির সাথে কাজ শুরু করতে, নিশ্চিত করুন যে আপনার কাছে 🤗 ডেটাসেট লাইব্রেরি ইনস্টল করা আছে:

```bash
pip install datasets[audio]
```

🤗 ডেটাসেটের মূল বৈশিষ্ট্যগুলির মধ্যে একটি হল `load_dataset()` ফাংশন ব্যবহার করে শুধুমাত্র একটি লাইনে একটি ডেটাসেট ডাউনলোড এবং প্রস্তুত করার ক্ষমতা।

আসুন [MINDS-14](https://huggingface.co/datasets/PolyAI/minds14) নামক অডিও ডেটাসেট লোড এবং অন্বেষণ করি, যার মধ্যে রয়েছে বিভিন্ন ভাষা
এবং উপভাষায় একটি ই-ব্যাংকিং সিস্টেমের প্রশ্ন জিজ্ঞাসা করা লোকেদের রেকর্ডিং।

MINDS-14 ডেটাসেট লোড করার জন্য, আমাদের হাবে (`PolyAI/minds14`) ডেটাসেটের শনাক্তকারী কপি করে পাস করতে হবে `লোড_ডেটাসেট` ফাংশনে। আমরা
এটাও উল্লেখ করব যে আমরা শুধুমাত্র অস্ট্রেলিয়ান সাবসেটে (`en-AU`) আগ্রহী, এবং train বিভাজনে সীমাবদ্ধ করুন:


```py
from datasets import load_dataset

minds = load_dataset("PolyAI/minds14", name="en-AU", split="train")
minds
```

**আউটপুট:**
```out
Dataset(
    {
        features: [
            "path",
            "audio",
            "transcription",
            "english_transcription",
            "intent_class",
            "lang_id",
        ],
        num_rows: 654,
    }
)
```

ডেটাসেটে ৬৫৪ টি অডিও ফাইল রয়েছে, যার প্রতিটির সাথে একটি ট্রান্সক্রিপশন, একটি ইংরেজি অনুবাদ এবং একটি লেবেল রয়েছে
ব্যক্তির প্রশ্নের পিছনে অভিপ্রায় ইঙ্গিত. অডিও কলামে কাঁচা অডিও ডেটা থাকে। এর একটি ঘনিষ্ঠভাবে কটাক্ষপাত করা যাক
উদাহরণগুলির একটিতে:

```py
example = minds[0]
example
```

**আউটপুট:**
```out
{
    "path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
    "audio": {
        "path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
        "array": array(
            [0.0, 0.00024414, -0.00024414, ..., -0.00024414, 0.00024414, 0.0012207],
            dtype=float32,
        ),
        "sampling_rate": 8000,
    },
    "transcription": "I would like to pay my electricity bill using my card can you please assist",
    "english_transcription": "I would like to pay my electricity bill using my card can you please assist",
    "intent_class": 13,
    "lang_id": 2,
}
```

আপনি লক্ষ্য করতে পারেন যে অডিও কলামে বেশ কয়েকটি বৈশিষ্ট্য রয়েছে। এখানে তারা কি:
* `path`: অডিও ফাইলের পথ (এই ক্ষেত্রে `*.wav`)।
* `array`: ডিকোড করা অডিও ডেটা, একটি 1-মাত্রিক NumPy অ্যারে হিসাবে উপস্থাপিত।
* `sampling_rate`। অডিও ফাইলের sampling_rate (এই উদাহরণে ৮,০০০ Hz)।

'intent_class' হল অডিও রেকর্ডিংয়ের একটি শ্রেণীবিভাগ। এই সংখ্যাটিকে একটি অর্থপূর্ণ স্ট্রিংয়ে রূপান্তর করতে,
আমরা `int2str()` পদ্ধতি ব্যবহার করতে পারি:

```py
id2label = minds.features["intent_class"].int2str
id2label(example["intent_class"])
```

**আউটপুট:**
```out
"pay_bill"
```

আপনি যদি ট্রান্সক্রিপশন বৈশিষ্ট্যটি দেখেন তবে আপনি দেখতে পাবেন যে অডিও ফাইলটি প্রকৃতপক্ষে একজন ব্যক্তিকে একটি প্রশ্ন জিজ্ঞাসা করে রেকর্ড করেছে
বিল পরিশোধ সম্পর্কে।

আপনি যদি ডেটার এই উপসেটে একটি audio classifier কে train করার পরিকল্পনা করেন, তাহলে আপনার সমস্ত বৈশিষ্ট্যের প্রয়োজন নাও হতে পারে। উদাহরণ স্বরূপ,
সব উদাহরণের জন্য `lang_id`-এর মান একই হবে এবং কাজে লাগবে না। `english_transcription` সম্ভবত হবে
এই উপসেটে `transcription` নকল করুন, যাতে আমরা নিরাপদে সেগুলি সরাতে পারি।

আপনি 🤗 ডেটাসেটগুলির `remove_columns` পদ্ধতি ব্যবহার করে সহজেই অপ্রাসঙ্গিক বৈশিষ্ট্যগুলি সরাতে পারেন:

```py
columns_to_remove = ["lang_id", "english_transcription"]
minds = minds.remove_columns(columns_to_remove)
minds
```

**আউটপুট:**
```out
Dataset({features: ["path", "audio", "transcription", "intent_class"], num_rows: 654})
```

এখন যেহেতু আমরা ডেটাসেটের কাঁচা বিষয়বস্তু লোড এবং পরিদর্শন করেছি, আসুন কয়েকটি উদাহরণ শুনি! আমরা 'Gradio' থেকে 'Blocks' এবং 'Audio' ব্যবহার করব
ডেটাসেট থেকে কয়েকটি নমুনা ডিকোড করতে।

```py
import gradio as gr


def generate_audio():
    example = minds.shuffle()[0]
    audio = example["audio"]
    return (
        audio["sampling_rate"],
        audio["array"],
    ), id2label(example["intent_class"])


with gr.Blocks() as demo:
    with gr.Column():
        for _ in range(4):
            audio, label = generate_audio()
            output = gr.Audio(audio, label=label)

demo.launch(debug=True)
```

আপনি যদি চান, আপনি কিছু উদাহরণও পর্যবেক্ষণ করতে পারেন। প্রথম উদাহরণের তরঙ্গরূপ প্লট করা যাক।

```py
import librosa
import matplotlib.pyplot as plt
import librosa.display

array = example["audio"]["array"]
sampling_rate = example["audio"]["sampling_rate"]

plt.figure().set_figwidth(12)
librosa.display.waveshow(array, sr=sampling_rate)
```

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/waveform_unit1.png" alt="Waveform plot">
</div>

এখন নিজে চেষ্টা করুন! MINDS-14 ডেটাসেটের অন্য একটি উপভাষা বা ভাষা ডাউনলোড করুন, উপলব্ধি করতে কিছু উদাহরণ শুনুন এবং পর্যবেক্ষণ করুন। আপনি
[এখানে](https://huggingface.co/datasets/PolyAI/minds14) উপলব্ধ ভাষার সম্পূর্ণ তালিকা পেতে পারেন।


<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter1/load_and_explore.mdx" />

### অডিও ডেটা স্ট্রিমিং
https://huggingface.co/learn/audio-course/bn/chapter1/streaming.md

# অডিও ডেটা স্ট্রিমিং

অডিও ডেটাসেটগুলির মুখোমুখি হওয়া সবচেয়ে বড় চ্যালেঞ্জগুলির মধ্যে একটি হল তাদের নিছক আকার। এক মিনিটের অসংকুচিত সিডি-মানের অডিও (৪৪.১kHz, ১৬-বিট)
৫ MB এর একটু বেশি স্টোরেজ নেয়। সাধারণত, একটি অডিও ডেটাসেটে ঘণ্টার পর ঘণ্টা রেকর্ডিং থাকে।


পূর্ববর্তী বিভাগগুলিতে আমরা MINDS-14 অডিও ডেটাসেটের একটি খুব ছোট উপসেট ব্যবহার করেছি, তবে, সাধারণ অডিও ডেটাসেটগুলি অনেক বড়।
যেমন, [SpeechColab থেকে GigaSpeech](https://huggingface.co/datasets/speechcolab/gigaspeech) এর `xs` (সবচেয়ে ছোট) কনফিগারেশন
শুধুমাত্র ১০ ঘন্টা প্রশিক্ষণের ডেটা রয়েছে, কিন্তু ডাউনলোড এবং প্রস্তুতির জন্য ১৩GB স্টোরেজ স্পেস লাগে। কিন্তু আমরা যদি একটি আরো বোরো স্প্লিট এর উপর train করতে চাইবো?
একই ডেটাসেটের সম্পূর্ণ `xl` কনফিগারেশনে train এর জন্যে ১০,০০০ ঘন্টা অডিও ডাটা রয়েছে যার জন্যে ১TB-এর বেশি সঞ্চয়স্থানের প্রয়োজন।
আমাদের বেশিরভাগের জন্য, এটি হার্ড ড্রাইভএর ক্ষমতার বাইরে। তাহলে আমাদের কি অতিরিক্ত স্টোরেজ কিনতে হবে? অথবা কোন উপায় আছে যে আমরা এই
ডেটাসেটগুলিতে কোন ডিস্ক সীমাবদ্ধতা ছাড়াই train করতে পারি?


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

একবারে সম্পূর্ণ ডেটাসেট ডাউনলোড করার জন্য স্ট্রিমিং মোডের তিনটি প্রাথমিক সুবিধা রয়েছে:

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

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

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

আপনি কিভাবে স্ট্রিমিং মোড সক্ষম করতে পারেন? সহজ ! আপনি যখন আপনার ডেটাসেট লোড করবেন তখন শুধু `streaming=True` সেট করুন। বাকি সবকিছুর যত্ন আপনার জন্য নেওয়া হবে:

```py
gigaspeech = load_dataset("speechcolab/gigaspeech", "xs", streaming=True)
```

আমরা যেমন MINDS-14-এর ডাউনলোড করা উপসেটে প্রি-প্রসেসিং ধাপগুলি প্রয়োগ করেছি, আপনিও স্ট্রিমিং ডাটাসেট এ একই ধাপগুলি প্রয়োগ করতে পারেন।

একমাত্র পার্থক্য হল আপনি পাইথন ইন্ডেক্সিং (যেমন `gigaspeech["train"][sample_idx]`) ব্যবহার করে আর পৃথক নমুনা অ্যাক্সেস করতে পারবেন না।
পরিবর্তে, আপনাকে ডেটাসেটের উপর পুনরাবৃত্তি করতে হবে। একটি ডেটাসেট স্ট্রিম করার সময় আপনি কীভাবে একটি উদাহরণ অ্যাক্সেস করতে পারেন তা এখানে দেখানো হয়েছে:

```py
next(iter(gigaspeech["train"]))
```

**আউটপুট:**
```out
{
    "segment_id": "YOU0000000315_S0000660",
    "speaker": "N/A",
    "text": "AS THEY'RE LEAVING <COMMA> CAN KASH PULL ZAHRA ASIDE REALLY QUICKLY <QUESTIONMARK>",
    "audio": {
        "path": "xs_chunks_0000/YOU0000000315_S0000660.wav",
        "array": array(
            [0.0005188, 0.00085449, 0.00012207, ..., 0.00125122, 0.00076294, 0.00036621]
        ),
        "sampling_rate": 16000,
    },
    "begin_time": 2941.89,
    "end_time": 2945.07,
    "audio_id": "YOU0000000315",
    "title": "Return to Vasselheim | Critical Role: VOX MACHINA | Episode 43",
    "url": "https://www.youtube.com/watch?v=zr2n1fLVasU",
    "source": 2,
    "category": 24,
    "original_full_path": "audio/youtube/P0004/YOU0000000315.opus",
}
```

আপনি যদি একটি বড় ডেটাসেট থেকে বেশ কয়েকটি উদাহরণের পূর্বরূপ দেখতে চান, তাহলে প্রথম n উপাদানগুলি পেতে `take()` ব্যবহার করুন। ধরা যাক গিগাস্পিচ
ডেটাসেটের থেকে প্রথম দুটি উদাহরণ নেওয়া হবে:

```py
gigaspeech_head = gigaspeech["train"].take(2)
list(gigaspeech_head)
```

**আউটপুট:**
```out
[
    {
        "segment_id": "YOU0000000315_S0000660",
        "speaker": "N/A",
        "text": "AS THEY'RE LEAVING <COMMA> CAN KASH PULL ZAHRA ASIDE REALLY QUICKLY <QUESTIONMARK>",
        "audio": {
            "path": "xs_chunks_0000/YOU0000000315_S0000660.wav",
            "array": array(
                [
                    0.0005188,
                    0.00085449,
                    0.00012207,
                    ...,
                    0.00125122,
                    0.00076294,
                    0.00036621,
                ]
            ),
            "sampling_rate": 16000,
        },
        "begin_time": 2941.89,
        "end_time": 2945.07,
        "audio_id": "YOU0000000315",
        "title": "Return to Vasselheim | Critical Role: VOX MACHINA | Episode 43",
        "url": "https://www.youtube.com/watch?v=zr2n1fLVasU",
        "source": 2,
        "category": 24,
        "original_full_path": "audio/youtube/P0004/YOU0000000315.opus",
    },
    {
        "segment_id": "AUD0000001043_S0000775",
        "speaker": "N/A",
        "text": "SIX TOMATOES <PERIOD>",
        "audio": {
            "path": "xs_chunks_0000/AUD0000001043_S0000775.wav",
            "array": array(
                [
                    1.43432617e-03,
                    1.37329102e-03,
                    1.31225586e-03,
                    ...,
                    -6.10351562e-05,
                    -1.22070312e-04,
                    -1.83105469e-04,
                ]
            ),
            "sampling_rate": 16000,
        },
        "begin_time": 3673.96,
        "end_time": 3675.26,
        "audio_id": "AUD0000001043",
        "title": "Asteroid of Fear",
        "url": "http//www.archive.org/download/asteroid_of_fear_1012_librivox/asteroid_of_fear_1012_librivox_64kb_mp3.zip",
        "source": 0,
        "category": 28,
        "original_full_path": "audio/audiobook/P0011/AUD0000001043.opus",
    },
]
```

স্ট্রিমিং মোড আপনার গবেষণাকে পরবর্তী স্তরে নিয়ে যেতে পারে: শুধুমাত্র সবচেয়ে বড় ডেটাসেটগুলিই আপনার কাছে অ্যাক্সেসযোগ্য নয়, আপনি আপনার ডিস্ক স্পেস নিয়ে
চিন্তা না করেই সহজেই একাধিক ডেটাসেটের মাধ্যমে সিস্টেমের মূল্যায়ন করতে পারবেন। একটি একক ডেটাসেটে মূল্যায়ন করার থেকে বহু-ডেটাসেট মূল্যায়ন করা আরো
অনেক ভালো। উদাহরণ স্বরূপ - speech recognition system(c.f. End-to-end Speech Benchmark (ESB))।




<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter1/streaming.mdx" />

### অডিও ডাটা প্রক্রিয়াকরণ
https://huggingface.co/learn/audio-course/bn/chapter1/preprocessing.md

# অডিও ডাটা প্রক্রিয়াকরণ

🤗 ডেটাসেটের সাথে একটি ডেটাসেট লোড করা মজার অর্ধেক। আপনি যদি এটি একটি মডেল train করার জন্য বা inference চালানোর জন্য ব্যবহার করার
পরিকল্পনা করেন, আপনাকে প্রথমে ডেটা প্রাক-প্রক্রিয়া করতে হবে। সাধারণভাবে, এটি নিম্নলিখিত পদক্ষেপগুলিকে অন্তর্ভুক্ত করবে:

* অডিও ডেটা resample করা
* ডেটাসেট ফিল্টার করা
* মডেলের প্রত্যাশিত ইনপুটে অডিও ডেটা রূপান্তর করা

## অডিও ডাটা কে Resample করা

`load_dataset` ফাংশনটি যেই sampling rate এর সাথে অডিও উদাহরণগুলি upload করা হয়েছিল সেই sampling rate এ সেই অডিও উদাহরণগুলিকে ডাউনলোড করে। এটি সর্বদা
আপনি যে মডেলকে train করার পরিকল্পনা করছেন বা inference জন্য ব্যবহার করছেন তার দ্বারা  প্রত্যাশিত sampling rate এর সমান নাও হতে পারে । যদি এর মধ্যে অমিল থাকে
তাহলে আপনাকে অডিও তাকে resample করতে হবে ।

উপলব্ধ প্রাক-প্রশিক্ষিত মডেলগুলির বেশিরভাগই ১৬ kHz এর নমুনা হারে অডিও ডেটাসেটে পূর্বপ্রশিক্ষিত হয়েছে।
যখন আমরা MINDS-14 ডেটাসেট অন্বেষণ করেছি, আপনি হয়তো লক্ষ্য করেছেন যে এটি ৮ kHz এ sample করা হয়েছে, যার মানে আমাদের resample করতে হবে।

এটি করতে, 🤗 ডেটাসেটের `cast_column` পদ্ধতি ব্যবহার করুন। এই অপারেশন জায়গায় অডিও পরিবর্তন করে না, বরং সংকেত
ডেটাসেটগুলি লোড করার সময় ফ্লাইতে অডিও উদাহরণগুলি পুনরায় নমুনা করতে। নিম্নলিখিত কোড স্যাম্পলিং সেট করবে
১৬ kHz পর্যন্ত হার:

```py
from datasets import Audio

minds = minds.cast_column("audio", Audio(sampling_rate=16_000))
```

MINDS-14 ডেটাসেটে প্রথম অডিও উদাহরণটি পুনরায় লোড করুন এবং এটি পছন্দসই `sampling rate`-এ পুনরায় নমুনা করা হয়েছে কিনা তা পরীক্ষা করুন:

```py
minds[0]
```

**আউটপুট:**
```out
{
    "path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
    "audio": {
        "path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
        "array": array(
            [
                2.0634243e-05,
                1.9437837e-04,
                2.2419340e-04,
                ...,
                9.3852862e-04,
                1.1302452e-03,
                7.1531429e-04,
            ],
            dtype=float32,
        ),
        "sampling_rate": 16000,
    },
    "transcription": "I would like to pay my electricity bill using my card can you please assist",
    "intent_class": 13,
}
```

আপনি লক্ষ্য করতে পারেন যে অ্যারের মানগুলিও এখন ভিন্ন। এর কারণ হল আমরা এখন এর জন্য amplitude মানগুলির দ্বিগুণ সংখ্যা পেয়েছি
প্রতিটি যে আমরা আগে ছিল.

<Tip>
💡 Resampling সম্পর্কে কিছু তথ্য: যদি একটি অডিও সিগন্যাল ৮ kHz এ নমুনা নেওয়া হয়, যাতে প্রতি সেকেন্ডে ৮০০০ নমুনা রিডিং হয়, আমরা জানি যে অডিওতে
৪ kHz এর বেশি ফ্রিকোয়েন্সি নেই, এটি Nyquist sampling theorem দ্বারা নিশ্চিত করা হয়। এই কারণে, আমরা নিশ্চিত হতে পারি যে স্যাম্পলিং পয়েন্টগুলির মধ্যে
সর্বদা মূল অবিচ্ছিন্ন সংকেত থাকে যা একটি মসৃণ বক্ররেখা তৈরি করে। upsampling করার মানে তখন, অতিরিক্ত নমুনার মান এই বক্ররেখা আনুমান করে গণনা করা।
এই মানগুলি আগে থেকে উপস্থিত যমুনার মান এর সাহায্যে গণনা করা হয়।  downsampling এর জন্যে আমরা প্রথমে যেকোনো ফ্রিকোয়েন্সি ফিল্টার আউট করি যা
Nyquist সীমার চেয়ে বেশি, তারপর নতুন নমুনা গণনা করি। অন্য কথায়, আপনি প্রতি দ্বিতীয় নমুনাকে ছুঁড়ে ফেলার মাধ্যমে ২x ফ্যাক্টর এ downsample করতে
পারবেন না - এটি সিগন্যালে বিকৃতি তৈরি করবে। resampling সঠিকভাবে করা কঠিন এবং ভাল-পরীক্ষিত লাইব্রেরি যেমন librosa বা 🤗 datasets এর উপর ছেড়ে দেওয়াই ভালো।
</Tip>

## ডেটাসেট ফিল্টার করা

কিছু মানদণ্ডের উপর ভিত্তি করে ডেটা ফিল্টার করা যেতে পারে। সাধারণ ক্ষেত্রে একটি অডিওর সময়কাল সীমিত।
উদাহরণস্বরূপ, একটি মডেল training এর সময় আমরা ২০ সেকেন্ডস এর বেশি যেকোন উদাহরণ ফিল্টার আউট করতে চাই আউট অফ মেমরির ত্রুটিগুলি রোধ করতে।

আমরা 🤗 ডেটাসেটের `filter` পদ্ধতি ব্যবহার করে এবং ফিল্টারিং লজিক সহ একটি ফাংশন পাস করে এটি করতে পারি। একটি ফাংশন লিখে শুরু করা যাক যা
নির্দেশ করে কোন উদাহরণ রাখতে হবে এবং কোনটি বাতিল করতে হবে। এই ফাংশন, `is_audio_length_in_range`, একটি নমুনা ২০ সেকেন্ডের চেয়ে ছোট হলে
`True` এবং ২০ সেকেন্ডের এর বেশি হলে `False` প্রদান করে।

```py
MAX_DURATION_IN_SECONDS = 20.0


def is_audio_length_in_range(input_length):
    return input_length < MAX_DURATION_IN_SECONDS
```

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

```py
# use librosa to get example's duration from the audio file
new_column = [librosa.get_duration(filename=x) for x in minds["path"]]
minds = minds.add_column("duration", new_column)

# use 🤗 Datasets' `filter` method to apply the filtering function
minds = minds.filter(is_audio_length_in_range, input_columns=["duration"])

# remove the temporary helper column
minds = minds.remove_columns(["duration"])
minds
```

**আউটপুট:**
```out
Dataset({features: ["path", "audio", "transcription", "intent_class"], num_rows: 624})
```

আমরা যাচাই করতে পারি যে ডেটাসেট ৬৫৪ টি উদাহরণ থেকে ৬২৪ এ ফিল্টার করা হয়েছে।

## অডিও ডেটা প্রাক-প্রসেসিং

অডিও ডেটাসেটগুলির সাথে কাজ করার সবচেয়ে চ্যালেঞ্জিং দিকগুলির মধ্যে একটি হল মডেলের জন্য সঠিক বিন্যাসে ডেটা প্রস্তুত করা।আপনি যেমন দেখেছেন, কাঁচা অডিও
ডেটা নমুনা মানগুলির একটি অ্যারে হিসাবে আসে। যাইহোক, pre-trained মডেলগুলি ইনপুট ফিচারস আশা করে। এই ইনপুট ফিচারস মডেল থেকে মডেল এ আলাদা হয়।
ভাল খবর হল, প্রতিটি সমর্থিত অডিও মডেলের জন্য, 🤗 transformers একটি ফীচার এক্সট্র্যাক্টর ক্লাস অফার করে যা কাঁচা অডিও ডেটা থেকে মডেলের আশা করা
ইনপুট ফিচারস এ রূপান্তর করতে পারে।

তাহলে একটি ফীচার এক্সট্রাক্টর, কাঁচা অডিও ডেটা দিয়ে কী করে? আসুন ফীচার এক্সট্রাক্টর কিছু সাধারণ ফীচার নিষ্কাশন রূপান্তর বুঝতে [Whisper](https://cdn.openai.com/papers/whisper.pdf)
এর দিকে একবার নজর দেওয়া যাক। whisper হলো একটি পরে-trained মডেল যা automatic speech recognition (ASR) এর জন্যে 2022 সালের সেপ্টেম্বরে
Alec Radford et al দ্বারা প্রকাশিত OpenAI থেকে।

প্রথমত, whisper ফিচার এক্সট্র্যাক্টর প্যাড/ছেঁটে অডিও উদাহরণের একটি ব্যাচ তৈরী করে যাতে সব
উদাহরণের ইনপুট দৈর্ঘ্য 30 সেকেন্ড হয়। এর চেয়ে ছোট উদাহরণগুলিকে 30 এর শেষে শূন্য যুক্ত করে প্যাড করা হয়
ক্রম (একটি অডিও সিগন্যালে শূন্য কোন সংকেত বা নীরবতার সাথে সঙ্গতিপূর্ণ নয়)। ৩০ এর চেয়ে দীর্ঘ উদাহরণগুলিকে ৩০ এ ছেঁটে ফেলা হয়েছে৷
যেহেতু ব্যাচের সমস্ত উপাদান ইনপুট স্পেসে সর্বাধিক দৈর্ঘ্যে প্যাডেড/ছেঁটে আছে, তাই attention mask এর প্রয়োজন নেই।
অন্যান্য অডিও মডেলের জন্য একটি attention mask প্রয়োজন যা নির্দেশ করে
যেখানে অডিওগুলি প্যাড করা হয়েছে এবং self-attention mechanism এ সেগুলো উপেক্ষা করে হয়।

whisper ফিচার এক্সট্রাক্টর যে দ্বিতীয় অপারেশনটি করে তা হল প্যাডেড অডিও অ্যারেগুলিকে log-mel spectrogram এ রূপান্তর করা।
আপনার মনে আছে, এই spectrogram গুলি বর্ণনা করে যে কীভাবে একটি সংকেতের ফ্রিকোয়েন্সি সময়ের সাথে পরিবর্তিত হয়, এবং ফ্রিকোয়েন্সি এবং amplitude গুলোকে
মানুষের শ্রবণশক্তির আরও প্রতিনিধি করে তুলতে mel স্কেলে প্রকাশ করা হয় এবং পরে তাকে ডেসিবেলে পরিমাপ করা হয়।


এই সমস্ত রূপান্তরগুলি কোডের কয়েকটি লাইনের সাথে আপনার কাঁচা অডিও ডেটাতে প্রয়োগ করা যেতে পারে। চলুন whisper ফীচার এক্সট্রাক্টর কে চেক্পইণ্ট থেকে লোড করা যাক:

```py
from transformers import WhisperFeatureExtractor

feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-small")
```

এর পরে, আপনি একটি ফাংশন লিখতে পারেন একটি একক অডিও উদাহরণকে প্রি-প্রসেস করার জন্য এটিকে `feature_extractor` এর মাধ্যমে পাস করে।

```py
def prepare_dataset(example):
    audio = example["audio"]
    features = feature_extractor(
        audio["array"], sampling_rate=audio["sampling_rate"], padding=True
    )
    return features
```

আমরা 🤗 ডেটাসেটের map পদ্ধতি ব্যবহার করে আমাদের সমস্ত প্রশিক্ষণ উদাহরণগুলিতে ডেটা প্রস্তুতির ফাংশন প্রয়োগ করতে পারি:

```py
minds = minds.map(prepare_dataset)
minds
```

**আউটপুট:**
```out
Dataset(
    {
        features: ["path", "audio", "transcription", "intent_class", "input_features"],
        num_rows: 624,
    }
)
```

যতটা সহজ, আমাদের কাছে এখন ডেটাসেটে `input_features` হিসেবে log-mel spectrogram আছে।

আসুন এটিকে 'minds' ডেটাসেটের একটি উদাহরণের জন্য কল্পনা করি:

```py
import numpy as np

example = minds[0]
input_features = example["input_features"]

plt.figure().set_figwidth(12)
librosa.display.specshow(
    np.asarray(input_features[0]),
    x_axis="time",
    y_axis="mel",
    sr=feature_extractor.sampling_rate,
    hop_length=feature_extractor.hop_length,
)
plt.colorbar()
```

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/log_mel_whisper.png" alt="Log mel spectrogram plot">
</div>

এখন আপনি প্রি-প্রসেসিংয়ের পরে whisper মডেলের অডিও ইনপুটটি কেমন দেখায় তা দেখতে পারেন।

মডেলের বৈশিষ্ট্য এক্সট্র্যাক্টর ক্লাসটি মডেলটি প্রত্যাশা করে এমন ফর্ম্যাটে কাঁচা অডিও ডেটা রূপান্তর করার যত্ন নেয়। যাহোক,
অডিও জড়িত অনেক কাজ মাল্টিমোডাল, যেমন কন্ঠ সনান্তকরণ. এই ধরনের ক্ষেত্রে 🤗 ট্রান্সফরমারগুলিও মডেল-নির্দিষ্ট অফার করে
টেক্সট ইনপুট প্রক্রিয়া করার জন্য tokenizers. টোকেনাইজারগুলিতে গভীরভাবে ডুব দেওয়ার জন্য, অনুগ্রহ করে আমাদের [NLP কোর্স](https://huggingface.co/course/chapter2/4) দেখুন।

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

```py
from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("openai/whisper-small")
```

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

<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter1/preprocessing.mdx" />

### অডিও ডাটার সাথে পরিচয়
https://huggingface.co/learn/audio-course/bn/chapter1/audio_data.md

# অডিও ডাটার সাথে পরিচয়

প্রকৃতপক্ষে, একটি শব্দ তরঙ্গ একটি অবিচ্ছিন্ন সংকেত(continious signal), যার অর্থ এটি একটি নির্দিষ্ট সময়ে অসীম সংখ্যক সংকেত মান ধারণ করে। এটি ডিজিটাল
ডিভাইসগুলির জন্য সমস্যা তৈরি করে যাদের সীমিত সংরক্ষণাগার আছে। তাই এই অবিচ্ছিন্ন সংকেতকে (continious signal) বিযুক্ত মানগুলির একটি সিরিজে(discrete values)
রূপান্তর করতে হবে যাতে এটি ডিজিটাল ডিভাইস দ্বারা প্রক্রিয়াকরণ, সংরক্ষণ এবং প্রেরণ করা যায়।

আপনি যদি কোনও অডিও ডেটাসেট দেখেন, আপনি টেক্সট বর্ণনা বা সঙ্গীতের মতো শব্দের উদ্ধৃতি সহ ডিজিটাল ফাইলগুলি খুঁজে পাবেন।
আপনি বিভিন্ন ফাইল ফরম্যাটের সম্মুখীন হতে পারেন যেমন `.wav` (ওয়েভফর্ম অডিও ফাইল), `.flac` (ফ্রি লসলেস অডিও কোডেক)
এবং `.mp3` (MPEG-1 অডিও লেয়ার 3)। এই ফর্ম্যাটগুলির মধ্যে মূল পার্থক্য হলো তারা কিভাবে অডিও সিগন্যালের ডিজিটাল উপস্থাপনাকে সংকুচিত করে তার মধ্যে।

চলুন এক নজরে দেখে নেওয়া যাক কিভাবে আমরা একটি ক্রমাগত সংকেত(continious signal) থেকে বিযুক্ত মানগুলির একটি সিরিজে(discrete values)
রূপান্তর করবো। অ্যানালগ সংকেত কে প্রথমে একটি মাইক্রোফোন দ্বারা ক্যাপচার করা হয়, তারপর ক্যাপচার করা শব্দ তরঙ্গকে বৈদ্যুতিক সংকেতে রূপান্তরিত করা হয়।
বৈদ্যুতিক সংকেত কে তারপর Analog-to-Digital Converter এর দ্বারা Sampling প্রক্রিয়ার মাদ্ধমে ডিজিটাইজ করা।  এইভাবে আমরা একটি অ্যানালগ
সংকেত থেকে বিযুক্ত মানগুলির সিরিজ অথবা discrete values পেয়ে থাকি।

## Sampling এবং sampling rate

কোনো এক continious signal এর একক নির্দিষ্ট সময়ের মান বের করার প্রক্রিয়া কে Sampling বলে। যথাক্রমে sampled waveform, _discrete_ হয়,
কারণ _discrete_ waveform টির অভিন্ন বিরতিতে একটি সীমিত সংখ্যক সংকেত মান রয়েছে।

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/Signal_Sampling.png" alt="Signal sampling illustration">
</div>

*উইকিপিডিয়া নিবন্ধ থেকে দৃষ্টান্ত: [Sampling (signal processing)](https://en.wikipedia.org/wiki/Sampling_(signal_processing))*

**Sampling Rate** (এটিকে Sampling Frequency ও বলা হয়) হল কোনো continious signal কে _discrete_ করার সময় এক সেকেন্ডে নেওয়া নমুনার
সংখ্যা এবং এটি পরিমাপ করা হয় hertz (hz)। উদাহরণ স্বরূপ, সিডি-গুণমানের অডিওর Sampling Rate হলো ৪৪,১০০ Hz, যার অর্থ প্রতি সেকেন্ডে ৪৪,১০০
বার নমুনা নেওয়া হয়েছে। তুলনা করার জন্য, উচ্চ-রেজোলিউশন অডিওর একটি Sampling Rate হলো ১৯২,০০০ Hz বা ১৯২kHz। একটি সাধারণ প্রশিক্ষণ বক্তৃতা
মডেলগুলিতে ব্যবহৃত Sampling Rate হল ১৬,০০০ Hz বা ১৬ kHz।

Sampling Rate এর মান প্রাথমিকভাবে সিগন্যাল থেকে ক্যাপচার করা সর্বোচ্চ ফ্রিকোয়েন্সি নির্ধারণ করে। এটা Nyquist সীমা হিসাবে পরিচিত এবং এটি
Sampling Rate এর ঠিক অর্ধেক হয়।  মানুষের বক্তৃতার শ্রবণযোগ্য ফ্রিকোয়েন্সি ৮ kHz এর নিচে এবং তাই ১৬ kHz এ নমুনা বক্তৃতা যথেষ্ট। একটি উচ্চ Sampling Rate
ব্যবহার করলে আরো তথ্য ক্যাপচার করা হবে না কিন্তু শুধুমাত্র ফাইল প্রক্রিয়াকরণের গণনামূলক খরচ বৃদ্ধি হবে। অন্যদিকে, Sampling Rate খুব কম হলে তথ্য এর
ক্ষতি হবে। ৮ kHz-এ ক্যাপচার করা  মানুষের বক্তৃতা শ্রবণযোগ্য হবে না কারণ তাতে higher frequency ক্যাপচার হবে না ।

যেকোনো অডিও টাস্কে কাজ করার সময় আপনার ডেটাসেটের সমস্ত অডিওর Sampling Rate একই আছে কি না তা নিশ্চিত করা গুরুত্বপূর্ণ। আপনি যদি একটি pre-trained
মডেলকে fine-tune করার জন্য কাস্টম অডিও ডেটা ব্যবহার করার পরিকল্পনা করেন, তাহলে আপনার ডেটার Sampling Rate, অবশ্যই model টিকে pre-train
করার সময় ব্যবহার করা Sampling Rate এর সাথে মিলতে হবে। Sampling Rate ধারাবাহিকের মধ্যে সময়ের ব্যবধান নির্ধারণ করে অডিও নমুনা,
যা অডিও ডেটার অস্থায়ী রেজোলিউশনকে প্রভাবিত করে। উদাহরণ স্বরূপ: একটি 5-সেকেন্ডের অডিওর ১৬,০০০ Hz Sampling Rate থাকা মানে তার মধ্যে ৮০,০০০ খানা আলাদা
আলাদা মান আছে, কিন্তু যদি সেই একই অডিওর Sampling রাতে যদি ৮,০০০ Hz হতো তাহলে তাতে মোট ৪০,০০০ খানা আলাদা আলাদা মান থাকতো।
Transformer মডেল যেগুলি অডিও টাস্কগুলি সমাধান করে সেগুলি অডিও মানে শুধু সংখ্যা বোঝে তাই সঠিক সংখ্যার পরিমান খুবই গুরুত্বপূর্ণ ৷
যেহেতু আলাদা আলাদা অডিও ফাইল এর আলাদা আলাদা Sampling Rate আছে তাই সব ফাইলস গুলোকে একই Sampling Rate এ আন্তে হবে।
এই প্রক্রিয়াকে **Resampling** বলে। আমরা এর ব্যাপারে আরো জানতে পারবো [প্রিপ্রসেসিং](preprocessing#resampling-the-audio-data) অধ্যায় এ।

## Amplitude এবং bit depth

Sampling Rate আপনাকে বলে যে এর সেকেন্ডে কত ঘন ঘন নমুনা নেওয়া হয়, কিন্তু প্রতিটি নমুনার মানগুলি ঠিক কিরকম?

মানুষের কাছে শ্রবণযোগ্য ফ্রিকোয়েন্সিতে বাতাসের চাপের পরিবর্তনের মাধ্যমে শব্দ তৈরি হয়। একটি শব্দের **amplitude** বর্ণনা করে
যে কোনো তাৎক্ষণিক শব্দ চাপের মাত্রা এবং ডেসিবেল (dB) এ পরিমাপ করা হয়। আপনাকে একটি উদাহরণ দিতে, একটি সাধারণ কথা বলার ভয়েস ৬০ dB এর
নিচে এবং একটি রক কনসার্ট প্রায় ১২৫ dB হতে পারে।

ডিজিটাল অডিওতে, প্রতিটি অডিও নমুনা একটি সময়ে অডিও তরঙ্গের amplitude রেকর্ড করে। এর **bit depth**
নমুনা নির্ধারণ করে কত নির্ভুলতার সাথে এই প্রশস্ততার মান বর্ণনা করা যেতে পারে। bit depth যত বেশি, তত বেশি
বিশ্বস্তভাবে ডিজিটাল উপস্থাপনা মূল অবিচ্ছিন্ন শব্দ তরঙ্গকে আনুমানিক করে।

সবচেয়ে সাধারণ অডিও bit depth হল ১৬-বিট এবং ২৪-বিট। ১৬-বিট অডিওর জন্য ৬৫,৫৩৬ টি বাইনারি bits, ২৪-বিট অডিওর জন্য ১৬,৭৭৭,২১৬ টি
বাইনারি bits লাগে। যেহেতু quantizing প্রক্তিয়াটি একটি continious signal এর মানগুলোর শেষ এর সংখ্যাকে বাদ দেয় তাই এই প্রক্রিয়া সিগন্যাল এর সাথে
নয়েজ যুক্ত করে। বিট গভীরতা যত বেশি হবে, এই নয়েজ শব্দ তত কম হবে। সাধারণত, ১৬-বিট অডিওর কোয়ান্টাইজেশন নয়েজ ইতিমধ্যেই যথেষ্ট ছোট যা অশ্রাব্য হতে
পারে এবং উচ্চতর বিট গভীরতা ব্যবহার করা সাধারণত জরুরী নয়।


আপনি ৩২-বিট অডিওর ব্যাপারে শুনে থাকতে পারেন। এটি ফ্লোটিং-পয়েন্ট মান হিসাবে নমুনাগুলি সংরক্ষণ করে, যেখানে ১৬-বিট এবং ২৪-বিট অডিও পূর্ণসংখ্যা নমুনা
ব্যবহার করে। একটি ৩২-বিট ফ্লোটিং-পয়েন্ট মানের নির্ভুলতা হল ২৪ বিট, এটিকে ২৪-বিট অডিওর সমান bit depth দেয়। ফ্লোটিং-পয়েন্ট অডিও নমুনাগুলি [-১.0, ১.0]
সীমার মধ্যে থাকে এবং models গুলো স্বাভাবিকভাবেই ফ্লোটিং-পয়েন্ট ডেটার উপর কাজ করে, অডিও যদি ফ্লোটিং-পয়েন্ট এ  না হয়ে থাকে তাহলে অডিওকে
প্রথমে ফ্লোটিং-পয়েন্ট ফরম্যাটে রূপান্তর করতে হব। এর ব্যাপারে আমরা [প্রিপ্রসেসিং](preprocessing) বিভাগে দেখবো।


অবিচ্ছিন্ন অডিও সংকেতের মতোই, ডিজিটাল অডিওর প্রশস্ততা সাধারণত ডেসিবেলে (dB) প্রকাশ করা হয়। মানুষের শ্রবণশক্তি লগারিদমিক প্রকৃতির - আমাদের কান
উচ্চস্বরের চেয়ে শান্ত শব্দে ছোট ওঠানামার প্রতি বেশি সংবেদনশীল । একটি শব্দের amplitudes ব্যাখ্যা করা সহজ যদি প্রশস্ততা ডেসিবেলে হয়, যা লগারিদমিকও হয়।
রিয়েল-ওয়ার্ল্ড অডিওর জন্য ডেসিবেল স্কেল ০ dB থেকে শুরু হয়, যা মানুষের শোনা সম্ভব সবচেয়ে শান্ত শব্দের প্রতিনিধিত্ব করে এবং উচ্চতর শব্দের dB মান আরো বাড়ে ।
যাইহোক, ডিজিটাল অডিও সিগন্যালের জন্য, 0 dB হল সবচেয়ে জোরে সম্ভাব্য প্রশস্ততা । একটি দ্রুত নিয়ম হিসাবে: প্রতি -৬ dB হল প্রশস্ততার অর্ধেক,
এবং -৬০ dB এর নীচের কিছু আপনি সত্যিই ভলিউম আপ না করলে শুনতে পারবেন না।

## একটি তরঙ্গরূপ হিসাবে অডিও

আপনি অডিও কে একটি **তরঙ্গরূপ** হিসাবে কল্পনা করা চিত্রগুলো দেখেছেন, যা সময়ের সাথে নমুনা মানগুলিকে প্লট করে এবং পরিবর্তনগুলিকে চিত্রিত করে শব্দের amplitude।
এটি শব্দের *time domain* উপস্থাপনা হিসাবেও পরিচিত।

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

একটি অডিও সিগন্যালের জন্য তরঙ্গরূপ প্লট করার জন্য, আমরা একটি python লাইব্রেরি ব্যবহার করতে পারি যার নাম 'librosa':

```bash
pip install librosa
```

আসুন লাইব্রেরির সাথে আসা "trumpet" নামক একটি উদাহরণ নেওয়া যাক:

```py
import librosa

array, sampling_rate = librosa.load(librosa.ex("trumpet"))
```

উদাহরণটিতে অডিওটি, টাইম সিরিজের একটি tuple হিসাবে লোড করা হয়েছে (এখানে আমরা এটিকে `array` বলি), এবং Sampling Rate (`sampling_rate`)।
চলুন librosa র `waveshow()` ফাংশন ব্যবহার করে এই শব্দের তরঙ্গরূপটি একবার দেখে নেওয়া যাক:

```py
import matplotlib.pyplot as plt
import librosa.display

plt.figure().set_figwidth(12)
librosa.display.waveshow(array, sr=sampling_rate)
```

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/waveform_plot.png" alt="Waveform plot">
</div>

এটি y-অক্ষে সংকেতের amplitude এবং x-অক্ষ বরাবর সময় প্লট করে। অন্য কথায়, প্রতিটি পয়েন্ট নির্দেশ করে একটি একক নমুনা মান যা এই শব্দের নমুনা নেওয়ার
সময় নেওয়া হয়েছিল। এছাড়াও মনে রাখবেন যে librosa ফ্লোটিং-পয়েন্ট মানগুলোকে অডিও হিসাবে প্রদান করে, এবং প্রশস্ততার মানগুলি প্রকৃতপক্ষে [-১.০, ১.০] পরিসরের মধ্যে রয়েছে৷

আপনি যে ডেটা নিয়ে কাজ করছেন তা বোঝার জন্য এটিকে শোনার পাশাপাশি অডিওটি ভিজ্যুয়ালাইজ করা একটি দরকারী টুল হতে পারে।
আপনি সংকেতের আকার দেখতে পারেন, নিদর্শনগুলি পর্যবেক্ষণ করতে পারেন, শব্দ বা বিকৃতি দেখতে পারেন। আপনি যদি কিছু ডেটা প্রক্রিয়া করেন যেমন normalization, resampling
অথবা filtering তাহলে আপনি প্লটটি দেখে নিশ্চিত হতে পারেন যে প্রক্রিয়াকরণের পদক্ষেপগুলি ঠিক প্রয়োগ করা হয়েছে। একটি মডেল এর training এর পরে,
যদি কোনো সমস্যা আসে তাহলে আপনি debug করার সময় এই প্লটস গুলোর সাহায্য নিতে পারবেন।

## ফ্রিকোয়েন্সি বর্ণালী

অডিও ডেটা কল্পনা করার আরেকটি উপায় হল একটি অডিও সিগন্যালের **ফ্রিকোয়েন্সি বর্ণালী** প্লট করা, যা *frequency domain* নামেও পরিচিত।
Discrete Fourier transform or DFT ব্যবহার করে এই বর্ণালী গণনা করা হয়। এটি পৃথক ফ্রিকোয়েন্সি গুলোকে বর্ণনা করে যারা একসাথে সংকেত তৈরি করে এবং তারা কতটা শক্তিশালী।

আসুন numpy এর `rfft()` ফাংশন ব্যবহার করে DFT নিয়ে একই ট্রাম্পেট শব্দের জন্য ফ্রিকোয়েন্সি বর্ণালী প্লট করি। যদিও এটা
পুরো শব্দের বর্ণালী প্লট করা সম্ভব, এর পরিবর্তে একটি ছোট অঞ্চলের দিকে তাকানো আরও কার্যকর। এখানে আমরা প্রথম ৪০৯৬ টি নমুনার উপরে DFT প্রয়োগ করবো যাতে মোটামুটিভাবে প্রথম নোটের দৈর্ঘ্য প্লে হচ্ছে:

```py
import numpy as np

dft_input = array[:4096]

# calculate the DFT
window = np.hanning(len(dft_input))
windowed_input = dft_input * window
dft = np.fft.rfft(windowed_input)

# get the amplitude spectrum in decibels
amplitude = np.abs(dft)
amplitude_db = librosa.amplitude_to_db(amplitude, ref=np.max)

# get the frequency bins
frequency = librosa.fft_frequencies(sr=sampling_rate, n_fft=len(dft_input))

plt.figure().set_figwidth(12)
plt.plot(frequency, amplitude_db)
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude (dB)")
plt.xscale("log")
```

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrum_plot.png" alt="Spectrum plot">
</div>

এটি এই অডিও সেগমেন্টে উপস্থিত বিভিন্ন ফ্রিকোয়েন্সি উপাদানগুলির শক্তি প্লট করে৷ ফ্রিকোয়েন্সি মান গুলি x-অক্ষ তে আছে এবং তাদের amplitude, y-অক্ষে থাকে। সাধারণত x-অক্ষকে লগারিদমিক স্কেলে প্লট করা হয়।


আমরা যে ফ্রিকোয়েন্সি বর্ণালী প্লট করেছি তা বেশ কয়েকটি শিখর দেখায়। এই শিখরগুলি যেই নোট প্লে করা হচ্ছে তার হারমোনিক্সের সাথে মিলে যায় যেখানে উচ্চ হারমোনিক্সগুলো শান্ত। যেহেতু প্রথম শিখরটি প্রায় ৬২০ Hz, এটি একটি E♭ নোটের ফ্রিকোয়েন্সি বর্ণালী।


DFT এর আউটপুট হল জটিল সংখ্যার একটি অ্যারে, যা বাস্তব এবং কাল্পনিক উপাদান দিয়ে গঠিত।
`np.abs(dft)` এর মাদ্ধমে আমরা amplitude তথ্য বের করি। বাস্তব এবং কাল্পনিক উপাদান এর মধ্যে কোণকে ফেজ বর্ণালী বলে, কিন্তু এটি মেশিন লার্নিং অ্যাপ্লিকেশনে নেওয়া হয় না।


আপনি amplitude মানগুলিকে ডেসিবেল স্কেলে রূপান্তর করতে `librosa.amplitude_to_db()` ব্যবহার করতে পারেন, এটি বর্ণালী মধ্যে সূক্ষ্ম বিবরণ টিকে দেখতে সহজ করে তোলে। কখনও কখনও লোকেরা **power বর্ণালী** ব্যবহার করে, যা amplitude এর পরিবর্তে শক্তি পরিমাপ করে;
যা কেবলমাত্র amplitude এর মান এর বর্গাকার।

<Tip>
💡 বাস্তবে, লোকেরা FFT শব্দটি DFT-এর সাথে বিনিময়যোগ্যভাবে ব্যবহার করে, কারণ FFT বা Fast Fourier Transform হলো কম্পিউটারে DFT গণনা করার একমাত্র কার্যকরী  উপায়।
</Tip>

একটি অডিও সিগন্যালের ফ্রিকোয়েন্সি বর্ণালীতে তার তরঙ্গরূপের মতো একই তথ্য থাকে - তারা কেবল দুটি ভিন্ন উপায়, একই ডেটাকে দেখার। যেখানে তরঙ্গরূপ amplitude প্লট করে
সময়ের সাথে সাথে অডিও সিগন্যালের এবং বর্ণালী নির্দিষ্ট সময়ে পৃথক ফ্রিকোয়েন্সির amplitude কল্পনা করে।

## spectrogram

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

একটি spectrogram একটি অডিও সিগন্যালের ফ্রিকোয়েন্সি বিষয়বস্তু প্লট করে কারণ এটি সময়ের সাথে পরিবর্তিত হয়। এটি আপনাকে একই প্লটে সময়, ফ্রিকোয়েন্সি এবং
তার সাথে amplitude প্রদর্শন করে। যে অ্যালগরিদমটি এই গণনাটি সম্পাদন করে তা হল STFT বা Short Time Fourier Transform।

চলুন লিব্রোসার `stft()` এবং `specshow()` ফাংশন ব্যবহার করে একই ট্রাম্পেট শব্দের জন্য একটি বর্ণালী প্লট করি:

```py
import numpy as np

D = librosa.stft(array)
S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)

plt.figure().set_figwidth(12)
librosa.display.specshow(S_db, x_axis="time", y_axis="hz")
plt.colorbar()
```

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrogram_plot.png" alt="Spectrogram plot">
</div>

এই প্লটে, x-অক্ষ সময়কে উপস্থাপন করে কিন্তু এখন y-অক্ষ Hz-এ ফ্রিকোয়েন্সি উপস্থাপন করে।
রঙের তীব্রতা ডেসিবেলে (dB) পরিমাপ করা সময়ে প্রতিটি বিন্দুতে ফ্রিকোয়েন্সি উপাদানটির amplitude বা শক্তি দেয়।

spectrogram টি অডিও সিগন্যালের ছোট অংশ গ্রহণ করে, যা সাধারণত কয়েক মিলিসেকেন্ড স্থায়ী হয় এবং তার উপর DFT গণনা করে তৈরি করা হয় ফ্রিকোয়েন্সি বর্ণালী।
তারপর বর্ণালীগুলিকে সময় অক্ষের উপর স্ট্যাক করা হয় এবং spectrogram তৈরি করা হয়। এই চিত্রের প্রতিটি উল্লম্ব স্লাইস একটি একক ফ্রিকোয়েন্সি বর্ণালীকে বোঝাই।
`librosa.stft()` অডিও সংকেতকে ২০৪৮ নমুনার অংশে বিভক্ত করে, যা ফ্রিকোয়েন্সি রেজোলিউশন এবং সময় রেজোলিউশনের মধ্যে একটি ভালো ট্রেড-অফ দেয়।

যেহেতু spectrogram এবং তরঙ্গরূপ একই ডেটার ভিন্ন ভিন্ন দৃষ্টিভঙ্গি, তাই spectrogram থেকে তরঙ্গরূপ এ ফিরিয়ে আনা সম্ভব, তার জন্যে inverse STFT ব্যবহার করতে হবে।
যাইহোক, এর জন্য amplitude ছাড়াও ফেজ তথ্য প্রয়োজন। যদি spectrogram একটি মেশিন লার্নিং মডেল দ্বারা তৈরি করা হয়, তবে এটি সাধারণত শুধুমাত্র
amplitude আউটপুট করে। সেই ক্ষেত্রে, আমরা একটি ফেজ পুনর্গঠন অ্যালগরিদম ব্যবহার করতে পারি যেমন ক্লাসিক Griffin-Lim অ্যালগরিদম, বা একটি নিউরাল
নেটওয়ার্ক ব্যবহার করতে পারি যেটাকে একটি vocoder বলা হয়।

spectrogram গুলি কেবল ভিজ্যুয়ালাইজেশনের জন্য ব্যবহৃত হয় না। অনেক মেশিন লার্নিং মডেল spectrogram কে ইনপুট হিসাবে গ্রহণ করবে এবং আউটপুট হিসাবে spectrogram তৈরি করে।

এখন যেহেতু আমরা জানি একটি spectrogram কী এবং এটি কীভাবে তৈরি করা হয়, আসুন এটির একটি রূপ দেখে নেওয়া যাক যা বক্তৃতা প্রক্রিয়াকরণের জন্য ব্যাপকভাবে ব্যবহৃত হয়: mel spectrogram।

## mel spectrogram

একটি mel spectrogram হল spectrogram এর একটি বৈচিত্র যা সাধারণত বক্তৃতা প্রক্রিয়াকরণ এর  কাজে ব্যবহৃত হয়।
এটি একটি spectrogram এর মতো যে এটি সময়ের সাথে একটি অডিও সিগন্যালের ফ্রিকোয়েন্সি বিষয়বস্তু দেখায়, তবে একটির ফ্রিকোয়েন্সি অক্ষে ভিন্ন।

একটি স্ট্যান্ডার্ড spectrogram এ, ফ্রিকোয়েন্সি অক্ষ রৈখিক এবং হার্টজ (Hz) এ পরিমাপ করা হয়। তবে মানুষের শ্রবণতন্ত্র
উচ্চ ফ্রিকোয়েন্সির তুলনায় নিম্ন ফ্রিকোয়েন্সি পরিবর্তনের জন্য বেশি সংবেদনশীল, এবং এই সংবেদনশীলতা ফ্রিকোয়েন্সি বৃদ্ধির সাথে সাথে লগারিদমিকভাবে হ্রাস পায।
মেল স্কেল একটি অনুধাবনযোগ্য স্কেল যা মানুষের কানের অ-রৈখিক ফ্রিকোয়েন্সি প্রতিক্রিয়াকে অনুমান করে।

একটি মেল spectrogram তৈরি করতে, STFT ঠিক আগের মতোই ব্যবহার করা হয়, একটি অডিওটিকে ছোট অংশে বিভক্ত করে ফ্রিকোয়েন্সি বর্ণালীগুলিকে তৈরী করা হয়।
উপরন্তু, প্রতিটি বর্ণালীকে একটি ফিল্টারের সেটের মধ্যে দিয়ে পাঠানো হয়, যা মেল ফিল্টারব্যাঙ্ক হিসেবে পরিচিত, যা ফ্রিকোয়েন্সিগুলিকে মেল স্কেলে রূপান্তর করুন।

আসুন দেখি কিভাবে আমরা librosa এর `melspectrogram()` ফাংশন ব্যবহার করে একটি mel spectrogram প্লট করতে পারি, যা আমাদের জন্য এই সমস্ত পদক্ষেপগুলি সম্পাদন করে:

```py
S = librosa.feature.melspectrogram(y=array, sr=sampling_rate, n_mels=128, fmax=8000)
S_dB = librosa.power_to_db(S, ref=np.max)

plt.figure().set_figwidth(12)
librosa.display.specshow(S_dB, x_axis="time", y_axis="mel", sr=sampling_rate, fmax=8000)
plt.colorbar()
```

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/mel-spectrogram.png" alt="Mel spectrogram plot">
</div>


উপরের উদাহরণে, `n_mels` হল মেল ব্যান্ডের সংখ্যা। মেল ব্যান্ডগুলি হলো ফ্রিকোয়েন্সির একটি সেট যেটি ফিল্টারের এর সাহায্যে বর্ণালীকে অর্থপূর্ণ উপাদানে ভাগ করে
যেখানে ফিল্টার গুলোকে এমনভাবে বেছে নেওয়া হয় যার আকৃতি এবং ব্যবধান মানুষের কান যেভাবে বিভিন্ন ফ্রিকোয়েন্সিতে সাড়া দেয় তা অনুকরণ করতে পারে।
`n_mels`-এর সাধারণ মান হল ৪০ বা ৮০৷ `fmax` সর্বোচ্চ ফ্রিকোয়েন্সি নির্দেশ করে (Hz-এ) আমরা যে বিষয়ে চিন্তা করি।

নিয়মিত spectrogram এর মতোই, মেল ফ্রিকোয়েন্সির উপাদানগুলির শক্তি প্রকাশ করার সাধারণ অভ্যাস ডেসিবেলে, এটিকে সাধারণত **log-mel spectrogram** বলা হয়,
কারণ ডেসিবেলে রূপান্তর করার জন্যে লগারিদমিক অপারেশন প্রয়োগ করতে হয়। উপরের উদাহরণটি `librosa.power_to_db()` ব্যবহার করে `librosa.feature.melspectrogram()`
একটি power spectrogram তৈরি করে।

<Tip>
💡 সব mel spectrogram একই নয়! সাধারণ ব্যবহারে দুটি ভিন্ন মেল স্কেল আছে ("htk" এবং "slaney"),
এবং power spectrogram এর পরিবর্তে amplitude spectrogram ব্যবহার করা যেতে পারে। log-mel spectrogram গণনা করার সময় সর্বদা সত্য ডেসিবেল
গণনা করা হয় না, কিন্তু সহজভাবে `লগ` নেওয়া হতে পারে। অতএব, যদি একটি মেশিন লার্নিং মডেল ইনপুট হিসাবে একটি mel spectrogram আশা করে,
আপনি একই ভাবে কম্পিউট করছেন তা নিশ্চিত করতে দুবার চেক করুন।
</Tip>

একটি mel spectrogram তৈরি করা একটি ক্ষতিকর অপারেশন কারণ এতে সিগন্যাল ফিল্টার করা জড়িত। একটি mel spectrogram কে নিয়মিত তরঙ্গরূপ এ রূপান্তর করা
খুবই কঠিন, এমনকি সাহারণ spectrogram কে নিয়মিত তরঙ্গরূপ এ রূপান্তর করা এর চেয়ে সহজ, কারণ এর জন্য যেই ফ্রিকোয়েন্সিগুলিকে ফেলে দেওয়া হয়েছিল সেগুলোকে
অনুমান করা প্রয়োজন। এই কারণেই একটি mel spectrogram থেকে একটি তরঙ্গরূপ তৈরি করতে মেশিন লার্নিং মডেল যেমন HiFiGAN vocoder প্রয়োজন।


একটি স্ট্যান্ডার্ড spectrogram এর তুলনায়, একটি mel spectrogram অডিও সিগন্যালের আরও অর্থপূর্ণ বৈশিষ্ট্যগুলি ক্যাপচার করতে পারে তাই এটি speech recognition,
speaker identification, এবং music genre classification এর মতো কাজগুলিতে একটি জনপ্রিয় প্রক্রিয়া করে তোলে।


এখন যেহেতু আপনি অডিও ডেটা উদাহরণগুলি কীভাবে কল্পনা করতে হয় তা জানেন, এগিয়ে যান এবং আপনার প্রিয় শব্দগুলি কেমন তা দেখতে চেষ্টা করুন :)

<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter1/audio_data.mdx" />

### অধ্যায় ২. অডিও অ্যাপ্লিকেশনের সূচনা
https://huggingface.co/learn/audio-course/bn/chapter2/introduction.md

# অধ্যায় ২. অডিও অ্যাপ্লিকেশনের সূচনা

Hugging Face অডিও কোর্সের দ্বিতীয় পাঠক্রমে স্বাগতম! পূর্বে, আমরা অডিও ডেটার মৌলিক বিষয়গুলি অন্বেষণ করেছি৷
এবং 🤗 datasets এবং 🤗 transformers লাইব্রেরি ব্যবহার করে অডিও ডেটাসেটের সাথে কিভাবে কাজ করতে হয় তা শিখেছি। আমরা বিভিন্ন বিষয়ে আলোচনা করেছি যেমন -
sampling rate, amplitude, bit depth, তরঙ্গরূপ এবং spectrogram এর ধারণা এবং কিভাবে ডেটা প্রিপ্রসেস করা যায় তা দেখেছি।

এই মুহুর্তে আপনি অডিও কাজগুলি সম্পর্কে জানতে আগ্রহী হতে পারেন যা 🤗 transformers পরিচালনা করতে পারে এবং আপনার কাছে তা ভালো ভাবে জানার জন্য
প্রয়োজনীয় সমস্ত ভিত্তি রয়েছে! চলুন কিছু মন ছুঁয়ে যাওয়া অডিও টাস্কের উদাহরণ দেখে নেওয়া যাক:

* **Audio classification**: সহজেই অডিও ক্লিপগুলিকে বিভিন্ন বিভাগে শ্রেণীবদ্ধ করুন। একটি রেকর্ডিং একটি ঘেউ ঘেউ করা কুকুর বা বিড়াল এর মিউ
কিনা তা আপনি সনাক্ত করতে পারেন, বা একটি গান কোন সঙ্গীত ঘরানার অন্তর্গত তাও বলে দিতে পারেন।
* **Automatic speech recognition**: অডিও ক্লিপগুলিকে স্বয়ংক্রিয়ভাবে প্রতিলিপি করে পাঠ্যে রূপান্তর করুন। আপনি একটি রেকর্ডিং থেকে টেক্সট পেতে পারেন,
যেমন "আপনি আজ কেমন আছেন?"। নোট নেওয়ার জন্য বরং উপকারী!
* **Speaker diarization**: কখনো ভেবেছেন কে রেকর্ডিংয়ে কথা বলছে? 🤗 transformers সাহায্যে আপনি কোন স্পিকারটি কখন কথা বলছে তা সনাক্ত করতে পারবেন।
* **Text to speech**: এর মাদ্ধমে আপনি একটি পাঠ্যের একটি বর্ণিত সংস্করণ তৈরি করুন যা একটি audio book তৈরি করতে ব্যবহার করা যেতে পারে, অথবা
একটি গেমে একটি NPC-কে ভয়েস দিন,  🤗 transformers দিয়ে, আপনি সহজেই এই কাজগুলি করতে পারবেন!

এই ইউনিটে, আপনি শিখবেন কিভাবে 🤗 transformers থেকে `pipeline()` ফাংশন ব্যবহার করে এই কয়েকটি কাজের জন্য pre-trained মডেল ব্যবহার করতে হয়।
বিশেষ করে, আমরা দেখব কিভাবে pre-trained মডেলগুলি audio classification এবং automatic speech recognition এর জন্য ব্যবহার করা যেতে পারে।
চলুন শুরু করি!


<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter2/introduction.mdx" />

### Pipeline এর মাদ্ধমে Audio classification
https://huggingface.co/learn/audio-course/bn/chapter2/audio_classification_pipeline.md

# Pipeline এর মাদ্ধমে Audio classification

audio classification হলো, একটি অডিও রেকর্ডিং-এর বিষয়বস্তুর উপর ভিত্তি করে অডিওর সাথে এক বা একাধিক label জড়িত করা।
এই label গুলো বিভিন্ন শব্দ বিভাগের সাথে মিল থাকতে পারে, যেমন সঙ্গীত, বক্তৃতা, বা শব্দ, বা আরও নির্দিষ্ট বিভাগ যেমন
পাখির গান বা গাড়ির ইঞ্জিনের শব্দ।

সর্বাধিক জনপ্রিয় audio transformers গুলো কীভাবে কাজ করে সে সম্পর্কে বিস্তারিত জানার আগে এবং একটি কাস্টম মডেল fine-tune করার আগে, আসুন দেখুন
কিভাবে আপনি 🤗 transformers সহ মাত্র কয়েক লাইন কোড সহ audio classification এর জন্য একটি অফ-দ্য-শেল্ফ pre-trained মডেল ব্যবহার করতে পারেন।

চলুন এগিয়ে যাই এবং [MINDS-14](https://huggingface.co/datasets/PolyAI/minds14) ডেটাসেট ব্যবহার করি যা আপনি আগের অধ্যায়ে অন্বেষণ করেছেন।
আপনি যদি মনে করেন, MINDS-14-এ কিছু লোকের ই-ব্যাঙ্কিং সিস্টেমের প্রশ্ন জিজ্ঞাসা করার রেকর্ডিং রয়েছে। তাছাড়াও এই ডাটাসেট এ ভাষা, উপভাষা, এবং প্রতিটি
রেকর্ডিংয়ের জন্য `intent_class` আছে। আমরা কলের উদ্দেশ্য দ্বারা রেকর্ডিংগুলোকে শ্রেণীবদ্ধ করতে পারি।

ঠিক আগের মতোই, আসুন pipeline টি চেষ্টা করার জন্য ডেটার `en-AU` উপসেট লোড করে শুরু করি এবং এটিকে 16kHz sampling rate-এ উন্নীত করি যা
বেশিরভাগ স্পিচ মডেলের প্রয়োজন।

```py
from datasets import load_dataset
from datasets import Audio

minds = load_dataset("PolyAI/minds14", name="en-AU", split="train")
minds = minds.cast_column("audio", Audio(sampling_rate=16_000))
```

একটি অডিও রেকর্ডিংকে ক্লাসের একটি সেটে শ্রেণীবদ্ধ করতে, আমরা 🤗 transformers থেকে `audio-classification` pipeline ব্যবহার করতে পারি। আমাদের
ক্ষেত্রে, আমাদের এমন একটি মডেল দরকার যা audio classification এর জন্য MINDS-14 ডেটাসেট এ train করা হয়েছে। সৌভাগ্যবশত আমাদের জন্য,
🤗 Hub এর এমন একটি মডেল রয়েছে যা ঠিক তাই করে! চলুন এটি লোড করি `pipeline()` ফাংশন ব্যবহার করে:

```py
from transformers import pipeline

classifier = pipeline(
    "audio-classification",
    model="anton-l/xtreme_s_xlsr_300m_minds14",
)
```

এই pipeline টি একটি NumPy অ্যারে হিসাবে অডিও ডেটাকে আশা করে ৷ আমাদের দ্বারা পরিচালিত pipeline দ্বারা কাঁচা অডিও ডেটার সমস্ত প্রিপ্রসেসিং সুবিধামত হবে ।
আসুন এটি চেষ্টা করার জন্য একটি উদাহরণ বেছে নেওয়া যাক:

```py
example = minds[0]
```

কাঁচা অডিও ডেটা একটি NumPy অ্যারেতে `["audio"]["array"]` এর অধীনে সংরক্ষিত হয়, আসুন এটিকে `classifier`-এ সরাসরি ব্যবহার করা যাক :

```py
classifier(example["audio"]["array"])
```

**Output:**
```out
[
    {"score": 0.9631525278091431, "label": "pay_bill"},
    {"score": 0.02819698303937912, "label": "freeze"},
    {"score": 0.0032787492964416742, "label": "card_issues"},
    {"score": 0.0019414445850998163, "label": "abroad"},
    {"score": 0.0008378693601116538, "label": "high_value_payment"},
]
```

মডেলটি খুব আত্মবিশ্বাসী, যে যিনি কল করেছেন তিনি তাদের বিল পরিশোধের বিষয়ে জানতে চেয়েছিলেন। এর প্রকৃত লেবেল কি জন্য দেখা যাক। এই উদাহরণ হল:

```py
id2label = minds.features["intent_class"].int2str
id2label(example["intent_class"])
```

**Output:**
```out
"pay_bill"
```

হুররে! মডেল দ্বারা পূর্বাভাসিত লেবেল সঠিক ছিল! এখানে আমরা এমন একটি মডেল খুঁজে পেয়ে ভাগ্যবান ছিলাম যা আমাদের প্রয়োজনীয় লেবেলগুলিকে শ্রেণীবদ্ধ করতে পারে।
অনেক সময়, একটি classification এর কাজ করার সময়, একটি pre-trained মডেলের ক্লাসের সেট ঠিক একই রকম হয় না।
সেই ক্ষেত্রে, আপনি একটি pre-trained মডেলকে "calibrate" করতে আপনার ক্লাস লেবেলের সঠিক সেট এ fine-tune করতে পারেন।
আমরা আসন্ন অধ্যায়গুলোতে এটি কীভাবে করতে হয় তা শিখব। এখন, এর আরেকটি খুব গুরুত্বপূর্ন টাস্ক, _automatic speech recognition_ কি করে করবো তা দেখা যাক ।


<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter2/audio_classification_pipeline.mdx" />

### pipeline এর মাদ্ধমে Automatic speech recognition
https://huggingface.co/learn/audio-course/bn/chapter2/asr_pipeline.md

# pipeline এর মাদ্ধমে Automatic speech recognition

Automatic Speech Recognition (ASR) হল একটি টাস্ক যার মধ্যে স্পিচ অডিও রেকর্ডিংকে টেক্সটে প্রতিলিপি করা হয়।
ভিডিওর জন্য caption তৈরি করা থেকে শুরু করে voice command system তৈরী করা পর্যন্ত এই টাস্কটিতে অনেকগুলি ব্যবহারিক অ্যাপ্লিকেশন রয়েছে ।
Siri এবং Alexa এর মত voice assistant তৈরির জন্য এই টাস্কটি ব্যবহার করা হয়।

এই বিভাগে, আমরা একজন ব্যক্তির একটি অডিও রেকর্ডিং প্রতিলিপি করতে `automatic-speech-recognition` পাইপলাইন ব্যবহার করব
আগের মতো একই MINDS-14 ডেটাসেট ব্যবহার করে বিল পরিশোধ করার বিষয়ে একটি প্রশ্ন জিজ্ঞাসা করবো।

শুরু করার জন্য, ডেটাসেট লোড করুন এবং [Pipeline এর মাদ্ধমে Audio classification](audio_classification_pipeline) এ বর্ণিত হিসাবে এটিকে 16kHz-এ sample করুন।

একটি অডিও রেকর্ডিং প্রতিলিপি করতে, আমরা 🤗 transformers থেকে `automatic-speech-recognition` pipeline ব্যবহার করতে পারি।

```py
from transformers import pipeline

asr = pipeline("automatic-speech-recognition")
```

এর পরে, আমরা ডেটাসেট থেকে একটি উদাহরণ নেব এবং এর কাঁচা ডেটা পাইপলাইনে প্রেরণ করব:

```py
example = minds[0]
asr(example["audio"]["array"])
```

**আউটপুট:**
```out
{"text": "I WOULD LIKE TO PAY MY ELECTRICITY BILL USING MY COD CAN YOU PLEASE ASSIST"}
```

আসুন এই আউটপুটটির সাথে এই উদাহরণের প্রকৃত ট্রান্সক্রিপশনের তুলনা করি:

```py
example["english_transcription"]
```

**আউটপুট:**
```out
"I would like to pay my electricity bill using my card can you please assist"
```

মডেলটি অডিও প্রতিলিপি তৈরী করাতে একটি চমত্কার ভাল কাজ করেছে বলে মনে হচ্ছে! শুধুমাত্র একটি শব্দ ভুল ("card") হয়েছে, যা অস্ট্রেলিয়ান স্পিকারের উচ্চারণ বিবেচনা করলে বেশ ভাল, যেখানে অক্ষর "r" প্রায়ই নীরব।

ডিফল্টরূপে, এই পাইপলাইনটি ইংরেজি ভাষার জন্য স্বয়ংক্রিয় বক্তৃতা শনাক্তকরণের জন্য প্রশিক্ষিত একটি মডেল ব্যবহার করে। আপনি যদি MINDS-14-এর অন্যান্য উপসেটগুলিকে ভিন্ন
ভাষায় প্রতিলিপি করার চেষ্টা করতে চান, তাহলে আপনি একটি pre-trained ASR মডেল খুঁজে পেতে পারেন [🤗 Hub এ](https://huggingface.co/models?pipeline_tag=automatic-speech-recognition&language=fr&sort=downloads)।
আপনি প্রথমে টাস্ক, তারপর ভাষা দ্বারা মডেল তালিকা ফিল্টার করতে পারেন। একবার আপনি আপনার পছন্দের মডেলটি পেয়ে গেলে, এটির নাম pipeline এ `model` যুক্তি হিসাবে পাস করুন।

MINDS-14 এর জার্মান বিভাজনের জন্য এটি চেষ্টা করা যাক। "de-DE" উপসেট লোড করুন:

```py
from datasets import load_dataset
from datasets import Audio

minds = load_dataset("PolyAI/minds14", name="de-DE", split="train")
minds = minds.cast_column("audio", Audio(sampling_rate=16_000))
```

একটি উদাহরণ পান এবং ট্রান্সক্রিপশনটি কী হওয়া উচিত তা দেখুন:

```py
example = minds[0]
example["transcription"]
```

**আউটপুট:**
```out
"ich möchte gerne Geld auf mein Konto einzahlen"
```

🤗 Hub e জার্মান ভাষার জন্য একটি pre-trained ASR মডেল খুঁজুন, একটি pipeline তৈরী করুন এবং উদাহরণটি প্রতিলিপি করুন:

```py
from transformers import pipeline

asr = pipeline("automatic-speech-recognition", model="maxidl/wav2vec2-large-xlsr-german")
asr(example["audio"]["array"])
```

**আউটপুট:**
```out
{"text": "ich möchte gerne geld auf mein konto einzallen"}
```

সঠিক!

আপনার নিজের কাজ সমাধান করার সময়, একটি সাধারণ pipeline দিয়ে শুরু করতে পারেন যেমন আমরা এই অধ্যায়ে দেখিয়েছি। pipeline একটি মূল্যবান সাধনী যা বিভিন্ন সুবিধা প্রদান করে:
- একটি pre-trained মডেল বিদ্যমান থাকতে পারে যা ইতিমধ্যেই আপনার কাজটি সত্যিই ভালভাবে সমাধান করে, আপনার প্রচুর সময় বাঁচায়।
- pipeline() আপনার জন্য সমস্ত প্রাক/পরবর্তী প্রক্রিয়াকরণের যত্ন নেয়, তাই আপনাকে একটি মডেলের জন্য সঠিক বিন্যাস এর ডেটা পাওয়ার বিষয়ে চিন্তা করতে হবে না।
- যদি ফলাফলটি আদর্শ না হয়, তবে এটি আপনাকে ভবিষ্যতের fine tuning এর জন্য একটি দ্রুত বেসলাইন দেয়।
- একবার আপনি আপনার কাস্টম ডেটাতে একটি মডেল fine-tune করুন এবং এটি Hub এ শেয়ার করলে, সমগ্র সম্প্রদায় এটি দ্রুত ব্যবহার করতে সক্ষম হবে এবং অনায়াসে
`pipeline()` পদ্ধতির মাধ্যমে AI আরও সুলভ করে তুলবে।


<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter2/asr_pipeline.mdx" />

### হাতে-করি অনুশীলন
https://huggingface.co/learn/audio-course/bn/chapter2/hands_on.md

# হাতে-করি অনুশীলন

এই অনুশীলনটি গ্রেড করা হয়নি এবং কোর্সের বাকি অংশ জুড়ে আপনি যে টুলস এবং লাইব্রেরিগুলি ব্যবহার করবেন তার সাথে পরিচিত হতে সাহায্য করার উদ্দেশ্যে করা
হয়েছে। আপনি যদি ইতিমধ্যেই Google Colab, 🤗 datasets, librosa এবং 🤗 transformers ব্যবহারে অভিজ্ঞ হয়ে থাকেন, তাহলে আপনি এই অনুশীলনটি
এড়িয়ে যেতে পারেন।

১. একটি [Google Colab](https://colab.research.google.com) নোটবুক তৈরি করুন।

২. স্ট্রিমিং মোডে আপনার পছন্দের ভাষায় [`facebook/voxpopuli` ডেটাসেট](https://huggingface.co/datasets/facebook/voxpopuli) এর `train`
স্প্লিটটি লোড করতে 🤗 datasets ব্যবহার করুন।

৩. ডেটাসেটের `train` অংশ থেকে তৃতীয় উদাহরণটি পান এবং এটি অন্বেষণ করুন। এই উদাহরণে যে বৈশিষ্ট্যগুলি রয়েছে তা প্রদত্ত, আপনি এই ডেটাসেটটি কী
ধরণের অডিও কাজগুলির জন্য ব্যবহার করতে পারেন?

৪. এই উদাহরণের তরঙ্গরূপ এবং spectrogram প্লট করুন।

৫. [🤗 Hub](https://huggingface.co/models) এ যান, pre-trained models গুলো অন্বেষণ করুন এবং এমন একটি মডেল খুঁজুন যা আপনি আগে
বেছে নেওয়া ভাষার জন্য automatic speech recognition এর জন্য ব্যবহার করা যেতে পারে। আপনি যে মডেলটি পেয়েছেন তার সাথে একটি সংশ্লিষ্ট pipeline
তৈরী করুন এবং উদাহরণটি প্রতিলিপি করুন।

৬. উদাহরণে দেওয়া ট্রান্সক্রিপশনের সাথে pipeline থেকে আপনি যে ট্রান্সক্রিপশন পেয়েছেন তার তুলনা করুন।


আপনি যদি এই অনুশীলনের সাথে সমস্যায় পড়েন, তাহলে নির্দ্বিধায় একটি [উদাহরণ সমাধান](https://colab.research.google.com/drive/1NGyo5wFpRj8TMfZOIuPaJHqyyXCITftc?usp=sharing) দেখুন।
কিছু আকর্ষণীয় আবিষ্কার করলেন? একটি দুর্দান্ত মডেল পাওয়া গেছে? একটি সুন্দর স্পেকট্রোগ্রাম পেয়েছেন? টুইটারে আপনার কাজ এবং আবিষ্কারগুলি ভাগ করে নিন বিনা দ্বিধায়!

পরবর্তী অধ্যায়গুলিতে আপনি বিভিন্ন audio transformers architecture সম্পর্কে আরও শিখবেন এবং আপনার নিজের তৈরী মডেলগুলোকে train করবেন!






<EditOnGithub source="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/bn/chapter2/hands_on.mdx" />
