تشغيل مجموعة فرعية من ملف الصوت باستخدام Pyglet

StackOverflow https://stackoverflow.com/questions/1977521

  •  21-09-2019
  •  | 
  •  

سؤال

كيف يمكنني استخدام Pyglet API للصوت لتشغيل مجموعات فرعية من ملف الصوت على سبيل المثال من ثانية واحدة إلى 3.5 ثانية من مقطع صوت 6 ثانية؟

يمكنني تحميل ملف صوتي وتشغيله ، ويمكنني أن أسعى لبدء الفاصل الزمني المطلوب ، لكنني أتساءل عن كيفية إيقاف التشغيل في هذه النقطة المشار إليها؟

هل كانت مفيدة؟

المحلول

لا يبدو أن Pyglet لديها دعم لتحديد وقت التوقف. خياراتك هي:

  1. استطلاع الوقت الحالي وتوقف عن التشغيل عندما تصل إلى نقطة النهاية المطلوبة. قد لا يكون هذا دقيقًا بما يكفي لك.
  2. أو استخدم مكتبة ملفات الصوت لاستخراج الجزء الذي تريده في ملف صوت مؤقت ، ثم استخدم Pyglet لتشغيل ملف الصوت هذا بالكامل. لدى Python دعمًا مدمجًا لملفات .wav (وحدة "الموجة") ، أو يمكنك التخلص من أداة سطر الأوامر مثل "Sox".

نصائح أخرى

يبدو أن هذا النهج يعمل: بدلاً من الاستطلاع للوقت الحالي يدويًا لوقف التشغيل ، استخدم جدولة ساعة Pyglet لتشغيل رد الاتصال مرة واحدة بعد فترة معينة. هذا دقيق بما يكفي لحالة الاستخدام الخاصة بي ؛-)

player = None

def stop_callback(dt):
  if player != None:
    player.stop()

def play_sound_interval(mp3File, start=None, end=None):
  sound = pyglet.resource.media(mp3File)
  global player
  player = pyglet.media.ManagedSoundPlayer()
  player.queue(sound)
  if start != None:
    player.seek(start)
  if end != None and start != None:
    pyglet.clock.schedule_once(stop_callback, end-start)
  elif end != None and start == None:
    pyglet.clock.schedule_once(stop_callback, end)
  player.play()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top