
AudioKit هو إطار صوتي تم تطويره بواسطة مهندسي الصوت والمبرمجين والموسيقيين خصيصًا لنظامي التشغيل iOS و OSX. ويوفر أدوات
لمعالجة الصوت
وتوليفه . يوجد أسفل الغطاء مزيج من Swift و Objective-C و C ++ و C و API لجهاز الصوت من Apple. يتم تغليف التقنيات الرائعة (والمتطورة إلى حد ما) في واجهة برمجة تطبيقات Swift ودية للغاية ، والتي يمكن الوصول إليها مباشرة من Xcode Playgrounds!
في هذا البرنامج التعليمي ، سنذهب في رحلة عبر AudioKit ، بالإضافة إلى
تاريخ تركيب الصوت. سوف تتعلم أساسيات فيزياء الصوت وكيف عملت أول توليفات مثل Hammond Organ. أيضا ، سيتم النظر في التقنيات الحديثة ، على سبيل المثال ، أخذ العينات.
اصنع مشروبك المفضل ، واجلس واذهب!
الخطوة الأولى
بدءًا من AudioKit 3.6 ، أصبح إنشاء ملاعب للعمل مع الإطار أمرًا بسيطًا للغاية. قم بتنزيل وفك ضغط قائمة التشغيل للمبتدئين
هنا .
تبدأ الرحلة ببضع خطوات لتهيئة الملاعب للعمل مع AudioKit.
افتح الملف
AudioKitPlaygrounds.xcodeproj في Xcode. انقر فوق الزر
+ في الركن الأيسر السفلي من الشاشة ، وحدد
ملف ... ثم
فارغ في قسم
Playground ، احفظ الملف الجديد في مجلد Playgrounds جنبًا إلى جنب مع ملاعب العرض التوضيحي.
سيبدأ الملعب المُضاف حديثًا وسيبدو مثل هذا:

يستعاض عن الكود الذي تم إنشاؤه بما يلي:
import AudioKitPlaygrounds import AudioKit let oscillator = AKOscillator() AudioKit.output = oscillator try AudioKit.start() oscillator.start() sleep(10)
لن يبدأ الملعب حتى تقوم على الأقل بتجميع المشروع ، لذلك يمكنك استخدام عنصر القائمة
Product / Build أو تركيبة المفاتيح
⌘-B . بعد ذلك ، قم بتشغيل الملعب مرة أخرى وسماع صوت صاخب لمدة 10 ثوانٍ. (ملاحظة من المترجم: في بعض الأحيان لا يختفي الخطأ ، وتحتاج إلى التبديل إلى ملعب آخر والعودة لجعله يعمل). يمكنك استخدام زر التشغيل / الإيقاف في الجزء السفلي الأيسر من نافذة التشغيل لإيقاف التشغيل أو إعادة تشغيله.
ملاحظة: إذا استمر ظهور الأخطاء ، فحاول إعادة تشغيل Xcode. لسوء الحظ ، فإن الأطر والملاعب ليست صديقة جيدة جدًا مع بعضها البعض ويمكن أن تتصرف بشكل غير متوقع.
المذبذبات والفيزياء الصوتية
الجنس البشري يعزف الموسيقى من خلال أشياء جسدية مختلفة منذ آلاف السنين. العديد من أدواتنا المعتادة ، مثل القيثارات أو الطبول ، عمرها مئات السنين. تم إجراء أول تجربة مسجلة لاستخدام الدوائر الإلكترونية لتوليد الصوت في عام 1874 بواسطة Elias Gray. عمل إليشا في مجال الاتصالات السلكية واللاسلكية ، واخترع المذبذب - أبسط المؤلفات الموسيقية. معه سنبدأ الغوص لدينا.
انقر بزر الماوس الأيمن على ملعبك ، وحدد
New Playground Page واستبدل الكود الذي تم إنشاؤه بما يلي:
import AudioKitPlaygrounds import AudioKit import PlaygroundSupport
سيبدأ الملعب في توليد ضجة مستمرة - كما هو مقصود. يمكنك النقر فوق إيقاف لإيقافه.
هذا هو تقريبا نفس ما فعلناه في الملعب السابق ، ولكن هذه المرة سنبحث في التفاصيل.
النظر في جميع الخطوات بالترتيب:
- نحن هنا إنشاء مذبذب. المذبذب هو خليفة
AKNode
. العقد هي العناصر التي تشكل سلسلة صوتية تولد وتعديل الصوت.
- نحن هنا نربط مخرجات العقدة الأخيرة بمحرك AudioKit. في حالتنا ، عقدة واحدة فقط. علاوة على ذلك ، سيقوم الإطار بتوجيه إخراج العقدة إلى جهاز تشغيل الصوت.
- حسنًا ، نبدأ في تشغيل المذبذب ، ويبدأ في إرسال موجة صوتية.
المذبذب يولد إشارة متكررة لا تتوقف. في كتاب اللعب هذا ، يولد
AKOscillator
موجة جيبية. باستخدام AudioKit ، يتم إرسال إشارة موجة جيبية رقمية إلى مكبرات الصوت أو سماعات الرأس. نتيجة لذلك ، نسمع صوتًا يتذبذب على نفس التردد مثل موجة الجيب التي أنشأناها. هذه الموجة الجيبية لا تبدو موسيقية للغاية.

