JES دارای پشتیبانی اولیه برای ویرایش صدا است، اما می توانید از آن برای انجام برخی از کارهای مفید استفاده کنید.
JES برنامه ای است که به شما امکان می دهد تصاویر، صداها و فیلم ها را به صورت برنامه ای تغییر دهید. JES دارای بسیاری از توابع داخلی و ابزارهای اشکال زدایی است که به شما در یادگیری زبان Jython کمک می کند.
هنگام وارد کردن یک فایل با استفاده از JES، می توانید امواج صوتی آن را با استفاده از یک پنجره جداگانه به صورت بصری بررسی کنید. همچنین می توانید مقادیر دامنه این امواج صوتی را در نقاط خاصی دستکاری کنید. این می تواند به شما در ویرایش فایل صوتی برای دستیابی به افکت های مختلف کمک کند.
نحوه تغییر حجم یک کلیپ صوتی
وقتی تصویری را در JES رندر میکنید، میتوانید به تک تک پیکسلهای موجود در آن دسترسی داشته باشید. شما می توانید با ویرایش مقادیر رنگ قرمز، سبز و آبی برای هر پیکسل به تکنیک های پردازش تصویر خاصی دست پیدا کنید.
به طور مشابه، یک فایل صوتی حاوی بسیاری از «نمونههای» فردی است که قطعات کوچکی از دادههای صوتی هستند. با تغییر مقدار دامنه در هر نمونه می توانید صدای وارد شده را ویرایش کنید.
کد مورد استفاده در این پروژه در این مخزن GitHub تحت مجوز MIT موجود است.
- برنامه JES را در رایانه خود باز کنید.
- یک تابع جدید به نام changeVolume() ایجاد کنید که حجمی را که می خواهید به آن تغییر دهید به عنوان ورودی دریافت می کند: def changeVolume(vol):
- در داخل تابع، یک اعلان باز کنید تا از کاربر بخواهید یک فایل صوتی معتبر را انتخاب کند. اگرچه JES با فایلهای mp3 سازگار نیست، اما همچنان میتوانید فایلهای WAV را وارد کنید. مقداری اعتبار سنجی اضافه کنید تا مطمئن شوید فایل سازگار است: file = pickAFile() if file != None و file.endswith(.wav”): # کد برای fileelse معتبر: print(“فایل نامعتبر انتخاب شده است. لطفا یک WAV معتبر انتخاب کنید. فایل.”)
- اگر فایل انتخاب شده معتبر است، یک شیء صوتی از آن ایجاد کنید: sound = makeSound(file)
- در هر نمونه صدا حلقه بزنید: برای i در محدوده (0، getLength(صدا)):
- بررسی کنید که آیا کاربر از عملکرد عبور کرده است تا صدا بلندتر شود. اگر چنین است، مقدار نمونه را در آن شاخص با استفاده از تابع ()getSampleValueAt داخلی دریافت کنید. با دو برابر کردن دامنه، صدا را افزایش دهید و از setSampleValueAt() برای تنظیم مقدار جدید استفاده کنید: if vol == ‘up’: sampleVal = getSampleValueAt(sound, i) setSampleValueAt(sound, i, sampleVal * 2)
- بررسی کنید که آیا کاربر به عملکرد منتقل میشود تا صدا ملایمتر شود. اگر چنین است، مقدار نمونه را در آن شاخص دریافت کنید و در عوض آن را بر 2 تقسیم کنید تا دامنه کاهش یابد: اگر vol == ‘down’: sampleVal = getSampleValueAt(sound, i) setSampleValueAt(sound, i, sampleVal / 2)
- از تابع explore() برای باز کردن پنجره کاوشگر برای صدا استفاده کنید: explore(sound)
- روی دکمه Load Program که بین ناحیه برنامه نویسی و خط فرمان قرار دارد کلیک کنید. در صورت درخواست فایل را ذخیره کنید:
- تابع changeVolume() را در خط فرمان اجرا کنید و “up” را به عنوان آرگومان به تابع ارسال کنید: changeVolume(“up”)
- با استفاده از پنجره کاوشگر فایل، به یک فایل صوتی معتبر بروید:
- با استفاده از پنجره جدید روی دکمه Play Entire Sound کلیک کنید:
- در خط فرمان، دوباره changeVolume() را با مقدار “down” به عنوان آرگومان اجرا کنید و یک فایل را انتخاب کنید: changeVolume(“down”)
- در پنجره کاوشگر خواهید دید که امواج صوتی کوچکتر هستند. با استفاده از پنجره جدید روی دکمه Play Entire Sound کلیک کنید:
def changeVolume(vol):
file = pickAFile()
if file != None and file.endswith(".wav"):
# Code for valid file
else:
print("Invalid file selected. Please choose a valid WAV file.")
sound = makeSound(file)
for i in range(0, getLength(sound)):
if vol == 'up':
sampleVal = getSampleValueAt(sound, i)
setSampleValueAt(sound, i, sampleVal * 2)
if vol == 'down':
sampleVal = getSampleValueAt(sound, i)
setSampleValueAt(sound, i, sampleVal / 2)
explore(sound)
changeVolume("up")
changeVolume("down")
نحوه معکوس کردن یک کلیپ صدا
می توانید با ایجاد یک صدای خالی جدید و کپی کردن هر نمونه از صدای اصلی در صدای جدید به ترتیب معکوس، یک صدا را معکوس کنید.
- در یک تابع جدید، از کاربر بخواهید یک فایل WAV را انتخاب کند و بررسی کنید که فایل معتبر است: def reverseSound(): file = pickAFile() if file != None و file.endswith(.wav”): # Code برای فایل معتبر دیگر: چاپ (“فایل نامعتبر انتخاب شد. لطفاً یک فایل WAV معتبر انتخاب کنید.”)
- یک شیء صوتی جدید از فایل انتخاب شده ایجاد کنید: sound = makeSound (فایل)
- از تابع makeEmptySound() داخلی برای ایجاد یک شیء صدای خالی جدید استفاده کنید. این شامل همان تعداد نمونه صدای اصلی خواهد بود. مقدار دامنه برای هر نمونه 0 خواهد بود: newReversedSound = makeEmptySound(getLength(sound))
- در هر نمونه از شیء صدای خالی جدید حلقه بزنید: برای i در محدوده (0، getLength(newReversedSound)):
- برای هر نمونه در آن نقطه، نمونه را در انتهای مخالف صدا بگیرید. به عنوان مثال، اگر طول نمونه 100 و شاخص فعلی 0 باشد، مقدار نمونه در شاخص 99 به دست می آید. به طور مشابه، اگر شاخص فعلی 3 باشد، مقدار نمونه در شاخص 96 به دست می آید: sampleVal = getSampleValueAt( صدا، دریافت طول (صدا) – 1 – i)
- مقدار نمونه را از انتهای دیگر صدا به شاخص فعلی صدای جدید کپی کنید: setSampleValueAt(newReversedSound, i, sampleVal)
- صدای معکوس جدید را کاوش کنید. همچنین میتوانید صدای اصلی را برای مقاصد مقایسه کاوش کنید: explore(sound) explore (newReversedSound)
- روی دکمه Load Program که بین ناحیه برنامه نویسی و خط فرمان قرار دارد کلیک کنید. در صورت درخواست فایل را ذخیره کنید.
- تابع را با استفاده از خط فرمان اجرا کنید: reverseSound()
- صدای اصلی و صدای معکوس را با استفاده از ویندوز کاوشگر مشاهده کنید. برای شنیدن تفاوت ها روی دکمه Play Entire Sound کلیک کنید:
def reverseSound():
file = pickAFile()
if file != None and file.endswith(".wav"):
# Code for valid file
else:
print("Invalid file selected. Please choose a valid WAV file.")
sound = makeSound(file)
newReversedSound = makeEmptySound(getLength(sound))
for i in range(0, getLength(newReversedSound)):
sampleVal = getSampleValueAt(sound, getLength(sound) - 1 - i)
setSampleValueAt(newReversedSound, i, sampleVal)
explore(sound)
explore(newReversedSound)
reverseSound()
چگونه دو کلیپ صوتی را به هم بپیوندیم
برای اتصال دو کلیپ صوتی به یکدیگر، می توانید از کاربر بخواهید دو فایل WAV جداگانه را انتخاب کند. هر نمونه از هر دو صدا را روی شیء صوتی جدید کپی کنید.
- یک تابع جدید به نام joinSounds(): def joinSounds():
- از تابع pickAFile() برای درخواست از کاربر برای انتخاب اولین فایل استفاده کنید. اگر نامعتبر است، یک پیام خطا چاپ کنید: file1 = pickAFile()if file1 == هیچ یا نه file1.endswith(.wav”): print(“فایل نامعتبر انتخاب شده است. لطفاً یک فایل WAV معتبر انتخاب کنید.”)
- دوباره از تابع pickAFile() استفاده کنید تا از کاربر یک فایل صوتی معتبر دوم بخواهید: file2 = pickAFile() if file2 == None or not file2.endswith(.wav”): print(“فایل نامعتبر انتخاب شده است. لطفاً یک فایل انتخاب کنید. فایل WAV معتبر.”)
- دو شیء صوتی از دو فایل صوتی انتخاب شده ایجاد کنید: sound1 = makeSound(file1) sound2 = makeSound(file2)
- طول دو صدا را با هم اضافه کنید تا طول صدای جدید متصل شده را محاسبه کنید. یک شیء صوتی خالی جدید با استفاده از طول ایجاد کنید: newSoundLength = getLength(sound1) + getLength(sound2)joinedSound = makeEmptySound(newSoundLength)
- از طریق هر نمونه از صدای اول حلقه بزنید. مقدار نمونه را در هر شاخص روی صدای جدید کپی کنید: برای i در محدوده (0، getLength(sound1)): sampleVal = getSampleValueAt(sound1, i) setSampleValueAt(joinedSound, i، sampleVal)
- از طریق هر نمونه از صدای دوم حلقه بزنید. مقدار نمونه را در هر شاخص روی صدای جدید، پس از اولین صدا کپی کنید: برای i در محدوده (0، getLength(sound2)): sampleVal = getSampleValueAt(sound2, i) endOfFirstSound = getLength(sound1) – 1 setSampleValueSound,(join endOfFirstSound + i، sampleVal)
- کاوش صدا با استفاده از تابع explore(): explore(joinedSound)
- روی دکمه Load Program که بین ناحیه برنامه نویسی و خط فرمان قرار دارد کلیک کنید. در صورت درخواست فایل را ذخیره کنید.
- تابع را با استفاده از خط فرمان اجرا کنید: joinSounds()
- صدای پیوست شده را با استفاده از پنجره جدید مشاهده کنید و روی دکمه Play Entire Sound کلیک کنید تا صدا را بشنوید:
def joinSounds():
file1 = pickAFile()
if file1 == None or not file1.endswith(".wav"):
print("Invalid file selected. Please choose a valid WAV file.")
file2 = pickAFile()
if file2 == None or not file2.endswith(".wav"):
print("Invalid file selected. Please choose a valid WAV file.")
sound1 = makeSound(file1)
sound2 = makeSound(file2)
newSoundLength = getLength(sound1) + getLength(sound2)
joinedSound = makeEmptySound(newSoundLength)
for i in range(0, getLength(sound1)):
sampleVal = getSampleValueAt(sound1, i)
setSampleValueAt(joinedSound, i, sampleVal)
for i in range(0, getLength(sound2)):
sampleVal = getSampleValueAt(sound2, i)
endOfFirstSound = getLength(sound1) - 1
setSampleValueAt(joinedSound, endOfFirstSound + i, sampleVal)
explore(joinedSound)
joinSounds()
وارد کردن و ویرایش فایل های صوتی با استفاده از JES
اکنون می دانید که چگونه فایل های صوتی را وارد کرده و با استفاده از JES آنها را ویرایش کنید. بسیاری از توابع داخلی دیگر وجود دارد که JES ارائه می کند که به شما امکان می دهد حتی ویرایش پیشرفته صدا را انجام دهید.
می توانید با استفاده از پنجره راهنمای JES درباره سایر عملکردهای موجود بیشتر بدانید.