رسم خطاب: الفم التلقائي للبرمجيات

اختتمت مقالة العام الماضي "نرسم الصوت" من خلال التعرف على: "هل من الممكن رسم الصوت من ورقة فارغة دون تتبع مخطط طيفي للتسجيل الصوتي؟ بصراحة ، لم أنجح ". لكنني علمت مؤخرًا عن SAM - الذي تم إصداره في عام 1982 من قبل Ask Ask Software ، وهو أول برنامج لتوليف الكلام على الكمبيوتر الشخصي تجاريًا. في منتصف -2000 ، أخذ المثمنون التجريبيون الألمانيان توبياس كورماخر وسيباستيان ماكي قائمة SAM مجمعة للكومودور 64 وحولوها إلى كود C غير قابل للقراءة ، ولكن قابل للتطبيق ؛ ثم في عام 2014 ، حاول البريطاني Vidar Hokstad إدخال رمز C في شكل قابل للقراءة - مع إعطاء المتغيرات أسماء ذات معنى واستبدالها يدويًاgotoعلى الحلقات والفروع. وأخيرًا ، في عام 2017 ، أعاد كريستيان شيفلر الألماني كتابة الرمز من C إلى JavaScript. يمكنك تجربته عمليًا كـ "صندوق أسود" على discordier.imtqy.com/sam .

في رأيي ، يعد مُركب الكلام جافا سكريبت البدائي هو النموذج التجريبي الأكثر ملاءمة لأولئك الذين يرغبون في فهم كيفية عمل تركيب الكلام بشكل عام. شوكة SAM الخاصة بي مع رمز وتعليقات نظيفة بشكل كبير متاحة على github.com/tyomitch/sam . لسوء الحظ ، تمكن المؤلفون السابقون من تلاشي الاهتمام بـ SAM ، وهم الآن ليسوا على مستوى مهمة تحليل طلب السحب لمشروع هواية منذ سنوات عديدة.

يتكون SAM من أربعة مكونات وظيفية:

  1. يقوم المُترجم بترجمة النص الإنجليزي إلى تسجيل صوتي: على سبيل المثال ، "A LITTLE TOO LOW" (مثال من البرنامج التجريبي المرتبط بـ SAM ) يتحول إلى "AH LIHTUL TUW5 LOW".
  2. يحوّل المحلل اللغوي سجلًا صوتيًا إلى صوتي: من "AH LIHTUL TUW5 LOW" يتضح " AH, ,L,IH,DX,AX,LX, ,T,*,*,UX,WX, ,L,OW,WX". لكل خلفية معروضة ، يقوم المحلل اللغوي أيضًا بتعيين المدة والنغمة.
  3. يقوم Renderer ببناء مجموعة من الترددات والسعات والخصائص الصوتية الأخرى من التسجيل الصوتي ؛
  4. المكون الأخير (الوظيفة ProcessFrames) المجهول يحول مجموعة من الترددات والسعات إلى دفق PCM لإخراج الصوت.

في هذه المقالة ، سأقوم بتحليل جميع المكونات الأربعة بدورها.

القارئ


تم إرفاق القارئ بـ SAM كبرنامج منفصل: ذكر المبدعون أن قواعد نطق القارئ 469 المنصوص عليها في القارئ تنسخ حوالي 90 ٪ من الكلمات الإنجليزية بشكل صحيح. وهذا يعني أن نسخ كل كلمة من الكلمات العاشرة يحتاج إلى تحرير يدوي قبل إرساله إلى مدخلات المكونات التالية.

