Runtime v2.81 · อัปเดต 30 ก.ย. 2569

Audio

ค่าเสียงแบบอ่านอย่างเดียวสำหรับตรวจจับเสียงในแอปหรือเกม ใช้ Audio(name) เพื่อโหลดตัวอย่างที่บันทึกไว้ หรือ Audio.recent(duration_ms) เพื่อคัดลอกเสียงที่เพิ่งจับมา การจับและจับคู่เสียงทำบนอุปกรณ์ โดยไม่อัปโหลดบัฟเฟอร์การฟังต่อเนื่องและไม่ให้สคริปต์เข้าถึงข้อมูลเสียงดิบ (PCM)

รูปแบบคำสั่ง

Audio(name)

พารามิเตอร์สำหรับสร้างออบเจ็กต์

ชื่อคำอธิบาย
nameString
ต้องระบุชื่อตัวอย่างที่สร้างในตัวจัดการเทมเพลตของมาโครนี้ ชื่อต้องไม่ว่างและไม่ใช่พาธไฟล์ โหลดตัวอย่างทันที รวมถึงตัวอย่างที่กู้คืนหรืออยู่ในแพ็กเกจที่ป้องกันด้วยการเข้ารหัส หากตัวอย่างหายหรือเสียหายจะรายงานข้อผิดพลาด Backup/Store บันทึกต้นทางที่เลือกและตัวอย่างพร้อมมาโคร รองรับ WAV แบบ PCM16 โมโน 48 kHz สูงสุด 32 ตัวอย่าง ตัวอย่างละไม่เกิน 10 วินาที และข้อมูล WAV รวมไม่เกิน 4 MiB
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น

ค่าที่ส่งกลับ

Audio

พฤติกรรม / ผลข้างเคียง

ค่าเสียงแบบอ่านอย่างเดียวสำหรับตรวจจับเสียงในแอปหรือเกม ใช้ Audio(name) เพื่อโหลดตัวอย่างที่บันทึกไว้ หรือ Audio.recent(duration_ms) เพื่อคัดลอกเสียงที่เพิ่งจับมา การจับและจับคู่เสียงทำบนอุปกรณ์ โดยไม่อัปโหลดบัฟเฟอร์การฟังต่อเนื่องและไม่ให้สคริปต์เข้าถึงข้อมูลเสียงดิบ (PCM)

การทำงาน

  • รอให้เสร็จ: ขึ้นอยู่กับเงื่อนไข
  • ความปลอดภัยเมื่อทำงานพร้อมกัน: ไม่รับประกัน
  • การทำงานแบบขนาน: ขึ้นอยู่กับเงื่อนไข

ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์

ตัวอย่าง

# ตรวจจับตัวอย่างเสียงในเครื่องหลังเริ่มฟัง
sample = Audio("alert")
Audio.start()
wait(2000)
clip = Audio.recent(duration_ms=2000)
result = clip.match(sample, threshold=0.85)
if result.matched:
    print(result.score, result.start_ms, result.end_ms)
Audio.stop()

ข้อผิดพลาด / ข้อจำกัด

ไม่มีข้อจำกัดเพิ่มเติมที่ระบุไว้ ให้ปฏิบัติตามพารามิเตอร์และพฤติกรรมข้างต้น

API ที่เกี่ยวข้อง

ไม่มี

ฟิลด์

ชื่อคำอธิบาย
nameString | None
ชื่อตัวอย่างที่บันทึกไว้ หรือ None สำหรับสแนปช็อตล่าสุด
duration_msNumber
ความยาวสแนปช็อตเป็นมิลลิวินาที
start_msNumber
เวลาเริ่มต้นเป็นมิลลิวินาที เป็นศูนย์สำหรับตัวอย่างที่มีชื่อ หรือนับจากเซสชันฟังสำหรับสแนปช็อตล่าสุด
end_msNumber
เวลาสิ้นสุดแบบไม่รวมปลายช่วง เป็นมิลลิวินาทีบนเส้นเวลาเดียวกับ start_ms
ตัวอย่างการสร้างออบเจ็กต์
# โหลดตัวอย่างที่บันทึกในมาโครนี้
audio = Audio("alert")

เมธอด

5 เมธอด

Audio.start

