March 24, 2021

เล่นเสียงเรียกเข้ากำหนดเองได้ ขณะมีสายเรียกเข้า LINE (Android)

ปรับปรุงล่าสุด: 25/3/64

ปฏิเสธความรับผิดชอบ:

  • ผู้เขียนไม่ได้มีเจตนาในการ/ส่งเสริมให้ผู้อื่น ทำผิดกฏหมายหรือละเมิดลิขสิทธิ์แต่อย่างใด
  • ผู้เขียนไม่ได้มีเจตนายับยั้งการส่งเสริมทางธุรกิจที่ถูกต้องตามกฏหมาย
  • ผู้เขียนไม่ได้มีเจตนาโน้มน้าวให้ลดการอุดหนุน/สนับสนุน ศิลปิน/ผู้สร้างสรรค์
  • ผู้เขียนขอไม่รับผิดชอบหากเกิดความผิดพลาดใด ๆ ในทุกระดับความร้ายแรง ซึ่งมีสาเหตุมาจากสาเหตุมาจาก Macro ของผู้เขียน, ความผิดพลาดของแอปฯ/อุปกรณ์, หรือมาจากการใช้งานที่ผิดวิธี/นอกจุดประสงค์ของผู้ใช้

เกริ่นนำ

สวัสดีครับ วันนี้ผมจะมาเสนอวิธีที่จะทำให้สามารถเล่นเสียงเรียกเข้ากำหนดเองขณะมีสายเรียกเข้า LINE ได้ (ผมไม่ได้ใช้ iOS ครับ เลยนำเสนอแค่ของ Android ไปก่อน)

แต่ขอเกริ่นก่อนนะครับ ว่าคนไทยส่วนใหญ่จะใช้แอป Messenger (Facebook) กับ LINE เป็นส่วนใหญ่ครับ และสิ่งหนึ่งที่แต่ละคนอาจไม่ได้คิดหรือเคยคิดอยู่ก็คือ "ไม่ค่อยมีอิสระในการตั้ง Ringtone" ผมหมายถึงว่า Ringtone ใน LINE ตั้งได้แค่ 2 อย่างครับ: เสียงฟรีซึ่งเป็นของไลน์ กับ เสียงเสียตังซึ่งเป็นของศิลปินที่เป็นที่รู้จัก (อยู่ใน LINE Melody Shop)

แล้วคร่าวนี้ ถ้าผมจะเอาเพลงที่ไม่มีใน LINE Melody Shop ล่ะ เช่นเพลงอนุสรณ์รุ่นโรงเรียนแห่งหนึ่งล่ะ (โรงเรียนบดินทรฯ ๒) อย่างเพลง "สถานีปลายทาง" ของรุ่นผมเอง (ANUSORN26)

คือต้องบอกก่อนนะครับว่าบริษัทเจ้าของแอป LINE คงมีแนวคิดการหาเงินจากการผูกขาดนี้แหละครับ คล้าย ๆ กับ Sticker ทว่าถ้าเป็น Sticker ที่เสียเงิน บางคนก็จะใช้วิธีการจับภาพหน้าจอเอา หรือไม่ก็หาภาพอื่น ๆ มาแชทกันแทนได้ (ภาพมีอีกเยอะ แต่อุดหนุนร้าน Sticker หน่อยก็ดีนะ)

แต่ถ้าเป็นเสียงเรียกเข้าล่ะครับ ถ้าสมมุติว่าผมไม่มีเงินจะซึ้อ เพราะต้องเก็บเงินไปทำห้องอัดเพลง ก็ขอให้ผมเอาเพลงซึ่งอย่างน้อยเป็นเพลงที่แต่งเองอัดเองก็ยังดีครับ

ผมเลยเริ่มคิดอะไรออก เพราะว่าตอนนั้น ตอนประมาณใกล้ ๆ ก่อนปัจฉิมนิเทศ ม.6 ผมรอคอยเพลงรุ่นมานานมาก และพอได้ฟังก็อยากตั้งเป็น Ringtone เลย (ตอนที่มีใครโทรมาก็จะได้นึกถึงเพื่อนและความทรงจำในช่วงนั้น) เลยเริ่มลงมือทำ Ringtone แล้วนำไปตั้งค่าตั้งแต่ตัวเสียง Ringtone ทั่วไปในเมนูการตั้งค่า, Messenger, แล้วก็... ใช่ครับ LINE นี้แหละครับ (แม้จะไม่ค่อยมีใครโทรในนี้ก็ตามเถอะครับ55) แต่ทว่ามันตั้งเสียงของเราเองไม่ได้นิหนา

แต่ก็นึกออกว่าผมได้ติดตั้งแอปตัวหนึ่งไว้อยู่ ใช่ครับ ต้องขอบใจ Macrodroid ซึ่งเป็นแอปประเภท Device Automation (การทำงานอัตโนมัติของอุปกรณ์) ครับ ซึ่งแอปประเภทนี้สามารถทำงานแทนเราได้ในบางอย่างตามเงือนไขและกระบวนการที่เราสั่งได้ครับ (เช่น ทุก ๆ 1 ชั่วโมง ให้ดึงข้อมูลแบบ HTTP GET แล้วส่งเสียงอ่านข้อความจากข้อมูลดังกล่าวออกมา เช่น ข้อมูลสภาพอากาศ)