تستخدم SAM نظام النسخ الخاص بها ، حيث يتم الإشارة إلى الصوتيات الإنجليزية بأحرف منفصلة من مجموعة [A-Z/]أو في أزواج من اثنين من هذه الأحرف:
صوتتعيينصوتتعيينصوتتعيينصوتتعيين
/ ب /B/ ص /P/ الخامس /V/ F /F
/ د /D/ ر /T/ ض /Z/ س /S
/ د /J/ tʃ /CH/ ʒ /ZH/ ʃ /SH
/ ز /G/ ك /K/ ح //H/ د /DH
/ م /M/ ن /N/ ن /NX/ θ /TH
/ لتر /L/ ص /R/ ي /Y/ ث /W
/ و /AE/ ɛ /EH/ ɪ /IH/ أنا /IY
/ ʌ /AH/ ɔ /AO/ ʊ /UH/ ش /UX
/ ɒ /OH/ ɑ /AA/ ə /AX/ ɜ /ER
/ eɪ /EY/ aɪ /AY/ ɔɪ /OY/ aʊ /AW
/ س / /OW[l̩]UL[م]UM[ن]UN
بالإضافة إلى الصوتيات ، يتم استخدام الأرقام من 1 إلى 8 في نسخ SAM للإشارة إلى الإجهاد والنغمة : 1 تعني الإجهاد "العاطفي للغاية" ، 4 تعني الإجهاد الطبيعي ، 6 تعني نغمة محايدة ، 8 تعني "انخفاض شديد في النغمة".

يتم ترتيب القارئ بكل بساطة: يتم تطبيق القواعد الحساسة للسياق من القائمة بالتناوب على سطر الإدخال ، على سبيل المثال ، القاعدة " (IR)#=AYR" تستبدل النص ⟨ir⟩ قبل الحرف المتحرك بـ / aɪr /؛ .(S) =Zتستبدل القاعدة " " ⟨s⟩ بين الساكن المعبر عنه والمسافة (نهاية الكلمة) بـ / z /؛ (U)^^=AH5تستبدل القاعدة " " ⟨u⟩ قبل حرفين ساكنين متتاليين بـ / ʌ / ، وتجعل المقاطع مضغوطة. من المهم أن نلاحظ أنه في العديد من الكلمات ، لا يقرأ Reciter أي حرف متحرك ، وفي بعض الحالات يلاحظ العديد من حروف العلة في وقت واحد: على سبيل المثال ،تتحول كلمة "استفزاز" إلى "PRUW4VOW5KIHNX"، أي / ˈpruˈvoʊkɪŋ /. سيلاحظ القارئ اليقظ أن الإجهاد غير الضروري ليس الخطأ الوحيد في هذا النسخ.

لقد قررت أن النسخ هو الجزء الأقل إثارة للاهتمام من مُركِّب الكلام ؛ وبالنظر إلى الجودة المنخفضة نسبيًا للنسخ في إخراج المقرئ ، فقد قررت هناك العديد من خدمات الإنترنت المتاحة مجانًا لنسخ مقتطفات من النصوص الإنجليزية ؛ بدلاً من القواعد الإرشادية ، تستخدم هذه الخدمات قواميس كبيرة إلى حد ما. في تجربتي ، أفضل جودة للنسخ هي tophonetics.com و photransedit.com؛ في الوقت نفسه، والثانية لديها عدد من العيوب: يستخدم التدوين صوت قياسي ليس تماما، الملاحظات تؤكد حتى في الكلمات أحادي، وما هو أكثر غير مريح - هو مكتوب في ASP.NET وتتطلب القيم الصحيحة في طلبات الوظائف __VIEWSTATEو __EVENTVALIDATION، مما يعقد استخدامه من طرف ثالث مواقع. لذلك ، في عرضي لجهاز SAM والتشغيل ، المتاح على tyomitch.imtqy.com ، استخدمت التحويل الصوتي من خلال https://cors-anywhere.herokuapp.com/https://tophonetics.com/

محلل


على عكس Reciter ، التي يطلق عليها منشئو SAM ، تم إعطاء مكونات Parser و Renderer أسماء من قبل المهندسين العكسيين الألمان ، لذلك لا تعكس هذه الأسماء بدقة الغرض من هذه المكونات.

لدى المحلل اللغوي ثلاث مهام رئيسية:

  1. «» (, ) . ( ) «-» UL, UM, UN, [l̩, m̩, n̩]. , /əl, əm, ən/; Parser , AXL, AXM, AXN .
  2. , .. . «AH LIHTUL TUW LOW» , /t/ [ɾ] (DX) [t] (T,*,*) . ( .) , /l/ [ɫ] (LX) , [l] (L) .
  3. .