เริ่มฟังเสียงจากแอปที่เลือก ไม่ใช้ไมโครโฟน ต้องใช้ Android 10 ขึ้นไป สิทธิ์บันทึกเสียง ความยินยอม MediaProjection และแอปต้นทางที่อนุญาตให้จับเสียง เรียกซ้ำขณะฟังจะรักษาบัฟเฟอร์เดิม การเริ่มใหม่หลัง stop จะรีเซ็ตเวลาของเซสชัน จึงต้องรีเซ็ตเวลาตรวจพบที่บันทึกไว้ด้วย Pause ล้างประวัติ แต่ Resume ยังคงนับเวลาจากจุดเริ่มต้นของเซสชันเดิมและรวมช่วงที่หยุดชั่วคราว หากขาดสิทธิ์ การตั้งค่า หรือเซสชันจับเสียง จะรายงานข้อผิดพลาด

รูปแบบคำสั่ง

Audio.start()

พารามิเตอร์

ไม่มี

ค่าที่ส่งกลับ

None

พฤติกรรม / ผลข้างเคียง

เริ่มฟังเสียงจากแอปที่เลือก ไม่ใช้ไมโครโฟน ต้องใช้ Android 10 ขึ้นไป สิทธิ์บันทึกเสียง ความยินยอม MediaProjection และแอปต้นทางที่อนุญาตให้จับเสียง เรียกซ้ำขณะฟังจะรักษาบัฟเฟอร์เดิม การเริ่มใหม่หลัง stop จะรีเซ็ตเวลาของเซสชัน จึงต้องรีเซ็ตเวลาตรวจพบที่บันทึกไว้ด้วย Pause ล้างประวัติ แต่ Resume ยังคงนับเวลาจากจุดเริ่มต้นของเซสชันเดิมและรวมช่วงที่หยุดชั่วคราว หากขาดสิทธิ์ การตั้งค่า หรือเซสชันจับเสียง จะรายงานข้อผิดพลาด

การทำงาน

  • รอให้เสร็จ: ขึ้นอยู่กับเงื่อนไข
  • ความปลอดภัยเมื่อทำงานพร้อมกัน: ไม่รับประกัน
  • การทำงานแบบขนาน: ขึ้นอยู่กับเงื่อนไข

ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์

ตัวอย่าง

# เริ่มบันทึกเสียงจากแอปที่ตั้งค่าไว้หลังได้รับสิทธิ์และความยินยอม
Audio.start()

ข้อผิดพลาด / ข้อจำกัด

ไม่มีข้อจำกัดเพิ่มเติมที่ระบุไว้ ให้ปฏิบัติตามพารามิเตอร์และพฤติกรรมข้างต้น

API ที่เกี่ยวข้อง

Audio.stop

หยุดจับเสียงและล้างบัฟเฟอร์ ค่าเสียงที่คืนไปแล้วจะยังใช้ได้ และการจับภาพหน้าจอที่ส่วนอื่นใช้อยู่ยังทำงานต่อ เมื่อมาโครจบจะคืนทรัพยากรจับเสียงด้วย

รูปแบบคำสั่ง

Audio.stop()

พารามิเตอร์

ไม่มี

ค่าที่ส่งกลับ

None

พฤติกรรม / ผลข้างเคียง

หยุดจับเสียงและล้างบัฟเฟอร์ ค่าเสียงที่คืนไปแล้วจะยังใช้ได้ และการจับภาพหน้าจอที่ส่วนอื่นใช้อยู่ยังทำงานต่อ เมื่อมาโครจบจะคืนทรัพยากรจับเสียงด้วย

การทำงาน

  • รอให้เสร็จ: ขึ้นอยู่กับเงื่อนไข
  • ความปลอดภัยเมื่อทำงานพร้อมกัน: ไม่รับประกัน
  • การทำงานแบบขนาน: ขึ้นอยู่กับเงื่อนไข

ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์

ตัวอย่าง

# ปล่อยตัวบันทึกเสียงที่ตั้งค่าไว้
Audio.stop()

ข้อผิดพลาด / ข้อจำกัด

ไม่มีข้อจำกัดเพิ่มเติมที่ระบุไว้ ให้ปฏิบัติตามพารามิเตอร์และพฤติกรรมข้างต้น