هناك معلمتان مسؤولتان عن صوت مذبذب: السعة - ارتفاع موجة جيبية ، تحدد حجم الصوت وتردده - يعتمد ارتفاع الصوت عليه.
في الملعب ، أضف سطور التعليمات البرمجية التالية مباشرة بعد إنشاء مذبذب:
oscillator.frequency = 300 oscillator.amplitude = 0.5
لقد تغير الصوت ، والآن يبدو ضعف الصوت وأقل كثيرًا. يتم قياس تردد الإشارة بالهرتز (عدد مرات التكرار في الثانية الواحدة) وتحديد درجة الملاحظة. يتم ضبط السعة (السعة) من 0 إلى 1 وتكون مسؤولة عن مستوى الصوت.
تم تسجيل اختراع إيليا جراي في أول براءة اختراع لآلة موسيقية إلكترونية.

بعد سنوات عديدة ، اخترع ليو ثيرمين آلة موسيقية غريبة بعض الشيء تستخدم حتى يومنا هذا. في theremin ، يمكنك تغيير وتيرة الصوت مع حركات اليد فوق الجهاز. لفهم كيف يبدو صوت الثيرمين ، يمكنك الاستماع إلى اهتزازات بيتش بويز ، وليس هناك ما يمكن الخلط فيه.
يمكنك محاكاة صوت thereminvox ، لهذا ، أضف الكود التالي إلى إعدادات المذبذب:
oscillator.rampDuration = 0.2
واستبدل السطر الذي يبدأ تشغيل AudioKit (
try AudioKit.start()
) بما يلي:
let performance = AKPeriodicFunction(every: 0.5) { oscillator.frequency = oscillator.frequency == 500 ? 100 : 500 } try AudioKit.start(withPeriodicFunctions: performance) performance.start()
تسمح خاصية
rampDuration
للمذبذب بتغيير قيم المعلمات بسلاسة (على سبيل المثال ، التردد أو السعة).
AKPeriodicFunction
هي أداة مفيدة من AudioKit لتنفيذ التعليمات البرمجية الدورية. في مثالنا ، يغير تردد موجة الجيب من 500 هرتز إلى 100 هرتز كل 0.5 ثانية.
مبروك! قمت بها للتو ثيرمين الأول الخاص بك. يمكن لمذبذب بسيط إنشاء ملاحظات موسيقية ، لكنه لا يبدو لطيفًا جدًا. هناك العديد من العوامل التي تؤثر على صوت الأدوات المادية ، مثل البيانو ، على سبيل المثال. وكذلك سننظر في بعض منهم.
مغلفات الصوت
عندما تقوم آلة موسيقية بتشغيل ملاحظة ، يتغير حجم صوتها بمرور الوقت ، وتختلف طبيعة التغييرات من أداة إلى أخرى. يسمى النموذج الذي يمكن أن يحاكي هذا التأثير مغلف Attack-Decay-Sustain-Release (ADSR) (ملاحظة: لا يتم ترجمة أجهزة المزج المتاحة للشراء ، لذا فإن اسم المنحنى هو نفسه كما يمكن رؤيته على لوحة هذا المركب).