ทำให้จากเดิมที่คิดว่าต้องเขียนแอปเอง หรือทำการ Root เครื่อง เพื่อบรรลุสิ่งที่ผมจะทำดังกล่าว ก็กลายเป็นว่าแค่ใช้แอปนี้โดยไม่ต้อง Root เครื่องก็สามารถทำได้แล้วครับ ซึ่งผมไม่แน่ใจว่าแอป Device Automation ใน iOS จะทำแบบนี้ได้ไหมและได้ในระดับใด

ก่อนอื่นมาพูดถึงความสามารถของ Device Automation ที่ผมจะใช้กันก่อนครับ:

  • การเข้าถึงการแจ้งเตือน (ต้องสามารถสั่ง Macro ตามการแจ้งเตือนใหม่ที่เกิดขึ้นได้ ซึ่งเรียกว่า "สามารถตั้งเป็น Trigger")
  • ตั้งตัวแปร
  • วนลูปและตรวจสอบเงื่อนไขแบบ if-else ระหว่างการทำงานของ Macro ได้
  • ตั้งช่องเสียง (audio stream) สำหรับเล่นเสียงเรียกเข้า (หากไม่มีก็ไม่สามารถปิดเสียงเรียกเข้าใน LINE ได้ ซึ่งอาจจะไม่จำเป็นแต่แนะนำให้มี; หรือในบางระบบหากไม่มีอาจทำให้ไม่สามารถเล่นทับเสียงเรียกเข้าใน LINE ได้ เพราะไม่ได้อยู่ในช่องเสียงที่ถูกต้อง)
  • เล่นเสียงผ่าน API ระบบปฏิบัติการ (หรือ API ของแอปอื่นที่ใช้แทนได้) (โดยที่ต้องไม่ถูกปิดเสียงเมื่อมีช่องเสียง Ringtone ดังขึ้น ทั้งนี้เมื่อเล่นเสียงผ่านช่องเสียงที่เหมาะสม เช่น Ringtone/Alarm stream)
  • ปรับระดับเสียงได้ (ในกรณีต้องการปิดเสียงเรียกเข้าใน LINE)

ดังนั้น หากแอป Device Automation ใดมีความสามารถดังกล่าวและสามารถนำความสามารถนั้นไปใช้กับ Smartphone ของท่านได้ ก็คือว่าแอปนั้นสามารถเขียนโค้ดเพื่อบรรลุสิ่งที่ผมจะทำได้เลย แค่อาจจะไม่มีโค้ดสำหรับแอปนั้น ๆ (ผมคิดว่าแอป Device Automation ของฝั่ง iOS น่าจะทำได้นะครับ อาจจะไม่ต้อง Jailbreak อันนี้ไม่แน่ใจครับ)

เอาล่ะหากใครมี Android Smartphone ก็ลุยเลยครับ

วิธีทำ

หมายเหตุ: วิธีข้างล่างอิงจาก Macrodroid version 5.10.2 และผ่านการทดสอบบน Smartphone Android version 8.1.0 และ LINE version 14.4.1

  1. ติดตั้งแอป Macrodroid (แอปอื่นก็ได้แหละครับ แต่มันจะใช้โค้ดที่ผมทำไม่ได้ ต้องเขียนเองใหม่ ซึ่งผมไม่ครอบคลุมครับ)
  2. เปิด Notification Access ให้กับแอป Macrodroid
  3. Download Macro version ล่าสุด ของผม ชื่อประมาณ "ReplaceLineRingtone_v.X_(Thai).macro" (หรืออีกขื่อแต่ไม่มีคำว่า "(Thai)" หากตั้งภาษาแอป LINE เป็นภาษาอังกฤษ, แต่ทั้งนี้สามารถติดตั้งทั้งสองตัวลงไปได้) ลงใน Smartphone (หรือจะ Download ที่ Macrodroid Store ได้ครับ)
  4. เปิด Macrodroid: หน้า Home > Export/Import
  5. ในส่วนของ Import: เลือก Storage แล้วไปเลือกไฟล์ที่ Download มา
  6. เข้าไปในหน้า Macros > Macro ที่ติดตั้งใหม่
  7. อ่านคำอธิบาย Macro และตั้งค่า Ringtone และระยะเวลา Ringtone
เรียบร้อยแล้วครับ อาจจะลองให้ใครโทรมาเพื่อทดสอบได้ โดยผมแนะนำให้ทดสอบหลายแบบต่อไปนี้ (ทั้งโทรปกติ, โทรแบบ Video) โดยต้องตั้งโหมดเสียงก่อน
  • ปล่อยให้ปลายสายโทรมา แล้ววางสายไปเอง
  • ให้ปลายสายโทรมา แล้ววางสาย
  • ให้ปลายสายโทรมา แล้วรับสาย
