alqahery Admin
عدد المساهمات : 119 السٌّمعَة : 0 تاريخ التسجيل : 15/07/2014 العمر : 26 الموقع : اليمن
| موضوع: تنسيق تبادل الملفات الصوتية (أو AIFF) الأحد فبراير 01, 2015 1:53 pm | |
| بسم الله الرحمن الرحيم
هذا الموضوع مفيد لمن يفهم لغات البرمجة والهاكر
تنسيق تبادل الملفات الصوتية (أو AIFF)
------------------------------------------------------------------------- تنسيق تبادل الملفات الصوتية (أو AIFF) هو تنسيق ملف لتخزين الصوت الرقمي (الموجي) البيانات. وهو يدعم مجموعة متنوعة من قرارات بعض الشيء، ومعدلات عينة، وقنوات الصوت. هذا الشكل هو شعبية جدا على منصات أبل، ويستخدم على نطاق واسع في البرامج المهنية التي تعالج الموجات الصوتية الرقمية.
يستخدم هذا الشكل من الفنون الالكترونية تبادل طريقة تنسيق الملف لتخزين البيانات في "قطع". يجب عليك قراءة المقال عن شكل ملف التبادل قبل المتابعة.
أنواع البيانات
وسيتم استخدام لغة C تشبه لوصف هياكل البيانات في الملف. وهناك عدد قليل أنواع البيانات الإضافية التي ليست جزءا من معيار C، ولكن التي سيتم استخدامها في هذه الوثيقة، هي:
امتد 80 بت IEEE القياسي 754 نقطة عائمة رقم (ستاندرد أبل رقمية البيئة [SANE] نوع البيانات الموسعة). وهذا من شأنه أن يكون حقل 10 بايت. pstring سلسلة على غرار باسكال، والعد بايت واحد تليها أن العديد من وحدات البايت النص. وينبغي أن يكون العدد الإجمالي للبايت في هذا النوع من البيانات حتى. يمكن إضافة وسادة بايت إلى نهاية النص لتحقيق ذلك. لا ينعكس هذا البايت سادة في العد. الهوية معرف قطعة (أي 4 ASCII بايت) كما هو موضح في تنسيق ملف تبادل معلومات . نلاحظ أيضا أن عندما ترى صفيف مع أي حجم المواصفات (على سبيل المثال، شار ckData []؛)، وهذا يشير إلى وجود مجموعة متغيرة الحجم في لغتنا C-مثل. وهذا يختلف من صفائف C القياسية.
الثوابت
ويشار إلى قيم عشرية على أنه سلسلة من الأرقام، على سبيل المثال 123، 0، 100، كلها أرقام عشرية. ويسبق القيم الست عشرية من قبل 0X - على سبيل المثال، 0x0A، 0x1 ومن 0x64.
منظمة البيانات
يتم تخزين كافة البيانات في موتورولا 68000 (أي endian كبيرة) الشكل. يتم تخزين بايت من القيم بايت متعددة مع النظام عالية (أي الأكثر أهمية) بايت أولا. بتات البيانات على النحو التالي (أي، كما هو موضح مع الأرقام قليلا على أعلى):
7 6 5 4 3 2 1 0 + ----------------------- + شار: | MSB LSB | + ----------------------- +
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + ----------------------- + ----------------------- + القصير: | MSB بايت 0 | بايت 1 LSB | + ----------------------- + ----------------------- +
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + ----------------------- + ----------------------- + - ---------------------- + ----------------------- + طويل: | MSB بايت 0 | بايت 1 | بايت 2 | 3 البايت LSB | + ----------------------- + ----------------------- + - ---------------------- + ----------------------- + هيكل ملف
ملف الصوت IFF هي عبارة عن مجموعة من عدد من أنواع مختلفة من قطع. هناك القطعة الشائعة المطلوبة والتي تحتوي على المعالم الهامة واصفا الموجي، مثل طوله ومعدل العينة. على قطعة بيانات الصوت، الذي يحتوي على البيانات الموجي الفعلي، مطلوب أيضا إذا كانت البيانات الموجي يبلغ طول أكبر من 0 (أي، هناك هو في الواقع البيانات الموجي في شكل). جميع أجزاء أخرى اختيارية. بين غيرها من أجزاء اختيارية هي تلك التي تحدد علامات، المعلمات أداة القائمة، مخزن المعلومات الخاصة بالتطبيق، الخ، كل هذه القطع تم وصفها بالتفصيل في الأقسام التالية من هذه الوثيقة.
ويجب على جميع التطبيقات التي تستخدم نموذج AIFF يكون قادرا على قراءة أجزاء المطلوبة 2، ويمكن أن تختار تجاهل انتقائي قطع اختيارية. والبرنامج الذي نسخة في AIFF الشكل الذي ينبغي أن نسخ كافة أجزاء في شكل AIFF، حتى تلك التي لا يختار لتفسير.
لا توجد أية قيود على ترتيب قطع داخل AIFF النموذج.
هنا لمحة رسومية على سبيل المثال، الحد الأدنى من ملف AIFF. وهو يتألف من AIFF نموذج واحد يحتوي على 2 قطع المطلوبة، وهي القطعة المشتركة وقسما بيانات الصوت.
__________________________ | استمارة AIFF القطعة | | ckID = 'نموذج' | | formType = 'AIFF' | | __________________ | | | القطعة الشائعة | | | | ckID = 'COMM "| | | | __________________ | | | __________________ | | | الصوت القطعة البيانات | | | | ckID = 'SSND "| | | | __________________ | | | __________________________ | عينة نقاط ونماذج إطارات
إن جزءا كبيرا من تفسير ملفات الصوت IFF تدور حول مفهومي نقاط العينة وأطر العينة.
وهناك نقطة العينة هي قيمة تمثل عينة من صوت في لحظة معينة من الزمن. يتم تخزين كل نقطة عينة كقيمة الخطية، 2's-تكملة التي قد تكون 1-32 بت واسعة (على النحو الذي يحدده مجال sampleSize في القطعة الشائعة). على سبيل المثال، فإن كل نقطة عينة من الموجي 8 بت تكون بايت 8 بت (أي شار وقعت).
لأن تتعامل عمليات القراءة والكتابة معظم وحدة المعالجة المركزية مع بايت 8 بت، تقرر أن نقطة العينة يجب أن يتم تقريب تصل إلى حجم الذي هو من مضاعفات الرقم 8 عند تخزينها في AIFF. وهذا ما يجعل AIFF أسهل للقراءة في الذاكرة. إذا ADC بك ينتج نقطة عينة 1-8 بت واسعة، يجب أن يتم تخزين نقطة عينة في AIFF كما بايت 8 بت (أي شار وقعت). إذا ADC بك ينتج نقطة عينة 9-16 بت واسعة، يجب أن يتم تخزين نقطة عينة في AIFF ككلمة 16 بت (أي، وقعت قصيرة). إذا ADC بك ينتج نقطة عينة من 17 إلى 24 بت واسعة، يجب أن يتم تخزين نقطة عينة في AIFF عن ثلاثة بايت. إذا ADC بك ينتج نقطة عينة 25-32 بت واسعة، يجب أن يتم تخزين نقطة عينة في AIFF باعتباره doubleword 32 بت (أي، وقعت منذ فترة طويلة). إلخ
وعلاوة على ذلك، ينبغي أن تترك مضبوط البتات البيانات، مع أي البتات المتبقية (أي لوحة) ركزت. على سبيل المثال، النظر في القضية من نقطة عينة 12-بت. لديها 12 بت، لذلك يجب أن يتم حفظ نقطة عينة ككلمة 16-بت. تلك 12 بت يجب أن يترك له ما يبرره، بحيث تصبح بت 4 إلى 15 شامل، وقطع 0-3 يجب تعيين إلى الصفر. هو مبين أدناه هو كيف يتم تخزين نقطة عينة 12 بت بقيمة ثنائي 101000010111 اليسار تبريرها بأنها اثنين بايت (أي، كلمة 16-بت).
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ | | | | | | | | | | | | | | | | | | 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 | | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | <--------------- ------------------------------> <-------------> 12 بت نقطة عينة تبقى مبررة أقصى اليمين 4 بت صفر مبطن لأصوات متعددة القنوات (على سبيل المثال، الموجي ستيريو)، ومعشق نقاط عينة واحدة من كل قناة. على سبيل المثال، افترض جهاز ستيريو (أي قناة 2) الموجي. بدلا من تخزين جميع النقاط عينة للقناة اليسرى أولا، ثم تخزين جميع النقاط عينة للقناة بجوار، وانت "خلط" نقاط عينة القناتين "معا. هل تخزين نقطة العينة الأولى من القناة اليسرى. وبعد ذلك، هل تخزين نقطة العينة الأولى من القناة اليمنى. وبعد ذلك، هل تخزين نقطة العينة الثانية من القناة اليسرى. وبعد ذلك، هل تخزين نقطة العينة الثانية من القناة اليمنى، وهلم جرا، بالتناوب بين تخزين نقطة عينة القادمة من كل قناة. هذا هو ما تعنيه البيانات معشق، قمت بتخزين نقطة عينة القادمة من كل من القنوات في المقابل، حتى يتسنى للنقاط العينة التي من المفترض أن تكون "لعبت" (أي، أرسلت إلى DAC) في وقت واحد يتم تخزينها بشكل متاخم.
نقاط العينة التي من المفترض أن تكون "لعبت" (أي، أرسلت إلى DAC) في وقت واحد والتي تسمى مجتمعة إطار العينة. في المثال الموجي ستيريو لدينا، كل نقطتين عينة تشكل إطار العينة آخر. ويتضح ذلك أدناه للحصول على هذا المثال ستيريو.
عينة عينة عينة الإطار 0 الاطار 1 الإطار N _____ _____ _____ _____ _____ _____ | CH1 | CH2 | CH1 | CH2 |. . . | CH1 | CH2 | | _____ | _____ | _____ | _____ | | _____ | _____ | _____ | | = نقطة عينة واحدة | _____ | لالموجي أحادي، وهو إطار العينة هو مجرد نقطة عينة واحدة (أي، لا يوجد شيء لتعشيق). الطول الموجي متعددة القنوات، يجب عليك اتباع الاتفاقيات هو مبين أدناه والتي لتخزين القنوات داخل إطار العينة. (أي، تحت، يتم عرض إطار العينة واحد على سبيل المثال كل من الموجي متعددة).
قنوات 1 2 _________ _________ | يسار | الحق | ستيريو | | | | _________ | _________ |
1 2 3 _________ _________ _________ | يسار | الحق | مركز | 3 قناة | | | | | _________ | _________ | _________ |
1 2 3 4 _________ _________ _________ _________ | أمام | أمام | الخلفية | الخلفية | رباعية | يسار | الحق | يسار | الحق | | _________ | _________ | _________ | _________ |
1 2 3 4 _________ _________ _________ _________ | غادر | مركز | الحق | المحيطي | 4 قناة | | | | | | _________ | _________ | _________ | _________ |
1 2 3 4 5 6 _________ _________ _________ _________ _________ _________ | غادر | غادر | مركز | الحق | الحق | المحيطي | 6 قنوات | مركز | | | مركز | | | | _________ | _________ | _________ | _________ | _________ | _________ | كانت معبأة في نقاط العينة ضمن إطار عينة معا. لا توجد بايت غير المستخدمة بينهما. وبالمثل، وتكتظ إطارات عينة جنبا إلى جنب مع أي بايت سادة.
والقطعة الشائعة
يصف القطعة الشائعة الثوابت الأساسية للبيانات الموجي مثل معدل العينة، بت القرار، وكيف يتم تخزين العديد من قنوات الصوت الرقمي في AIFF النموذج.
# تعريف CommonID "COMM '/ * chunkID لالقطعة الشائعة * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة.
numChannels قصيرة. numSampleFrames طويلة غير موقعة. sampleSize قصيرة. مددت SAMPLERATE. } CommonChunk. الرقم هو دائما COMM. مجال chunkSize هو عدد وحدات البايت في قطعة. هذا لا يشمل 8 بايت يستخدمها حقول الهوية والحجم. لالقطعة الشائعة، chunkSize ينبغي دائما 18 حيث لا توجد حقول طول متغير (ولكن للحفاظ على التوافق مع ملحقات محتملة في المستقبل، إذا كان هو chunkSize> 18، يجب أن نتعامل دائما تلك بايت إضافية كما سادة بايت).
يحتوي الحقل numChannels عدد القنوات الصوتية للصوت. قيمة 1 تعني بصوت أحادي، 2 يعني ستيريو، 4 يعني أربعة الصوت قناة، وما إلى ذلك أي عدد من القنوات السمعية قد تكون ممثلة. لأصوات متعددة القنوات، ومعشق نقاط عينة واحدة من كل قناة. يطلق على مجموعة من النقاط عينة معشق إطار عينة.
يتم تخزين البيانات الموجي الفعلي في جزء آخر، والقطعة الصوت والبيانات، والتي سيتم وصفها لاحقا.
يحتوي الحقل numSampleFrames عدد الإطارات العينة. هذا ليس بالضرورة نفس عدد وحدات البايت ولا عدد نقاط العينة في القطعة بيانات الصوت (أي أنها لن تكون إلا إذا كنت تتعامل مع الموجي مونو). العدد الإجمالي للنقاط العينة في الملف numSampleFrames مرات numChannels.
وsampleSize هو عدد البتات في كل نقطة العينة. ويمكن أن يكون أي رقم من 1 إلى 32
مجال SAMPLERATE هو معدل العينة التي الصوت هو الذي سيتم تشغيله في إطارات عينة في الثانية الواحدة.
واحد، واحد فقط، هو مطلوب القطعة الشائعة في كل AIFF النموذج.
سليمة القطعة البيانات
في القطعة بيانات الصوت تحتوي على إطارات عينة الفعلية (أي جميع قنوات البيانات الموجي).
# تعريف SoundDataID "SSND '/ * ID قطعة لالقطعة الصوت والبيانات * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة.
غير موقعة تعويض فترة طويلة. blockSize طويلة غير موقعة. الحرف غير الموقعة WaveformData []؛ } SoundDataChunk. وSSND معرف دائما. chunkSize هو عدد وحدات البايت في قطعة، ناهيك عن 8 بايت يستخدمها حقول الهوية والحجم ولا أي سادة بايت الممكن اللازمة لجعل قطعة حتى حجم (أي chunkSize هو عدد وحدات البايت المتبقية في قطعة بعد chunkSize المجال، لا عد أي سادة بايت زائدة).
يمكنك تحديد عدد بايت من البيانات الموجي الفعلية هناك بطرح 8 من chunkSize. تذكر أن عدد الإطارات عينة، القرار بعض الشيء، وغيرها من المعلومات وحصلت من القطعة الشائعة.
يحدد مجال تعويض حيث يبدأ أول إطار العينة في WaveformData. الإزاحة بالبايت. ومعظم التطبيقات التي لا تستخدم تعوض وينبغي أن تحدد إلى الصفر. استخدامها لغير صفرية تعويض هو موضح في "بلوك محاذاة الموجي البيانات".
يتم استخدام blockSize بالتزامن مع تعويض للبيانات الموجي الإصطفاف كتلة. أنه يحتوي على حجم بالبايت من الكتل يتم محاذاة أن البيانات الموجي ل. كما هو الحال مع تعويض، فإن معظم التطبيقات التي لا تستخدم blockSize وينبغي أن تحدد إلى الصفر. مزيد من المعلومات حول blockSize هي في "بلوك محاذاة الموجي البيانات".
مجموعة WaveformData تحتوي على بيانات الموجي الفعلية. يتم ترتيب البيانات في ما يسمى إطارات عينة يتم تحديد عدد الإطارات عينة في WaveformData حسب الحقل numSampleFrames في القطعة الشائعة. لمزيد من المعلومات، راجع "عينة من النقاط ونماذج إطارات".
مطلوب القطعة بيانات الصوت إلا مجال numSampleFrames في القطعة الشائعة هو صفر. واحد، واحد فقط، قد تظهر القطعة بيانات الصوت في AIFF النموذج.
كتلة محاذاة الموجي البيانات
قد يكون هناك بعض التطبيقات التي، لضمان تسجيل الوقت الحقيقي، وتشغيل الصوت وترغب في محاذاة البيانات الموجي إلى كتل ذات حجم ثابت. هذا التوافق يمكن أن يتحقق مع المعلمات تعويض وblockSize من القطعة الصوت والبيانات، كما هو مبين أدناه.
_________________ ___________________________________ _________________ | \\\\ غير المستخدمة \\\\\ | إطارات عينة | \\\\ غير المستخدمة \\\\\ | | _________________ | ___________________________________ | _________________ | <- تعويض> <- numSampleFrames إطارات عينة>
| blockSize | | | | | <- بايت> | | | | | _________________ | _________________ | _________________ | _________________ | كتلة N-1 N كتلة كتلة N + 1 + 2 كتلة N أعلاه، يبدأ أول إطار العينة في بداية كتلة N. ويتم ذلك من خلال تخطي الإزاحة بايت الأولى (أي بعض المخزنة سادة بايت) من WaveformData. لاحظ أنه قد يكون هناك أيضا بايت سادة المخزنة في نهاية WaveformData لوحة بها بحيث ينتهي عند حدود كتلة.
وblockSize يحدد حجم بالبايت من كتلة التي كنت محاذاة البيانات الموجي. وblockSize من 0 يشير إلى أن البيانات الموجي لا تحتاج إلى أن تكون المنحازة كتلة. يجب أن التطبيقات التي لا تبالي المحاذاة كتلة تعيين blockSize وتعويض ل0 عند إنشاء ملفات AIFF. يجب أن التطبيقات التي إرسال البيانات الموجي المنحازة كتلة تعيين blockSize لحجم كتلة المناسب. التطبيقات التي تعديل ملف AIFF القائمة يجب أن تحاول الحفاظ على محاذاة البيانات الموجي، على الرغم من أن هذا غير مطلوب. إذا لا أحد التطبيقات الحفاظ على المحاذاة، ينبغي أن تعيين blockSize وتعويض إلى 0. إذا تطبيق يحتاج إلى إعادة ترتيب البيانات الموجي إلى كتلة مختلفة الحجم، ينبغي أن تحديث blockSize وتعويض وفقا لذلك.
والقطعة ماركر
والقطعة ماركر يحتوي على علامات تشير إلى مناصب في البيانات الموجي. علامات يمكن استخدامها لأي أغراض يرغب تطبيق. والقطعة الصك، محددة في وقت لاحق في هذه الوثيقة، يستخدم علامات بمناسبة حلقة بداية ونقطة نهاية.
هيكل علامة على النحو التالي:
الرموز المميزة ل typedef MarkerId قصيرة.
الرموز المميزة ل typedef البنية { MarkerID معرف. موقف طويل غير موقعة. pstring markerName. } ماركر. الرقم هو الرقم الذي يعرف بشكل فريد أن علامة داخل AIFF. هوية يمكن أن يكون أي عدد صحيح غير صفرية إيجابي، ما دام لا علامة أخرى داخل نفس شكل AIFF له نفس الهوية.
يتم تحديد موقف علامة في WaveformData حسب الحقل الموقف. علامات تقع من الناحية المفاهيمية بين إطارين العينة. وهناك علامة التي تقع قبل أول إطار العينة في البيانات الموجي هي في موقف 0، في حين أن علامة الذي يقع بين الأول والثاني إطار العينة في البيانات الموجي هي في موقف 1. لذلك، وحدات لموقف هي إطارات عينة، وليس بايت ولا نقاط العينة.
عينة إطارات ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ | | | | | | | | | | | | | | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ^ ^ ^ 0 موقف موقف 5 موقف 12 مجال markerName هو سلسلة نصية على غرار باسكال تحتوي على اسم العلامة.
ملاحظة: بعض الجمل مخزن الملفات "EA IFF 85" كما C-سلاسل (بايت جاء النص بواسطة حرف إنهاء باطل) بدلا من السلاسل على غرار باسكال. يستخدم الصوت IFF pstrings لأنهم تخطي أكثر كفاءة على عند مسح من خلال قطع. باستخدام pstrings، يمكن للبرنامج تخطي سلسلة بإضافة العد السلسلة إلى عنوان الحرف الأول. تتطلب سلاسل C أن كل حرف في السلسلة يتم فحص لفاصل فارغة.
تنسيق القطعة علامة
يظهر الشكل للبيانات ضمن القطعة ماركر أدناه.
# تعريف MarkerID "MARK '/ * chunkID للماركر القطعة * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة.
numMarkers قصيرة غير موقعة. علامة علامات []؛ } MarkerChunk. الرقم هو دائما MARK. chunkSize هو عدد وحدات البايت في قطعة، ناهيك عن 8 بايت يستخدمها حقول الهوية والحجم.
مجال numMarkers هو عدد من الهياكل علامة في القطعة ماركر. إذا numMarkers ليس 0، ويتبع من قبل أن العديد من الهياكل علامة، واحدا بعد الآخر. لأن جميع الحقول في هيكل علامة، بل هي عدد من وحدات البايت، فإن طول أي علامة أن يكون دائما حتى. وهكذا، وتكتظ علامات جنبا إلى جنب مع أي بايت غير المستخدمة بينهما. ليس من الضروري أن توضع علامات في أي ترتيب معين.
والقطعة ماركر اختيارية. لا يزيد عن واحد القطعة ماركر يمكن أن تظهر في شكل AIFF.
والقطعة صك
وتحدد القطعة صك المعايير الأساسية التي أداة، مثل عينات MIDI، يمكن أن تستخدم للعب البيانات الموجي.
حلقات
يمكن يحلق البيانات الموجي، والسماح لجزء من الموجي أن تتكرر من أجل إطالة الصوت. ويصف هيكل أدناه حلقة.
الرموز المميزة ل typedef البنية { PlayMode قصيرة. MarkerId beginLoop. MarkerId endLoop. } حلقة. تتميز حلقة برصيد نقطتين، ويبدأ موقف ونهاية الموقف. هناك طريقتان للعب حلقة، حلقات قدما وإلى الأمام / حلقات المتخلفة. في حالة حلقات الأمام، يبدأ التشغيل في بداية الموجي، لا يزال الماضي تبدأ الموقف ويستمر إلى نهاية الموقف، وعند هذه النقطة يبدأ التشغيل مرة أخرى في البدء الموقف. الجزء بين تبدأ وتنتهي المواقف، ودعا قطاع حلقة، لعبت بشكل متكرر حتى توقفت بسبب بعض الإجراءات، مثل الموسيقار الإفراج عن مفتاح على وحدة تحكم الموسيقية.
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ إطارات عينة | | | | <--- قطاع حلقة> | | | | | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ___ | ^ ^ تبدأ نهاية الموقف موقف مع الأمام / الخلف حلقات، لعبت جزء حلقة الأولى من بدء الموقف إلى نهاية الموقف، ومن ثم لعب الى الوراء من نهاية الموقف لبدء الموقف. ويتكرر هذا النمط الوجه بالتخبط مرارا وتكرارا حتى توقف.
يحدد playMode أي نوع من حلقات التي يتعين القيام بها:
# تعريف NoLooping 0 # تعريف ForwardLooping 1 # تعريف ForwardBackwardLooping 2 إذا تم تحديد NoLooping، ثم يتم تجاهل النقاط حلقة أثناء التشغيل.
وbeginLoop هي هوية علامة التي يصادف بدء موقف شريحة الحلقة.
يصادف endLoop موقف نهاية حلقة. يجب أن يكون البدء في موقف أقل من نهاية الموقف. إذا لم تكن هذه هي الحالة، ثم شريحة حلقة له 0 أو طول سلبي وليس حلقات تأخذ مكان.
تنسيق القطعة صك
يتم وصف تنسيق البيانات ضمن القطعة صك أدناه.
# تعريف InstrumentID "INST '/ * chunkID لآلات الخبز * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة.
شار baseNote. detune شار. شار lowNote. شار highNote. lowvelocity شار. highvelocity شار. مكاسب قصيرة. حلقة sustainLoop. حلقة releaseLoop. } InstrumentChunk. الرقم هو دائما INST. chunkSize ينبغي أن يكون دائما 20 حيث لا توجد حقول طول متغير.
وbaseNote هو رقم الملاحظة التي الصك يلعب الخلف البيانات الموجي دون تعديل في الملعب (أي في نفس معدل العينة التي تم استخدامها عندما تم إنشاء الموجي). وحدات أرقام مذكرة ميدي، وهي في حدود من 0 إلى 127. الأوسط C 60.
يحدد مجال detune كم الصك ينبغي أن يغير من الملعب للصوت عندما لعبت مرة أخرى. الوحدات في سنتا (1/100 من نصف نعمة) وتتراوح بين -50 إلى +50. الأرقام السالبة تعني أن الملعب من الصوت ينبغي تخفيض، في حين تعني الأرقام الإيجابية التي كان ينبغي أن تثار.
الحقول lowNote وhighNote تحديد نطاق مذكرة اقترح على لوحة المفاتيح لتشغيل البيانات الموجي. البيانات الموجي ينبغي ان يلعبه إذا طلب الصك للعب مذكرة بين أعداد مذكرة المنخفضة والعالية، بما. ليس لدى مذكرة قاعدة أن تكون ضمن هذا النطاق. وحدات لlowNote وhighNote هي قيم مذكرة ميدي.
الحقول lowVelocity وhighVelocity تحدد النطاق المقترح للسرعات لتشغيل البيانات الموجي. البيانات الموجي ينبغي ان يلعبه إذا كانت سرعة علما على ما بين السرعة المنخفضة والعالية وشاملة. الوحدات القيم ميدي سرعة (1)، (أدنى سرعة) من خلال 127 (أعلى سرعة).
الربح هو المبلغ الذي لتغيير كسب الصوت عندما لعبت عليه. الوحدات ديسيبل. على سبيل المثال، 0DB يعني أي تغيير، 6DB يعني ضعف قيمة كل نقطة العينة (أي كل 6DB إضافية يتضاعف الربح)، في حين أن وسائل -6db بخفض قيمة كل نقطة العينة.
يحدد مجال sustainLoop حلقة هذا هو الذي يجب أن تلعبه عندما أداة والمحافظة على الصوت.
يحدد مجال releaseLoop حلقة هذا هو الذي يجب أن تلعبه عندما أداة في مرحلة الإفراج عن اللعب مرة صوت. وتحدث هذه المرحلة عادة الافراج بعد إصدارها مفتاح على هذا الصك.
والقطعة صك اختيارية. لا يزيد عن 1 صك القطعة يمكن أن تظهر في أحد AIFF النموذج.
والقطعة MIDI البيانات
والقطعة MIDI بيانات يمكن استخدامها لتخزين البيانات MIDI.
والغرض الرئيسي من هذه قطعة لتخزين رسائل النظام MIDI الحصري، على الرغم من أن أنواع أخرى من البيانات MIDI يمكن تخزينها في قطعة أيضا. كما أكثر من الصكوك تأتي إلى السوق، سيكون لديهم على الأرجح المعلمات التي لم تدرج في مواصفات AIFF. قد تحتوي الرسائل تميز الكلية السابق لهذه الصكوك العديد من المعلمات التي لم يتم تضمينها في القطعة الصك. على سبيل المثال، MIDI عينات جديدة يمكن أن تدعم أكثر من عقدين من الحلقات في الموجي. ومن المرجح أن تكون ممثلة هذه الحلقات في الرسالة تميز الكلية السابق لعينات جديدة. ويمكن تخزين هذه الرسالة في القطعة MIDI البيانات (أي، لذلك كان لديك بعض مكان لتخزين هذه النقاط حلقة الإضافية التي قد لا يتم استخدامها من قبل غيرها من الصكوك).
# تعريف MIDIDataID "MIDI '/ * chunkID لالقطعة MIDI البيانات * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة.
MIDIdata شار غير موقعة []؛ } MIDIDataChunk. الرقم هو دائما MIDI. chunkSize هو عدد وحدات البايت في قطعة، ناهيك عن 8 بايت المستخدمة من قبل ID وحقول الحجم ولا أي سادة بايت الممكن اللازمة لجعل قطعة حتى الحجم.
يحتوي الحقل MIDIData تيار من البيانات MIDI. ينبغي أن يكون هناك العديد من بايت كما يحدد chunkSize، بالإضافة إلى ربما بايت سادة إذا لزم الأمر.
والقطعة MIDI بيانات اختيارية. قد توجد أي عدد من هذه القطع في واحدة AIFF النموذج. إذا رسائل النظام MIDI الحصري لعدة الصكوك ليتم تخزينها في شكل AIFF، فمن الأفضل لاستخدام واحد القطعة MIDI البيانات في أداة واحدة كبيرة من الخبز MIDI البيانات لجميع الصكوك.
في تسجيل صوتي القطعة
في تسجيل صوتي القطعة يحتوي على معلومات وثيقة الصلة إلى أجهزة تسجيل الصوت.
"AESD" تعريف # AudioRecording ID / * chunkID لتسجيل صوتي القطعة. * /
الرموز المميزة ل typedef البنية { ID chunkID chunkSize فترة طويلة.
الحرف غير الموقعة AESChannelStatusData [24]. } AudioRecordingChunk. الرقم هو دائما AESD. chunkSize ينبغي أن يكون دائما 24 حيث لا توجد حقول طول متغير.
يتم تحديد ال 24 بايت من AESCChannelStatusData في "AES الممارسة الموصى بها لهندسة الصوت الرقمي - تنسيق نقل المسلسل لتمثيل خطي بيانات الصوت الرقمي"، ونقل الصوت الرقمي بين الأجهزة السمعية. يتم تكرار هذه المعلومات في القطعة تسجيل صوتي للراحة. من المصلحة العامة أن يكون بت 2 و 3 و 4 من بايت 0، التي تصف التركيز التسجيل.
في تسجيل صوتي القطعة اختيارية. لا يزيد عن 1 تسجيل صوتي القطعة قد تظهر في أحد AIFF النموذج.
والقطعة المحددة التطبيق
والقطعة المحددة التطبيق يمكن أن تستخدم لأية أغراض الإطلاق من قبل المطورين والمؤلفين التطبيق. على سبيل المثال، تطبيق التعديلات الأصوات قد ترغب في استخدام هذه قطعة لتخزين المعلمات دولة محرر مثل مستويات التكبير، موضع المؤشر الماضي، الخ
# تعريف ApplicationSpecificID 'APPL' / * chunkID لتطبيق القطعة محددة. * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة.
شار [4] applicationSignature. البيانات شار []؛ } ApplicationSpecificChunk. الرقم هو دائما APPL. chunkSize هو عدد وحدات البايت في قطعة، ناهيك عن 8 بايت المستخدمة من قبل ID وحقول الحجم ولا أي سادة بايت الممكن اللازمة لجعل قطعة حتى الحجم.
يستخدم مجال applicationSignature من قبل التطبيقات التي تعمل على منصات من شركة أبل للكمبيوتر، شركة لأبل II، يجب تعيين هذا المجال إلى 'pdos ". لماك، يجب تعيين هذا المجال إلى توقيع أربعة أحرف التطبيق كما هو مسجل مع أبل الدعم الفني.
مجال البيانات هي بيانات محددة إلى التطبيق. يحدد تطبيق عدد بايت يتم تخزين هنا، وما هي الغرض منها. يجب اتباع زائدة سادة بايت إذا ما هو مطلوب من أجل جعل قطعة حتى الحجم.
والقطعة المحددة تطبيق اختيارية. قد توجد أي عدد من هذه القطع في AIFF شكل واحد.
وتعليقات القطعة
يتم استخدام القطعة تعليقات لتخزين تعليقات في AIFF النموذج. معيار IFF ديه القطعة الشرح التي يمكن أن تستخدم أيضا للتعليق عليه، ولكن هذا تعليقات القطعة الجديدة لديها حقلين (لكل التعليق) غير موجودة في قطعة ستاندرد IFF. فهي-الطابع الزمني للتعليق وصلة لعلامة.
تعليق هيكل
ويتكون هيكل تعليق طابع الوقت، علامة الهوية، والعد نص متبوعا النص.
الرموز المميزة ل typedef البنية { الطابع الزمني طويل غير موقعة. MarkerID علامة. العد قصيرة غير موقعة. النص شار []؛ } تعليق. الطابع الزمني يشير عندما تم إنشاء التعليق. على أميغا، وحدات هي عدد الثواني منذ 1 يناير، 1978. على ماك، وحدات هي عدد الثواني منذ 1 يناير 1904.
يمكن ربط تعليق على علامة. هذا يسمح للتطبيقات لتخزين الأوصاف طويلة من علامات كتعليق. إذا كان التعليق هو اشارة الى علامة، ثم حقل علامة هو معرف من أن علامة. خلاف ذلك، علامة هي 0، مشيرا إلى أن هذا التعليق لا يرتبط بأي علامة.
العد هو طول النص الذي تشكل التعليق. هذا هو كمية 16-بت، مما يسمح تعليقات أطول بكثير مما ستكون متاحة مع pstring. لا يشمل هذا العدد أي سادة بايت الممكن اللازمة لجعل التعليق حتى عدد البايتات في الطول.
يحتوي حقل النص التعليق نفسها، تليها بايت سادة إذا لزم الأمر لجعل حقل النص حتى عدد من وحدات البايت.
تعليقات تنسيق القطعة
# تعريف CommentID "COMT '/ * chunkID للتعليقات القطعة * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة.
numComments قصيرة غير موقعة. تعليقات شار []؛ } CommentsChunk. الرقم هو دائما COMT. chunkSize هو عدد وحدات البايت في قطعة، ناهيك عن 8 بايت يستخدمها حقول الهوية والحجم.
يحتوي الحقل numComments عدد من الهياكل تعليق في قطعة. ويلي ذلك الهياكل تعليق، واحدا تلو الآخر. هياكل تعليق هي دائما الأرقام الزوجية من بايت في طول، لذلك ليس هناك حاجة إلى الحشو بين الهياكل.
وتعليقات القطعة اختيارية. قد تظهر لا يزيد عن 1 تعليقات القطعة في واحدة AIFF النموذج.
وقطع النص، اسم، المؤلف، حقوق الملكية، الشرح
يتم تضمين هذه أربعة أجزاء اختياري في تعريف كل ملف ستاندرد IFF.
# تعريف NameID 'اسم' / * chunkID لاسم القطعة * / # تعريف NameID "AUTH '/ * chunkID للمؤلف القطعة * / # تعريف NameID "(ج) '/ * chunkID لحقوق التأليف والنشر القطعة * / # تعريف NameID "ANNO '/ * chunkID لشرح القطعة * /
الرموز المميزة ل typedef البنية { ID chunkID. chunkSize فترة طويلة. النص شار []؛ } TextChunk. chunkSize هو عدد وحدات البايت في قطعة، ناهيك عن 8 بايت المستخدمة من قبل ID وحقول الحجم ولا أي سادة بايت الممكن اللازمة لجعل قطعة حتى الحجم.
قطعة الأسبقية
العديد من قطع المحلية لشكل AIFF قد تحتوي على معلومات مكررة. على سبيل المثال، تحدد القطعة صك نقاط حلقة، ويمكن تحديد بعض البيانات MIDI تصميم النظم السابق في القطعة MIDI البيانات أيضا نقطة الحلقة. ماذا يحدث إذا هذه النقاط حلقة مختلفة؟ كيف يتم تطبيق المفترض أن حلقة الصوت؟ يتم حل مثل هذه النزاعات عن طريق تحديد الأسبقية للقطع. ويتضح هذا الأسبقية أدناه.
القطعة المشتركة الأسبقية القصوى | سليمة القطعة البيانات | علامة القطعة | أداة الخبز | تعليق القطعة | اسم القطعة | الكاتب القطعة | حقوق التأليف والنشر القطعة | الشرح القطعة | تسجيل الصوت القطعة | القطعة MIDI البيانات | تطبيق معين القطعة أقل الأسبقية والقطعة الشائعة لها الأسبقية القصوى، في حين أن القطعة المحددة التطبيق لديه أدنى. المعلومات الواردة في القطعة الشائعة يأخذ دائما الأسبقية على معلومات متضاربة في أي قطعة أخرى. والقطعة المحددة التطبيق يفقد دائما في صراعات مع قطع أخرى. من خلال النظر في التسلسل الهرمي للقطعة، على سبيل المثال، واحد يرى أن النقاط حلقة في القطعة صك الأسبقية على نقاط حلقة متضاربة وجدت في القطعة MIDI البيانات.
وتقع على عاتق من التطبيقات التي إرسال البيانات إلى انخفاض قطع الأسبقية للتأكد من أن قطع أسبقية أعلى ويتم تحديث وفقا لذلك (أي، حتى أن الصراعات لا تميل إلى الوجود).
أخطاء مطبعية
يحدد تنسيق IIgs أبل عينات من صك أيضا قسما مع معرف "INST"، والتي ليست هي نفسها كما في القطعة AIFF الصك. وهناك طريقة جيدة لنقول للقطع باستثناء اثنين في عامة القراء على غرار IFF هي من خلال الحقول chunkSize. الحقل chunkSize على القطعة AIFF الصك هو دائما 20، في حين الحقل chunkSize في IIgs أبل عينات من صك صك تنسيق القطعة، وذلك لأسباب هيكلية، لا يمكن أبدا أن يكون 20.
تخزين AIFF على أبل والمنصات الأخرى
على ماكنتوش، AIFF النموذج، يتم تخزينها في تفرع البيانات من ملف الصوت IFF. نوع الملف ماكنتوش من ملف الصوت IFF هو 'AIFF. وهذا هو نفس formType من AIFF النموذج. يجب أن تطبيقات ماكنتوش تقم بتخزين أي معلومات في مفترق الموارد الملفات الصوتية IFF، كما قد لا يتم الاحتفاظ هذه المعلومات من قبل كافة التطبيقات. يمكن لتطبيقات استخدام القطعة المحددة التطبيق، الذي يعرف في وقت لاحق في هذه الوثيقة، لتخزين المعلومات إضافية محددة لتطبيقها.
ويمكن تحديد الملفات IFF الصوت في أنظمة الملفات أبل الأخرى كذلك. على ماكنتوش تحت MFS أو HFS، يتم تخزين AIFF النموذج في تفرع البيانات من ملف مع نوع ملف "AIFF." وهذا هو نفس formType من AIFF النموذج.
على نظام التشغيل مثل MS-DOS أو UNIX، حيث انه من المعتاد استخدام ملحق اسم الملف، فمن المستحسن أن أسماء الملفات الصوتية IFF استخدام ".AIF" للتمديد.
في اشارة الى الصوت IFF
الاسم الرسمي هو "تنسيق ملف الصوت تبادل". إذا تطبيق يحتاج إلى تقديم اسم هذا الشكل إلى مستخدم، كما هو الحال في "حفظ باسم ..." مربع الحوار، يمكن اختصار الاسم إلى الصوت IFF. في اشارة الى ملفات الصوت IFF التي كتبها اختصار من أربعة أحرف (أي، "AIFF") وينبغي تجنب على مستوى المستخدم.
تحويل البيانات الموسعة إلى وقت طويل غير موقعة
وأعرب عن مجال معدل العينة في القطعة الشائعة بوصفها 80 بت IEEE القياسي 754 نقطة عائمة رقم. هذا ليس شكل مفيد جدا لبرامج الكمبيوتر والأجهزة السمعية التي لا يمكن التعامل مباشرة مع هذه القيم النقطة العائمة. لهذا السبب، قد ترغب في استخدام ConvertFloat التالية () الإختراق لتحويل قيمة النقطة العائمة إلى وقت طويل غير موقعة. لا هذه الوظيفة لا يعالج القيم نقطة عائمة كبيرة جدا، ولكن بالتأكيد أكبر مما كنت تتوقع من أي وقت مضى معدل أخذ العينات النموذجية أن يكون. تفترض هذه الوظيفة أن ARG عازلة مرت هو مؤشر إلى مجموعة 10 بايت والذي يحتوي بالفعل على 80 بت قيمة النقطة العائمة. تقوم بإرجاع قيمة (أي معدل العينة في هيرتز) باعتبارها فترة طويلة غير موقعة. لاحظ أن الدالة FlipLong () هي فقط من الاستخدام لإنتل وحدة المعالجة المركزية التي لديك للتعامل مع كبير النظام Endian AIFF ل. إن لم يكن لتجميع وحدة المعالجة المركزية إنتل، التعليق الخروج INTEL_CPU تحديد.
# تعريف INTEL_CPU
#IFDEF INTEL_CPU / * *************************** FlipLong () ****************** ************ * تحويل طويلة في "الكبير Endian" شكل (أي موتورولا 68000) لشركة إنتل * شكل بايت عكس، أو العكس إذا أصلا في الكبير Endian. ************************************************** ******************* * /
باطلة FlipLong (الحرف غير الموقعة * PTR) { تسجيل غير موقعة شار فال.
/ * 1 مبادله وبايت 4 * / فال = * (PTR)؛ * (PTR) = * (PTR + 3)؛ * (PTR + 3) = فال.
/ * 2 مبادلة وحدات البايت 3 * / PTR + = 1؛ فال = * (PTR)؛ * (PTR) = * (PTR + 1)؛ * (PTR + 1) = فال. } #endif
/ * ************************* FetchLong () ******************** *********** * السفيه المترجم إلى جلب طويل من مجموعة شار. ************************************************** ******************* * /
غير موقعة FetchLong طويلة (غير موقعة طويلة * PTR) { العودة (* PTR)؛ }
/ * ************************* ConvertFloat () ******************** ********* * تحويل 80 بت IEEE القياسية رقم 754 نقطة العائمة إلى غير موقعة * منذ فترة طويلة. ************************************************** ******************** * /
ConvertFloat طويل غير موقعة (الحرف غير الموقعة * عازلة) { العشري طويل غير موقعة. تستمر طويلا غير موقعة = 0؛ غير موقع إكسب شار.
#IFDEF INTEL_CPU FlipLong ((غير موقعة طويلة *) (عازلة + 2))؛ #endif
العشري = FetchLong ((غير موقعة طويلة *) (عازلة + 2))؛ إكسب = 30 - * (عازلة + 1)؛ بينما (exp--) { الماضي = العشري. العشري >> = 1؛ } إذا (آخر و0x00000001) العشري ++؛ عودة (العشري)؛ } بالطبع، قد تحتاج روتين مكملة لاتخاذ معدل العينة باعتبارها فترة طويلة غير موقعة، ووضعها في منطقة عازلة تنسيقه كما أن 80 بت قيمة النقطة العائمة.
/ * ************************* StoreLong () ******************** ********** * السفيه المترجم إلى تخزين لفترة طويلة إلى صفيف شار. ************************************************** ****************** * /
باطلة StoreLong (فال طويل غير موقعة، غير موقعة * طويلة PTR) { * PTR = فال. }
/ * ************************** StoreFloat () ******************* *********** * تحويل لفترة طويلة غير موقعة إلى 80 بت IEEE القياسي 754 نقطة عائمة * رقم. ************************************************** ******************** * /
باطلة StoreFloat (غير موقعة تشار * العازلة، قيمة طويلة غير موقعة) { إكسب طويل غير موقعة. الحرف غير الموقعة ط.
memset (العازلة، 0، 10)؛
إكسب = القيمة؛ إكسب >> = 1؛ ل(ط = 0؛ ط <32؛ ط ++) {إكسب >> = 1؛ إذا (إكسب!) كسر. } * (عازلة + 1) = ط.
ل(ط = 32؛ الأول؛ i--) { إذا (القيمة و0x80000000) كسر. قيمة << = 1؛ } StoreLong (قيمة عازلة + 2)؛ #IFDEF INTEL_CPU FlipLong ((غير موقعة طويلة *) (عازلة + 2))؛ #endif} موضوع أخذ العينات
العديد من العينات MIDI تسمح تقسيم نطاق مذكرة MIDI إلى نطاقات أصغر (على سبيل المثال عن طريق أوكتافات) وتعيين الموجي مختلفة للعب على كل مجموعة. إذا أردت لتخزين كل تلك الموجات في ملف بيانات واحدة، ما كنت القيام به هو إنشاء قائمة IFF (أو ربما CAT إذا أردت تخزين أشكال أخرى من AIFF في ذلك) ومن ثم تضمين AIFF شكل جزءا لا يتجزأ لكل واحد من الطول الموجي. (أي كل الموجي سيكون في AIFF شكل منفصل، وجميع هذه AIFFs استمارة سيكون في ملف LIST واحد). انظر معلومات عن تنسيق ملف تبادل للحصول على تفاصيل حول القوائم. | |
|