يتكون غلاف ADSR من:
- الهجوم : الهجوم أو الوقت الذي يصل فيه الصوت إلى الحد الأقصى لحجم الصوت.
- اضمحلال : البرية أو الوقت الذي يسقط من أجل الحد الأقصى لحجم
- الحفاظ على : المجلد الرئيسي ، على عكس المعلمتين السابقتين ، ليس هو الوقت ، بعد الهجوم والوحوش ، وقبل إصدار مفتاح المزج ، سيتم إنشاء الصوت باستخدام وحدة التخزين هذه
- الإصدار : الإصدار أو الوقت الذي يصبح فيه مستوى الصوت صفراً
في البيانو ، يتم استخراج الصوت بواسطة المطارق التي تطرق على الأوتار ، وبالتالي فهي سريعة أو ، كما يقولون ، هجمات قصيرة وبرية. يمكن أن يتعرض الكمان لهجوم طويل ، وحشي ومتواصل ، ويمكن للموسيقي التأثير على هذه المعلمات من خلال الطريقة التي يستخدم بها القوس.
كان هاموند نوفاشورد أحد الآلات الموسيقية الإلكترونية الأولى. تم تصنيع هذا الجهاز في عام 1939 ، ويتألف من 163 أنبوبًا فراغًا وأكثر من 1000 مكثف ، ويزن 230 كيلوغراماً. لسوء الحظ ، تم عمل بضع مئات فقط من النسخ ، ولم يتلق نجاحًا تجاريًا على الإطلاق.

انقر بزر الماوس الأيمن على
Journey Playground ، وحدد
صفحة ملعب جديدة وقم بإنشاء صفحة جديدة تسمى
ADSR . يستعاض عن الكود الذي تم إنشاؤه بما يلي:
import AudioKitPlaygrounds import AudioKit import PlaygroundSupport let oscillator = AKOscillator()
إنه ببساطة يخلق مذبذبًا نعرفه بالفعل. بعد ذلك ، أضف الكود التالي في نهاية الملعب:
let envelope = AKAmplitudeEnvelope(oscillator) envelope.attackDuration = 0.01 envelope.decayDuration = 0.1 envelope.sustainLevel = 0.1 envelope.releaseDuration = 0.3
يؤدي هذا إلى إنشاء
AKAmplitudeEnvelope
الذي يعرف مغلف ADSR. يتم تحديد معلمات المدة (attackDuration ، decayDuration ، releaseDuration) بالثواني ، ويتم تعيين مستوى الصوت (دامة المستوى) في النطاق من 0 إلى 1.
AKAmplitudeEnvelope
هو خليفة
AKNode
بنفس طريقة
AKOscillator
. في الكود أعلاه ، نمرر عقد مغلف المذبذب إلى
AKOscillator
،
AKOscillator
العقد.
بعد ذلك ، أضف الكود التالي:
AudioKit.output = envelope let performance = AKPeriodicFunction(every: 0.5) { if (envelope.isStarted) { envelope.stop() } else { envelope.start() } } try AudioKit.start(withPeriodicFunctions: performance) performance.start() oscillator.start() PlaygroundPage.current.needsIndefiniteExecution = true
سيتم تشغيل AudioKit ، لكن هذه المرة نقوم بتغذية الإخراج من عقدة ADSR إلى مدخلاته. لسماع تأثير ADSR ، نقوم باستمرار بتشغيل العقدة وإيقافها باستخدام
AKPeriodicFunction
.