โดยในทุกกรณี เสียงเรียกเข้าที่เราตั้งเองจะต้องดังขี้นประมาณไม่เกิน 1 วินาทีหลังจากที่เสียง LINE ดัง (ต้องฟังดี ๆ เพราะเสียงเรียกเข้าของเราอาจกลบเสียงเรียกเข้าใน LINE; หากไม่ได้ตั้งปิดเสียงเรียกเข้าใน LINE) หรือหลังจากที่หน้าจอสว่างขึ้น และเสียงเรียกเข้าจะต้องดับลงเมื่อมีการกดปุ่มวางหรือรับสายหรือสายดับไปเอง โดยเมื่อกดรับสายจะต้องได้ยินเสียงปลายสายด้วย

การแก้ไขปัญหา

หากมีปัญหา (เช่น ไม่มีเสียงที่กำหนดไว้, เสียงเล่นช้ากว่าเสียงใน LINE มากกว่า 1 วินาที) แล้วมั่นใจว่าทำตามวิธีถูกต้องทุกประการ ลองทำตามข้างล่างนะครับ (เรียงตามความน่าจะเป็น มากไปน้อย):
หมายเหตุ: หากใช้ Android version <8.1.0 (ซึ่งเป็นรุ่นที่ผมเคยใช้ทดสอบผ่าน หมายความว่ารุ่นที่เท่ากับหรือมากกว่ารุ่นนี้ควรจะสามารถใช้งานได้) และเป็น version ที่เลขรุ่นต่ำมาก ๆ อาจไม่สามารถใช้งานได้

ไม่มีเสียงที่เรากำหนดไว้

  • ลองอัปเดต version Macro ตามลิงก์ข้างบน และลองอัปเดต LINE และ Macrodroid เป็นรุ่นล่าสุดอีกครั้ง
  • ใช้พื้นที่ภายใน Smartphone (หากมี) แทน SD card ในการเก็บตัวแอป Macrodroid แล้วเปิด Notification Access ให้กับแอป Macrodroid อีกครั้ง
  • ลองสำรวจการตั้งค่าเกี่ยวกับการประหยัดพลังงานแบตเตอรี่ ว่ามีเมนูไหนที่เกี่ยวข้องกับการพักแอปไม่ให้ทำงานในพื้นหลัง (Background Process) หรือมีเมนูไหนที่เกี่ยวข้องกับการสั่งปิดแอป (เช่น App Killer, Task Manager) แล้วอนุญาตแอป Macrodroid
  • (Android 5 ขึ้นไป) ยกเว้นแอป Macrodroid ในรายการของ Battery Optimization (รู้จักกันในอีกชื่อคือ Android Doze) ซึ่งสามารถทำได้ในหน้าแอป Settings > Ignore Battery Optimization
  • หากได้ปรับใช้การตั้งค่า Macro ที่ตั้งไว้เพื่อปิดเสียงเรียกเข้าใน LINE ให้ย้อนการตั้งค่าดังกล่าว (หรือสามารถทำได้โดยการลบ Macro เดิมทิ้งแล้วติดตั้งใหม่ ซึ่งจะได้การตั้งค่าเริ่มต้น)
  • ตรวจสอบว่าได้ปิดการแจ้งเตือนเกี่ยวกับการโทรของแอป LINE หรือไม่
เสียงเล่นช้ากว่าเสียงใน LINE มากกว่า 1 วินาที
  • (Android 5 ขึ้นไป) ยกเว้นแอป Macrodroid ในรายการของ Battery Optimization (รู้จักกันในอีกชื่อคือ Android Doze) ซึ่งสามารถทำได้ในหน้าแอป Settings > Ignore Battery Optimization
  • ลองสำรวจการตั้งค่าเกี่ยวกับ Background Process (ไม่ได้หมายถึงตัว App Killer นะครับ หมายถึง System Component ที่มีหน้าที่ในการพักการทำงานของแอปชั่วคราวแต่ไม่ได้สั่งปิด เช่น Android Doze) แล้วอนุญาตแอป Macrodroid
หากยังมีปัญหาอยู่ อาจเป็นเพราะมีการเปลี่ยนแปลงของแอป LINE หรืออื่น ๆ ซึ่งสามารถแจ้งได้ที่ FB page "NP-chaonay Production" หรือ nuttapongpunpipat@gmail.com ครับ

March 18, 2021

สมุดมิตรภาพ V.2 เผยแพร่แล้ว!

ให้สำหรับ:

  • สำหรับเพื่อนสมัยประถมของเราลงมา+เพื่อนโรงเรียนฉัตรวิทยา (ไม่จำกัดเฉพาะรุ่นของผม)
  • สำหรับเพื่อนสมัยมัธยมของเราขึ้นไป+เพื่อนโรงเรียนบดินทรเดชา (สิงห์ สิงหเสนี) ๒ (ไม่จำกัดเฉพาะรุ่นของผม)
บันทึกความทรงจำร่วมกับผมได้ที่แบบฟอร์มกูเกิล :)