API ที่เกี่ยวข้อง

Audio.recent

คัดลอกเสียงล่าสุดเป็นสแนปช็อตอิสระโดยไม่รอข้อมูลเพิ่ม เรียกได้เฉพาะ 10 วินาทีล่าสุด และไม่สามารถเรียกคืนเสียงที่เล่นก่อนเริ่มฟัง หากประวัติไม่พอหรือเครื่องบันทึกไม่พร้อมจะรายงานข้อผิดพลาด ความเงียบเพียงอย่างเดียวไม่ยืนยันว่าแอปต้นทางบล็อกการจับเสียง

รูปแบบคำสั่ง

Audio.recent(duration_ms)

พารามิเตอร์

ชื่อคำอธิบาย
duration_msNumber (1..10000)
ต้องระบุระยะเวลาเป็นจำนวนเต็มตั้งแต่ 1 ถึง 10000 มิลลิวินาที
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น

ค่าที่ส่งกลับ

Audio

พฤติกรรม / ผลข้างเคียง

คัดลอกเสียงล่าสุดเป็นสแนปช็อตอิสระโดยไม่รอข้อมูลเพิ่ม เรียกได้เฉพาะ 10 วินาทีล่าสุด และไม่สามารถเรียกคืนเสียงที่เล่นก่อนเริ่มฟัง หากประวัติไม่พอหรือเครื่องบันทึกไม่พร้อมจะรายงานข้อผิดพลาด ความเงียบเพียงอย่างเดียวไม่ยืนยันว่าแอปต้นทางบล็อกการจับเสียง

การทำงาน

  • รอให้เสร็จ: ขึ้นอยู่กับเงื่อนไข
  • ความปลอดภัยเมื่อทำงานพร้อมกัน: ไม่รับประกัน
  • การทำงานแบบขนาน: ขึ้นอยู่กับเงื่อนไข

ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์

ตัวอย่าง

# แอปต้นทางต้องกำลังเล่น และต้องมีข้อมูลย้อนหลังอย่างน้อย 500 ms
Audio.start()
wait(600)
clip = Audio.recent(500)
print(clip.duration_ms)

ข้อผิดพลาด / ข้อจำกัด

ไม่มีข้อจำกัดเพิ่มเติมที่ระบุไว้ ให้ปฏิบัติตามพารามิเตอร์และพฤติกรรมข้างต้น

API ที่เกี่ยวข้อง

Audio.match

เลื่อนตัวอย่างอ้างอิงไปบนสแนปช็อตนี้ แล้วคืนค่าความคล้ายที่ดีที่สุด ใช้แถบแอมพลิจูด mel ที่ปรับให้เป็นมาตรฐาน 64 แถบ และหาค่าเฉลี่ยความคล้ายจากเฟรมอ้างอิงที่มีสัญญาณ ช่วงที่เสียงขาดหายจะลดคะแนน ช่วงเงียบไม่ถือว่าตรงกัน ไม่มีการรู้จำคำพูดหรือปรับแก้ความเร็วและระดับเสียง หากตัวอย่างยาวกว่าคลิปจะรายงานข้อผิดพลาด หลังอัปเดตตัวจับคู่ ควรปรับเกณฑ์ใหม่ด้วยการบันทึกคนละครั้ง

รูปแบบคำสั่ง

audio.match(sample, threshold)

พารามิเตอร์

ชื่อคำอธิบาย
sampleAudio
ค่าเสียงอ้างอิงที่ต้องการค้นหาภายในค่าเสียงนี้
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น
thresholdNumber (0..1)
ต้องระบุจำนวนจำกัดตั้งแต่ 0 ถึง 1 ปรับเกณฑ์ด้วยการบันทึกคนละครั้ง ค่า 0.85 เป็นเพียงตัวอย่าง ไม่ใช่เกณฑ์ที่แนะนำสำหรับทุกเสียง
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น

ค่าที่ส่งกลับ

AudioMatch

พฤติกรรม / ผลข้างเคียง

