পাইথনের স্ট্যান্ডার্ড লাইব্রেরির wave মডিউলটি অডিও WAV ফরম্যাটের সাথে কাজ করার একটি সহজ ইন্টারফেস প্রদান করে। এই মডিউলের ফাংশনগুলো একটি ফাইল-লাইক অবজেক্টে কাঁচা (raw) ফরম্যাটে অডিও ডেটা লিখতে পারে এবং WAV ফাইলের অ্যাট্রিবিউট পড়তে পারে।
ফাইলটি বিল্ট-ইন open() ফাংশনের মতোই 'write' বা 'read' মোডে খোলা হয়, কিন্তু এখানে `wave` মডিউলের open() ফাংশন ব্যবহার করা হয়।
wave.open()
এই ফাংশনটি অডিও ডেটা পড়া/লিখার জন্য একটি ফাইল খোলে। ফাংশনটির দুটি প্যারামিটার প্রয়োজন: প্রথমে ফাইলনেম এবং দ্বিতীয়ে মোড। মোড হতে পারে অডিও ডেটা লিখতে 'wb' বা পড়তে 'rb'।
obj = wave.open('sound.wav', 'wb')
'rb' মোডে একটি Wave_read অবজেক্ট রিটার্ন করে, আর 'wb' মোডে একটি Wave_write অবজেক্ট রিটার্ন করে।
Wave_write অবজেক্টের মেথডগুলো:
| close() | যদি wave দ্বারা ফাইলটি খোলা হয়ে থাকে, তবে তা বন্ধ করে। |
| setnchannels() | চ্যানেলের সংখ্যা সেট করুন। ১ মোনোর জন্য, ২ স্টেরিওর জন্য। |
| setsampwidth() | স্যাম্পল উইডথ n বাইটে সেট করুন। |
| setframerate() | ফ্রেম রেট n-এ সেট করুন। |
| setnframes() | ফ্রেমের সংখ্যা n-এ সেট করুন। |
| setcomptype() | কম্প্রেশন টাইপ এবং ডেসক্রিপশন সেট করুন। এই মুহূর্তে শুধু NONE কম্প্রেশন টাইপ সমর্থিত, অর্থাৎ কোনো কম্প্রেশন নেই। |
| setparams() | প্যারামিটার টাপল (nchannels, sampwidth, framerate, nframes, comptype, compname) গ্রহণ করে। |
| tell() | ফাইলের বর্তমান পজিশন রিট্রিভ করে। |
| writeframesraw() | অডিও ফ্রেম লিখে, করেকশন ছাড়া। |
| writeframes() | অডিও ফ্রেম লিখে এবং নিশ্চিত করে যে সেগুলো সঠিক। |
নিচের কোডটি ৯৯৯৯৯ সেকেন্ড ডিউরেশনের র্যান্ডম শর্ট ইন্টিজার বাইটস দিয়ে একটি WAV ফাইল তৈরি করে।
import wave, struct, math, random
sampleRate = 44100.0 # হার্টজ
duration = 1.0 # সেকেন্ড
frequency = 440.0 # হার্টজ
obj = wave.open('sound.wav', 'w')
obj.setnchannels(1) # মোনো
obj.setsampwidth(2)
obj.setframerate(sampleRate)
for i in range(99999):
value = random.randint(-32767, 32767)
data = struct.pack('
Wave_read অবজেক্টের মেথডগুলো
close() যদি wave মডিউল দ্বারা স্ট্রিমটি খোলা হয়ে থাকে, তবে তা বন্ধ করে।
getnchannels() অডিও চ্যানেলের সংখ্যা রিটার্ন করে (১ মোনোর জন্য, ২ স্টেরিওর জন্য)।
getsampwidth() বাইটে স্যাম্পল উইডথ রিটার্ন করে।
getframerate() স্যাম্পলিং ফ্রিকোয়েন্সি রিটার্ন করে।
getnframes() অডিও ফ্রেমের সংখ্যা রিটার্ন করে।
getcomptype() কম্প্রেশন টাইপ রিটার্ন করে (শুধু 'NONE' সমর্থিত)।
getparams() একটি namedtuple() রিটার্ন করে (nchannels, sampwidth, framerate, nframes, comptype, compname), get*() মেথডগুলোর আউটপুটের সমতুল্য।
readframes(n) সর্বোচ্চ n ফ্রেম অডিও পড়ে এবং বাইটস অবজেক্ট হিসেবে রিটার্ন করে।
rewind() ফাইল পয়েন্টারকে অডিও স্ট্রিমের শুরুতে রివাইন্ড করে।
নিচের কোডটি WAV ফাইলের কিছু প্যারামিটার পড়ে।
import wave
obj = wave.open('sound.wav', 'r')
print("Number of channels", obj.getnchannels())
print("Sample width", obj.getsampwidth())
print("Frame rate.", obj.getframerate())
print("Number of frames", obj.getnframes())
print("parameters:", obj.getparams())
obj.close()
আউটপুট
Number of channels 1
Sample width 2
Frame rate. 44100
Number of frames 99999
parameters: _wave_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype='NONE', compname='not compressed')