تدعم SAM 81 خلفية ، 61 منها لها أسماء ويمكن استخدامها في التسجيلات الصوتية لـ "خداع" المحلل اللغوي وتعيين الصوت المطلوب على الفور. الخلفيات 20 المتبقية هي بلا اسم ؛ يمكن أن تظهر 18 منهم فقط نتيجة لعمل المحلل اللغوي ، ولا يمكن أن تظهر الخلفيات ذات الرموز 46 و 47 بأي شكل من الأشكال ، وربما لا تزال غير محددة من خلال الإشراف على مطوري SAM

الخلفيات مع الرموز 0-4 ( .?,-) تتوافق مع الصمت ؛ ويتلخص الباقي في الجدول التالي:
الرمزتعيينصوتالرمزتعيينصوت
5IY[أنا]42CH[ر] في التكوين / tʃ /
6IH[ɪ]43*[ʃ] كجزء من / tʃ /
7EH[ɛ]44J[د] في تكوين / د /
8AE[و]45*[ʒ] من / dʒ /
9AA[ɑ]48EY~ [ɜ] in / eɪ /
10AH[ʌ]49AY~ [ɑ] in / aɪ /
أحد عشرAO[ɔ]خمسونOY[ɔ] من / ɔɪ /
12UH[ʊ]51AW[ɑ] في / aʊ /
ثلاثة عشرAX[ə]52OW[ɔ] كجزء من / oʊ /
14IXأقصر [ɪ]53UW~ [ش]
خمسة عشرER[ɜ]54B[ب]
السادس عشرUX[ش]55*
17OH[س]56*
الثامنة عشرRX[ɹ]57D[د]
تسعة عشرLX[ɫ]58*
عشرونWXقصيرة [ʊ] في الإدغامات59*
21YXقصيرة [ɪ] في الإدغامات60G[غʲ]
22WHأطول [ث]61*
23R[ɹ̠]62*
24L[ل]63GX[ز]
25W[ث]64*
26Y[ي]65*
27M[م]66P[ص]
28N[ن]67*
التاسع والعشرونNX[ن]68*
ثلاثونDX[ɾ]69T[ر]
31Q[ʔ]70*
32S[س]71*
33SH[ʃ]72K[ك]
34F[F]73*
35TH[θ]74*
36/H[ç]75KX[ك]
37/X[ح]76*
38Z[ض]77*
39ZH[ʒ]78UL[l̩]
40V[الخامس]79UM[م]
41DH[د]80UN[ن]

تتكون الإجراءات التي يقوم بها المحلل اللغوي من سبع خطوات:

  1. تحليل نفسها: يتم تشكيل قائمة برموز الخلفية وقائمة متوازية من النغمات المعطاة بالأرقام في سطر الإدخال على خط الإدخال.
  2. تطبيق مجموعة من عشرين قاعدة على قائمة الخلفيات: على سبيل المثال ، الاستبدالات / t / + / r / → [tʃ] + [ɹ̠] و / k / + / حرف متحرك غير أمامي / → [k] + [حرف متحرك]. (/ k / أمام حروف العلة الأمامية تبقى كما هي وتطابق الخلفية [kʲ].)
  3. CopyStress: تمتد نغمة الحروف المتحركة المجهدة إلى الحروف الساكنة التي تسبقها.
  4. SetPhonemeLength: يتم استبدال المدة لكل خلفية (في "إطارات" شرطية). يتم استخدام جدولين لخط الطول في الخلفية - أحدهما للمقاطع المجهدة والآخر للمقاطع غير المضغوطة.
  5. AdjustLengths: يطبق مجموعة من سبع قواعد لضبط مدد الخلفية. على سبيل المثال ، تطول أحرف العلة قبل الحروف الساكنة الصوتية مرة ونصف مرة ، ويتم تقليل الحروف الساكنة المتتالية إلى النصف.
  6. ProlongPlosiveStopConsonants: الحروف الساكنة المتفجرة أمام حروف العلة ، تنقسم الحروف الساكنة السلسة والحيوية إلى ثلاثة أضعاف الخلفيات. تتوافق الخلفية الأولى في الثلاثة مع شدة أقل للصوت ، والثانية إلى شدة كاملة ، والثالثة للصمت.
  7. InsertBreath: العبارة مقسمة .?,-إلى "زفير" بخلفيات "صامتة" ( ) تصل إلى 232 إطارًا (حوالي 2½ ثانية). في تطبيق SAM لأجهزة الكمبيوتر الرجعية ، كان هذا القسم ضروريًا لتوفير الذاكرة ؛ في إصدار جافا سكريبت لا معنى له ، وفي شوكي يتم حذفه.