เลื่อนตัวอย่างอ้างอิงไปบนสแนปช็อตนี้ แล้วคืนค่าความคล้ายที่ดีที่สุด ใช้แถบแอมพลิจูด mel ที่ปรับให้เป็นมาตรฐาน 64 แถบ และหาค่าเฉลี่ยความคล้ายจากเฟรมอ้างอิงที่มีสัญญาณ ช่วงที่เสียงขาดหายจะลดคะแนน ช่วงเงียบไม่ถือว่าตรงกัน ไม่มีการรู้จำคำพูดหรือปรับแก้ความเร็วและระดับเสียง หากตัวอย่างยาวกว่าคลิปจะรายงานข้อผิดพลาด หลังอัปเดตตัวจับคู่ ควรปรับเกณฑ์ใหม่ด้วยการบันทึกคนละครั้ง

การทำงาน

  • รอให้เสร็จ: ขึ้นอยู่กับเงื่อนไข
  • ความปลอดภัยเมื่อทำงานพร้อมกัน: ไม่รับประกัน
  • การทำงานแบบขนาน: ขึ้นอยู่กับเงื่อนไข

ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์

ตัวอย่าง

# บันทึกตัวอย่างเสียงเตือนใน Template Manager ก่อนเรียกใช้ตัวอย่างนี้
sample = Audio("alert")
Audio.start()
wait(1500)
clip = Audio.recent(1500)
result = clip.match(sample, 0.85)
print(result)
Audio.stop()

ข้อผิดพลาด / ข้อจำกัด

ไม่มีข้อจำกัดเพิ่มเติมที่ระบุไว้ ให้ปฏิบัติตามพารามิเตอร์และพฤติกรรมข้างต้น

API ที่เกี่ยวข้อง

Audio.find

ฟังเพื่อค้นหาเสียงอ้างอิงนี้ในเสียงใหม่เป็นเวลา timeout_ms มิลลิวินาที คืน AudioMatch แรก หรือ None หากไม่พบ เริ่มจับเสียงจากต้นทางที่ตั้งค่าไว้หากจำเป็น และจับต่อจนเรียก Audio.stop() หรือมาโครจบ พิจารณาเฉพาะเสียงที่ได้รับหลังคำสั่งนี้เริ่มสมัครรับข้อมูล สแกนช่วงเสียงที่ซ้อนทับกันอย่างต่อเนื่องทุก 10 ms โดยใช้สเปกตรัมซ้ำข้ามขอบเขตบล็อก ป้องกันช่องว่างจากการตรวจเป็นระยะ แต่ไม่รับประกันการรู้จำ สำหรับตัวอย่างเสียงที่ยาวอย่างน้อย 100 ms และมีสัญญาณเสียงเพียงพอ ผลที่ตรงกันเกือบสมบูรณ์ (คะแนนอย่างน้อย 0.9999) จะคืนทันทีเมื่อได้รับเสียงครบทั้งตัวอย่าง ผลที่ตรงกันมากอื่น ๆ (คะแนนอย่างน้อย 0.98) อาจตรวจตำแหน่งต่อได้สูงสุด 20 ms ส่วนผลที่อ่อนกว่านั้นใช้ช่วงตรวจเพิ่มสูงสุด 50 ms หากคะแนนเพิ่งตรงกันมากใกล้สิ้นสุดช่วงนั้น ระบบอาจตรวจตำแหน่งต่ออีกครั้งได้สูงสุด 20 ms ทุกผลต้องผ่านเกณฑ์ที่กำหนด Timeout จำกัดช่วงบันทึก การประมวลผลเสียงที่อยู่ในช่วงอาจเพิ่มความหน่วง ค่า 0 คืน None โดยไม่เริ่มจับเสียง Pause มาโครจะทิ้งเสียงที่รอและหยุดนับ timeout ส่วน Resume ค้นหาในช่วงเสียงใหม่ หากเซสชันหาย ข้อมูลล้น หรือเสียงเสียหาย จะรายงานข้อผิดพลาด ไม่ใช่ None

รูปแบบคำสั่ง

audio.find(timeout_ms, threshold)

พารามิเตอร์

