问题描述
我的意图是让两个音轨,它们性质相似,并且在不同时间相互淡入.当出现这种淡入淡出时,一个音轨应在短时间内从全音量淡入静音,同时,另一音轨应从0淡入到100,并从同一时间索引继续播放 .他们必须能够随时动态执行此操作-发生某种动作时,将发生淡入淡出,并且新曲目将在与其他曲目相同的位置开始播放一个人离开.
My intention is to have two music tracks, which are similar in nature, fade between each other at various times. When such a fade occurs, one music track should fade from full volume to muted in a short period of time, and, simultaneously, the other track should fade from 0 to 100 and continue playing from the same time index. They must be able to do this dynamically at any time - when a certain action occurs, the fade will occur and the new track will start playing at the same position that the other one left off at.
这可能是通过使用音量操纵或通过启动和停止音乐来实现的(但是,似乎只有淡出"选项存在,而缺少淡出"选项).我怎样才能做到这一点?存在的最佳方法是什么?如果无法使用Pygame,则可以接受 Pygame的替代方案.
This might be plausible by either using volume manipulation or by starting and stopping the music (however, it appears that only a "fadeout" option exists, and there is a lack of a "fadein" option). How can I do this? What is the best method, if any, that exists? If it is impossible using Pygame, alternatives to Pygame are acceptable.
推荐答案
尝试一下,很简单.
import pygame
pygame.mixer.init()
pygame.init()
# Maybe you can subclass the pygame.mixer.Sound and
# add the methods below to it..
class Fader(object):
instances = []
def __init__(self, fname):
super(Fader, self).__init__()
assert isinstance(fname, basestring)
self.sound = pygame.mixer.Sound(fname)
self.increment = 0.01 # tweak for speed of effect!!
self.next_vol = 1 # fade to 100 on start
Fader.instances.append(self)
def fade_to(self, new_vol):
# you could change the increment here based on something..
self.next_vol = new_vol
@classmethod
def update(cls):
for inst in cls.instances:
curr_volume = inst.sound.get_volume()
# print inst, curr_volume, inst.next_vol
if inst.next_vol > curr_volume:
inst.sound.set_volume(curr_volume + inst.increment)
elif inst.next_vol < curr_volume:
inst.sound.set_volume(curr_volume - inst.increment)
sound1 = Fader("1.wav")
sound2 = Fader("2.wav")
sound1.sound.play()
sound2.sound.play()
sound2.sound.set_volume(0)
# fading..
sound1.fade_to(0)
sound2.fade_to(1)
while True:
Fader.update() # a call that will update all the faders..
这篇关于在Pygame中进行中的两个音乐曲目之间逐渐消失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!