الآن يمكنك سماع كيف يتم تشغيل الملاحظة في دورات ، لكن هذه المرة أشبه بالبيانو.
يتم تشغيل الحلقة مرتين في الثانية عند كل تكرار ، بدء أو إيقاف ADSR. عندما يبدأ ADSR بهجوم سريع ، يصل مستوى الصوت إلى الحد الأقصى لقيمة 0.01 ثانية ، وبعد ذلك ينخفض مستوى الصوت في 0.1 ثانية إلى المستوى الرئيسي ويبقى هناك لمدة 0.5 ثانية ، ثم يتحلل أخيرًا في 0.3 ثانية.
يمكنك اللعب مع المعلمات بنفسك ومحاولة اللعب ، على سبيل المثال ، صوت الكمان.
تستند الأصوات التي
AKOscillator
موجة جيبية تنتجها
AKOscillator
. على الرغم من أن ASDR تساعد في تهدئة الأصوات القاسية ، إلا أنك لا تزال غير قادر على استدعاء هذه الأصوات الموسيقية.
علاوة على ذلك ، سننظر في كيفية الحصول على صوت أعمق.
التوليف المضافة
كل آلة موسيقية لها صوت خاص بها أو جرس.
الجرس هو ما يميز أصوات البيانو عن أصوات الكمان ، على الرغم من أنه يمكنهم العزف على نفس
النغمة . معلمة مهمة من timbre هو الطيف الصوتي. يصف طيف الصوت نطاق الترددات المستنسخة التي ، عند إضافتها معًا ، تعطي ملاحظة. يستخدم ملعبنا الحالي مذبذبًا يبدو على تردد واحد فقط ، ويبدو مصطنعًا تمامًا.
يمكنك الحصول على صوت حيوي باستخدام مجموعة من مؤشرات التذبذب لتشغيل ملاحظة واحدة. يُعرف هذا النهج باسم التوليف الإضافي ، وهذا هو موضوع ملعبنا التالي.
انقر بزر الماوس الأيمن على الملعب ، وحدد
صفحة ملعب جديدة وقم بإنشاء صفحة جديدة تسمى
التوليف الإضافي . يستعاض عن الكود الذي تم إنشاؤه بما يلي:
import AudioKitPlaygrounds import AudioKit import AudioKitUI import PlaygroundSupport func createAndStartOscillator(frequency: Double) -> AKOscillator { let oscillator = AKOscillator() oscillator.frequency = frequency return oscillator }
لتوليف المضافة ، تحتاج إلى عدة مؤشرات التذبذب ، لذلك سوف نستخدم.
createAndStartOscillator
بعد ذلك ، أضف الكود:
let frequencies = (1...5).map { $0 * 261.63 }
هنا نأخذ فاصل زمني من الأرقام من 1 إلى 5 ونضرب كل منهما في 261.53 ، وتيرة الملاحظة. وتسمى ترددات متعددة الناتجة التوافقيات.
الآن أضف الكود:
let oscillators = frequencies.map { createAndStartOscillator(frequency: $0) }
هنا أنشأنا مذبذب لكل من الترددات التي نستخدمها.
للجمع بين مؤشرات التذبذب ، أضف الكود التالي:
let mixer = AKMixer() oscillators.forEach { $0.connect(to: mixer) }
AKMixer
هو نوع آخر من عقدة AudioKit. يتلقى مدخلات من عقد واحد أو أكثر ويجمعها في واحدة.
أضف الكود التالي:
let envelope = AKAmplitudeEnvelope(mixer) envelope.attackDuration = 0.01 envelope.decayDuration = 0.1 envelope.sustainLevel = 0.1 envelope.releaseDuration = 0.3 AudioKit.output = envelope let performance = AKPeriodicFunction(every: 0.5) { if (envelope.isStarted) { envelope.stop() } else { envelope.start() } } try AudioKit.start(withPeriodicFunctions: performance) performance.start() oscillators.forEach { $0.start() }
يجب أن يكون كل شيء واضحًا مع هذا الرمز: أضف ADSR إلى خرج الخلاط ، وقم بالإخراج عبر AudioKit وقم بتشغيله / إيقافه بشكل دوري.
من أجل التعامل بشكل جيد مع التوليف الإضافي ، سيكون من المفيد اللعب بمجموعات مختلفة من هذه الترددات. وفي هذا ، تعد فرصة الملاعب مثل Live View مثالية لنا.
للقيام بذلك ، أضف الكود:
class LiveView: AKLiveViewController { override func viewDidLoad() { addTitle("Harmonics") oscillators.forEach { oscillator in let harmonicSlider = AKSlider( property: "\(oscillator.frequency) Hz", value: oscillator.amplitude ) { amplitude in oscillator.amplitude = amplitude } addView(harmonicSlider) } } } PlaygroundPage.current.needsIndefiniteExecution = true PlaygroundPage.current.liveView = LiveView()
في AudioKit ، هناك فصول مخصصة للعمل المريح في الملاعب. في مثالنا ، نستخدم
AKLiveViewController
،
AKLiveViewController
وضع العناصر رأسياً. وأيضًا لكل مذبذب نقوم بإنشاء
AKSlider
. تتم تهيئة شريط التمرير بواسطة قيم التردد وسعة المذبذبات ، ويسبب كتلة عند التفاعل معهم. في كتلة كل شريط تمرير ، نقوم بتغيير سعة مذبذب المقابلة. حتى تتمكن فقط من إضافة التفاعل إلى الملاعب الخاصة بك.
من أجل رؤية نتائج الملعب ، تحتاج إلى عرض Live View على الشاشة. للقيام بذلك ، حدد الزر ذي الدوائر المتقاطعة في الجزء العلوي الأيمن من النافذة وتأكد من تحديد قائمة التشغيل الصحيحة لـ Live View.