ชื่อคำอธิบาย
timeout_msNumber (0..2147483647)
ต้องระบุระยะเวลาช่วงบันทึกเป็นจำนวนเต็มตั้งแต่ 0 ถึง 2147483647 มิลลิวินาที ไม่นับช่วงที่มาโครหยุดชั่วคราว ขอบเขตช่วงเวลาประมาณจากเวลาที่เครื่องบันทึกอ่านข้อมูลเสร็จ ไม่ใช่ timestamp ของฮาร์ดแวร์
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น
thresholdNumber (0..1)
ต้องระบุจำนวนจำกัดตั้งแต่ 0 ถึง 1 ปรับเกณฑ์ด้วยการบันทึกคนละครั้ง ค่า 0.85 เป็นเพียงตัวอย่าง ไม่ใช่เกณฑ์ที่แนะนำสำหรับทุกเสียง
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น

ค่าที่ส่งกลับ

AudioMatch | None

พฤติกรรม / ผลข้างเคียง

ฟังเพื่อค้นหาเสียงอ้างอิงนี้ในเสียงใหม่เป็นเวลา timeout_ms มิลลิวินาที คืน AudioMatch แรก หรือ None หากไม่พบ เริ่มจับเสียงจากต้นทางที่ตั้งค่าไว้หากจำเป็น และจับต่อจนเรียก Audio.stop() หรือมาโครจบ พิจารณาเฉพาะเสียงที่ได้รับหลังคำสั่งนี้เริ่มสมัครรับข้อมูล สแกนช่วงเสียงที่ซ้อนทับกันอย่างต่อเนื่องทุก 10 ms โดยใช้สเปกตรัมซ้ำข้ามขอบเขตบล็อก ป้องกันช่องว่างจากการตรวจเป็นระยะ แต่ไม่รับประกันการรู้จำ สำหรับตัวอย่างเสียงที่ยาวอย่างน้อย 100 ms และมีสัญญาณเสียงเพียงพอ ผลที่ตรงกันเกือบสมบูรณ์ (คะแนนอย่างน้อย 0.9999) จะคืนทันทีเมื่อได้รับเสียงครบทั้งตัวอย่าง ผลที่ตรงกันมากอื่น ๆ (คะแนนอย่างน้อย 0.98) อาจตรวจตำแหน่งต่อได้สูงสุด 20 ms ส่วนผลที่อ่อนกว่านั้นใช้ช่วงตรวจเพิ่มสูงสุด 50 ms หากคะแนนเพิ่งตรงกันมากใกล้สิ้นสุดช่วงนั้น ระบบอาจตรวจตำแหน่งต่ออีกครั้งได้สูงสุด 20 ms ทุกผลต้องผ่านเกณฑ์ที่กำหนด Timeout จำกัดช่วงบันทึก การประมวลผลเสียงที่อยู่ในช่วงอาจเพิ่มความหน่วง ค่า 0 คืน None โดยไม่เริ่มจับเสียง Pause มาโครจะทิ้งเสียงที่รอและหยุดนับ timeout ส่วน Resume ค้นหาในช่วงเสียงใหม่ หากเซสชันหาย ข้อมูลล้น หรือเสียงเสียหาย จะรายงานข้อผิดพลาด ไม่ใช่ None

การทำงาน

  • รอให้เสร็จ: ขึ้นอยู่กับเงื่อนไข
  • ความปลอดภัยเมื่อทำงานพร้อมกัน: ไม่รับประกัน
  • การทำงานแบบขนาน: ขึ้นอยู่กับเงื่อนไข

ระยะเวลาประมวลผลและการรอขึ้นอยู่กับการทำงานที่อธิบายไว้ เก็บค่าที่เปลี่ยนแปลงได้ไว้ในโฟลว์เจ้าของ ไม่มีการรับประกันความปลอดภัยทั่วไปเมื่อแชร์ออบเจ็กต์ระหว่างโฟลว์

ตัวอย่าง

# รอเสียงใหม่และจัดการเมื่อหมดเวลา
audio = Audio("alert")
result = audio.find(timeout_ms=5000, threshold=0.85)
if result is not None:
    print(result.score, result.start_ms, result.end_ms)
Audio.stop()

ข้อผิดพลาด / ข้อจำกัด

ไม่มีข้อจำกัดเพิ่มเติมที่ระบุไว้ ให้ปฏิบัติตามพารามิเตอร์และพฤติกรรมข้างต้น

API ที่เกี่ยวข้อง