يخرج المحلل ثلاث قوائم متوازية: رموز الخلفية ونغماتها ومدتها.

العارض


هذا المكون مسؤول عن تركيب الكلام بالمعنى الضيق للكلمة. عند الإدخال ، يتلقى قائمة من الخلفيات بنغمات ومدد محددة ، بالإضافة إلى المعلمات التي تؤثر على الصوت المركب. عند الإخراج ، تنتج ثماني قوائم متوازية: ترددات الصيغ F 1 –F 3 ، شدتها (السعات) ، التردد الرئيسي F 0 (نغمة الصوت) ، والقيم sampledConsonant، التي سيتم وصفها بمزيد من التفصيل أدناه.

بالإشارة إلى تعليمات SAM ، يتم توفير الأمثلة التالية لقيم المعلمات الصوتية:
تصويتسرعةملعب كورة قدمحلقفم
قزم7264110160
الروبوت الصغير9260190190
رجل محشو8272110105
السيدة العجوز الصغيرة8232145145
خارج الأرض10064150200
SAM7264128128
دلك120100100200
تجدر الإشارة إلى أنه لا يتم استخدام معلمة السرعة في Renderer ، ولكن بالفعل في مرحلة إنشاء الصوت: تعتمد مدة الصوت الذي يتم إنشاؤه لإطار واحد على هذه المعلمة. بالإضافة إلى معلمة السرعة ، تعتمد مدة الإطار أيضًا على نوع الصوت ، كما هو موضح أدناه.

ويستند توليف الكلام المتشكل على حقيقة أن كل خلفية مرتبطة بترددات واتساع الصيغ القليلة الأولى. لتجميع حروف العلة ، استخدام اثنين من الصيغ يكفي - على سبيل المثال ، رسم بياني لترددات التكوين النموذجية لأحرف العلة الإنجليزية المأخوذة من موقع جامعة مانيتوبا :


لتجميع الحروف الساكنة ، هناك حاجة إلى صيغ إضافية. علاوة على ذلك ، كما ذكرت في مقالة العام الماضي ، تتميز الحروف الساكنة الصاخبة بـ "انفجارات" في نطاق تردد واسع:



لا يمكن الحصول على هذه "الاندفاعات" عن طريق توليف شكل نقي ، وبالتالي فإن SAM تعيد إصدار أصوات الحروف الساكنة الصاخبة من جدول العينة. sampledConsonantتحدد القيم المذكورة أعلاه جزءًا من الجدول المقابل للساكن الساكن الصاخب.

تتكون الإجراءات التي يقوم بها Renderer من خمس خطوات:

  1. SetMouthThroat: بالنسبة للخلفيات المتحركة والخلفيات الصوتية (الرموز 5-29 و 48-53) ، يتم ضرب القيم المجدولة للترددات F 1 و F 2 في المعلمات الفم والحلق ، على التوالي.
  2. CreateFrames: . , (1–8) Pitch (1 → −32, 6 → 0, 8 → +12). , ( 30 ) , .
  3. CreateTransitions: F0–F3 F1–F3 . , , .
  4. F0 F1, «pitch contour», .
  5. , () , PCM.