من أجل تغيير نغمة الأداة الخاصة بك ، يمكنك تغيير قيم كل شريط تمرير على حدة. للحصول على صوت واقعي ، أقترح عليك تجربة التكوين الموضح في لقطة الشاشة أعلاه.
كان Teleharmonium من أوائل المزج الذين استخدموا توليفًا إضافيًا ويزن 200 طن! على الأرجح ، أصبح وزنه وحجمه المذهلين سبب غموضه. استخدم عضو هاموند الأكثر نجاحا عجلات لهجة مماثلة ، ولكن كان أصغر بكثير. اخترع في عام 1935 ، لا يزال معروفًا على نطاق واسع كأداة شعبية في عصر الصخور التقدمية.

عجلة النغمة عبارة عن قرص دوار به تجاويف صغيرة على طول الحافة وشاحنة صغيرة تقع بالقرب من الحافة. كان لدى عضو هاموند مجموعة كاملة من عجلات الألوان التي يمكن أن تدور بسرعات مختلفة. هناك طريقة غير معتادة لتوليد الصوت الكهروميكانيكية بدلاً من الإلكترونية.
من أجل توليد طيف صوت أكثر واقعية ، هناك العديد من التقنيات: تعديل التردد (تعديل التردد أو FM) وتعديل عرض النبضة (تعديل عرض النبض أو PWM) ، كلتا التقنيات متوفرة في AudioKit في
AKFMOscillator
و
AKPWMOscillator
على التوالي. أقترح عليك تجربة الاثنين ، والاستعاضة عنها بدلاً من
AKOscillator
، والتي استخدمناها سابقًا.
تعدد الأصوات
في سبعينيات القرن العشرين ، بدأت الحركة من المزج المعياري ، الذي يتكون من مذبذبات ومغلفات مظروف منفصلة ، إلى مفاعلات المعالجات الدقيقة. بدلاً من استخدام الدوائر التناظرية ، بدأ الصوت في إنشاء تنسيق رقمي. جعل هذا المخلوطات أرخص وأكثر إحكاما ، وأصطناع من علامات تجارية مثل Yamaha بشعبية كبيرة.

