我的意图是让 两条 自然相似的 音乐曲目 在不同时间 之间彼此淡入淡出 。当出现这种淡入淡出时,一个音轨应在短时间内从全音量淡入静音,同时,另一音轨应从0淡入到100,并 从相同的时间索引 继续播放。他们必须能够随时 动态地 执行此操作-当发生某种动作时,就会发生淡入淡出 ,新的音轨将在与 另一个 音轨相同的位置开始播放 。
通过使用音量控制或通过启动和停止音乐,这似乎是合理的(但是,似乎只有“淡出”选项存在,而缺少“淡出”选项)。我怎样才能做到这一点?存在的最佳方法是什么?如果无法使用Pygame, 则可以 使用Pygame的 替代方案 。
试试这个,这很简单。
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..