من وجهة نظر مادية ، فإن الكلام عبارة عن قطار نبضي جلدي تم إنشاؤه بواسطة الحبال الصوتية (انظر الشكل.) ، والذي يمر على طول الطريق من خلال الفم والأنف ( مسار الكلام ) ، وتضخم تلك مثل الرنان التوافقيات المعينة في موجة الحنجرة. تردد الموجة الحنجرية - هذا هو التردد الرئيسي للصوت F 0 . كقاعدة ، تتراوح قيمها بين 100 و 400 هرتز: أقل للرجال ، أعلى للنساء ، حتى أعلى للأطفال. النموذج الصوتي المستخدم في تركيب التركيب هو أن العديد من مرشحات تمرير النطاق يتم تطبيقها على موجة الحنجرة ، كل منها يميز شكل واحد. يعتمد عرض النطاق المخصص على تواتر المُشكل ، ووفقًا للبيانات التجريبية ، يصل إلى 200 هرتز: في عرض SAM الخاص بي على tyomitch.imtqy.com







يتم استخدام هذا النهج: مع القيمة الافتراضية للمعلمة عرض النطاق الترددي = 3 ، يقدم كل مُشكِّل التوافقيات F 0 في الإشارة الصوتية الناتجة ضمن ± 5.9٪ من تردد المُشكل. يتوافق هذا تقريبًا مع الرسوم البيانية أعلاه: يخصص المُشكل بتردد 3 كيلوهرتز عرض نطاق يبلغ 177 هرتز. في تطبيق SAM الكلاسيكي ، تم الاقتراب من توليد العدد المطلوب من التوافقيات بشكل أكثر إبداعًا: لكل مولد شكل واحد ، ولكن يتم طور هذه الموجة بتردد F 0 . في العرض التوضيحي الخاص بي ، يمكنك التبديل إلى الوضع الذي يقوم بتجميع موجة واحدة لكل مركب (ولكن بدون صفر المرحلة) عن طريق إلغاء تحديد معلمة الملعب.

تعمل وظيفة ProcessFramesSAM الكلاسيكية على معالجة الصم والأصوات الصوتية الصاخبة بشكل منفصل عن جميع الخلفيات الأخرى:

  • . , Speed. ([s]) 105 , ([p] [t]) — 10.4 .
  • Speed16250PCM-, : () F1 F2, ( ) F3. , Speed=72 10.6 .
  • , , 34Speed16250PCM-, . , Speed . , Pitch=64, 1.6 , .. 9.5 .

بالنسبة للحروف الساكنة الصاخبة ، يتم استخدام خمسة جداول عينات: واحدة للحويصلات السنوية ([t ، s ، z]) ، واحدة للحجرة السنخية ([ʃ ، ʒ]) ، واحدة للشفوية والأسنان ([p ، f ، v ، θ ، ð ]) ، وواحد لـ [ç] و [h]. تختلف العينات المتعلقة بنفس الجدول عن بعضها البعض فقط من حيث المدة والكثافة.

في العرض التوضيحي الخاص بي ، من أجل البساطة ، يتم إنشاء صوت متساوي المدة لجميع الإطارات ، وتعتمد هذه المدة فقط على معلمة السرعة: مع قيمته الافتراضية ، يتوافق إطار واحد مع 10.4 مللي ثانية من الصوت. كما تظهر التجارب ، يتوافق هذا "في المتوسط" مع SAM الكلاسيكي ، على الرغم من أنه فيما يتعلق به ، يمكن للأصوات الفردية في العبارة المركبة "التحرك" لوحدات MS إلى الأمام أو الخلف.

في الختام ، سأعرض ثلاثة مخططات طيفية من عبارة الترحيب التي تم إنشاؤها بواسطة مولد الصوت SAM التقليدي ومولد الصوت الخاص بي مع تشغيل وإيقاف تشغيل النغمة:



كما ترى ، يؤدي إيقاف تشغيل توليف النغمة إلى التوصل إلى حل وسط بين جودة الصوت ورؤية الصيغ على مخطط الطيف.

All Articles