اقتصرت جميع ملاعبنا على لعب مذكرة واحدة في وقت واحد. العديد من الأدوات قادرة على لعب أكثر من ملاحظة واحدة في كل مرة ، وتسمى "
مجسمة" . الآلات التي يمكن أن تلعب ملاحظة واحدة فقط تسمى
أحادية الصوت .
من أجل الحصول على صوت مجسم ، يمكنك إنشاء عدة مذبذبات وإرسالها إلى الخلاط ، ولكن في AudioKit هناك طريقة أكثر ملاءمة لذلك.
إنشاء صفحة جديدة في الملعب وتسميته Polyphony. يستعاض عن الكود الذي تم إنشاؤه بما يلي:
import AudioKitPlaygrounds import AudioKit import AudioKitUI import PlaygroundSupport let bank = AKOscillatorBank() AudioKit.output = bank try AudioKit.start()
هنا أنشأنا بنك المذبذبات
AKOscillatorBank
. إذا ذهبت إلى إعلان الفصل ، يمكنك أن تجد أنه وريث
AKPolyphonicNode
، والذي بدوره هو وريث
AKNode
المعروف لنا بالفعل ، وينفذ أيضًا بروتوكول
AKPolyphonic
.
نتيجة لذلك ، فإن بنك المذبذبات هو نفس عقدة AudioKit التي استعرضناها سابقًا. يمكن إرسال ناتجه إلى الخلاطات والأظرف أو أي مرشحات وتأثيرات أخرى. يصف بروتوكول
AKPolyphonic
كيفية تشغيل الملاحظات على ملاحظة متعددة الألحان ؛ دعنا نفكر فيها بمزيد من التفاصيل.
من أجل اختبار مذبذبنا ، نحتاج إلى طريقة لتشغيل العديد من الملاحظات مرة واحدة. هذا ليس صعبا على الاطلاق!
أضف الكود التالي إلى قائمة التشغيل وتأكد من أن Live View مفتوح:
class LiveView: AKLiveViewController, AKKeyboardDelegate { override func viewDidLoad() { let keyboard = AKKeyboardView(width: 440, height: 100) addView(keyboard) } } PlaygroundPage.current.liveView = LiveView() PlaygroundPage.current.needsIndefiniteExecution = true
عندما يتم تجميع الملعب ، سترى ما يلي:

بارد ، هاه؟ لوحة المفاتيح الموسيقية هي حق في الملعب!
AKKeyboardView
هي أداة مساعدة أخرى من AudioKit تجعل من السهل استكشاف إمكانيات الإطار. اضغط على المفاتيح وستجد أنها لا تصدر أي أصوات.
قم بتحديث
setUp
PlaygroundView
بما يلي:
let keyboard = AKKeyboardView(width: 440, height: 100) keyboard.delegate = self addView(keyboard)
هذا سيجعل
PlaygroundView
مفوضًا للوحة المفاتيح ويسمح لك بالرد على ضغطات المفاتيح.
قم بتحديث إعلان الفصل كما يلي:
class LiveView: AKLiveViewController, AKKeyboardDelegate
أضف أيضًا طريقتين مباشرةً بعد
setUp
:
func noteOn(note: MIDINoteNumber) { bank.play(noteNumber: note, velocity: 80) } func noteOff(note: MIDINoteNumber) { bank.stop(noteNumber: note) }
في كل مرة تضغط فيها على مفتاح ، يتم
noteOn
طريقة
noteOn
، وكل ما تفعله هو إخبار بنك المذبذبات بالبدء في تشغيل الملاحظة ، على التوالي ، في طريقة
noteOff
، يتم إيقاف تشغيل
noteOff
.
امسك الماوس واسحب المفاتيح ، وسوف تسمع صوتًا جميلًا (مصطلح موسيقي لزيادة تدريجية في قوة الصوت). يحتوي بنك المذبذبات بالفعل على تأثير ADSR مدمج ، ونتيجة لذلك يختلط التوهين بمذكرة واحدة بهجوم التالي ويبدو لطيفًا.
ربما لاحظت أن الملاحظات التي أعطتنا المفاتيح لم تأتي في شكل تردد. يتم التصريح عن أنها
MIDINoteNumber
. إذا ذهبت إلى إعلان من هذا النوع ، فسترى ما يلي:
public typealias MIDINoteNumber = Int
MIDI لتقف على واجهة الآلات الموسيقية الرقمية. هذا شكل واسع الانتشار لتفاعل الآلات الموسيقية مع بعضها البعض. تتوافق أرقام الملاحظات مع الملاحظات على لوحة مفاتيح الموسيقى القياسية. المعلمة الثانية - هذه السرعة (السرعة) يتوافق مع قوة الضرب على المفتاح. كلما انخفضت القيمة ، كان ليونة اللمس على المفتاح ، وأكثر هدوءًا في الصوت النهائي.
في النهاية ، تحتاج إلى تمكين وضع مجسمة على المفاتيح. أضف الكود التالي إلى طريقة
setUp
:
keyboard.polyphonicMode = true
يمكنك الآن تشغيل العديد من الملاحظات في نفس الوقت ، كما هو موضح في الصورة:

هذا ، بالمناسبة ، في C الكبرى :)
بدأت AudioKit قصتها منذ وقت طويل. تستخدم اليوم
Soundpipe وشفرة من
Csound (مشروع MIT تم إطلاقه في عام 1985). والمثير للدهشة أن الكود الذي نطلقه الآن في الملاعب ونضيفه إلى الآيفون قد كتب قبل 30 عامًا تقريبًا.
أخذ العينات
تحاول تقنيات تجميع الصوت التي ناقشناها سابقًا إعادة إنشاء صوت واقعي باستخدام كتل أساسية بسيطة: المذبذبات ، المرشحات ، الخلاطات. في أوائل سبعينيات القرن الماضي ، أدى تطوير طاقة الكمبيوتر إلى ظهور نهج جديد - أخذ عينات الصوت ، والغرض منه هو إنشاء نسخة رقمية من الصوت.
أخذ العينات هي تقنية بسيطة إلى حد ما تشبه التصوير الرقمي. أثناء أخذ العينات على فترات منتظمة ، يتم تسجيل سعة الموجات الصوتية:

تؤثر المعلمتان على مدى دقة تسجيل الصوت:
- عمق البت : أو عمق البت ، هو عدد مستويات الصوت الفردية التي يمكن لأخذ العينات تشغيلها
- معدل العينة : أو معدل العينة ، يشير إلى عدد المرات التي يتم فيها إجراء قياسات السعة. تقاس في هيرتز.
دعنا نستكشف هذه الخصائص في ملعب جديد. إنشاء صفحة جديدة وتسميتها "عينات". يستعاض عن الكود الذي تم إنشاؤه بما يلي:
import AudioKitPlaygrounds import AudioKit import PlaygroundSupport let file = try AKAudioFile(readFileName: "climax-disco-part2.wav", baseDir: .resources) let player = try AKAudioPlayer(file: file) player.looping = true
يقوم الكود أعلاه بتحميل العينة وإنشاء مشغل صوتي وتشغيله بلا حدود.
يتوفر أرشيف به ملف WAV لهذا البرنامج التعليمي
هنا . قم بتنزيله وفك الضغط إلى مجلد "الموارد" بملعبك.
ثم أضف الكود التالي في نهاية الملعب:
AudioKit.output = player try AudioKit.start() player.play() PlaygroundPage.current.needsIndefiniteExecution = true
سيؤدي ذلك إلى توصيل مشغل الصوت الخاص بك مع AudioKit ، ما عليك سوى رفع مستوى الصوت والتمتع به!
, .
MP3-, , , . :
let bitcrusher = AKBitCrusher(player) bitcrusher.bitDepth = 16 bitcrusher.sampleRate = 40000
AudioKit:
AudioKit.output = bitcrusher
. , .
AKBitCrusher
— AudioKit, . , , ZX Spectrum BBC Micro. , .
, (. delay). ,
AKBitCrusher
. :
let delay = AKDelay(player) delay.time = 0.1 delay.dryWetMix = 1
0.1 .
dryWetMix
. 1 , .
:
let leftPan = AKPanner(player, pan: -1) let rightPan = AKPanner(delay, pan: 1)
AKPanner
, - . .
AudioKit. ,
AKBitCrusher
AudioKit :
let mix = AKMixer(leftPan, rightPan) AudioKit.output = mix
, , .

ما التالي؟
AudioKit. , -, , , . , , .
.