gpt4 book ai didi

python - 怎么强制去上课?

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:25 26 4
gpt4 key购买 nike

我已经开设了这门课:

class AudioSegmentCustom(AudioSegment):

def fade_override(self, seg, fade_len=100):
seg1, seg2 = AudioSegment._sync(self, seg)
final = seg1[:-fade_len]
a_fin = seg1[-fade_len:].fade(to_gain=-120, start=0, end=float('inf'))
a_fin *= seg2[:fade_len]
return (final + a_fin) + seg2[fade_len:]

我面临的问题是,当我创建一些 AudioSegmentCustom 变量时,如果我“添加”它们,add 操作将返回其原始父类型 = 音频段

因此以下代码不起作用:

final = AudioSegmentCustom.from_mp3(mp3_src) + AudioSegment.from_mp3(mp3_other)
final = final.fade_override(...blabla...)

因为我得到:

'AudioSegment' object has no attribute 'fade_override'

...即使我从 AudioSegmentCustom 对象开始,我还是以 AudioSegment “唯一”对象结束。如何“强制”新创建的对象的类型?

以防万一您需要它:

class AudioSegment(object):
def __add__(self, arg):
if isinstance(arg, AudioSegment):
return self.append(arg, crossfade=0)
else:
return self.apply_gain(arg)

最佳答案

看起来问题是 AudioSegment._spawn()

它无条件返回一个简单的 AudioSegment 实例。由于它是一个普通方法,因此您可以在 AudioSegmentCustom 中重写它:

def _spawn(self, data, overrides={}):
"""
Creates a new audio segment using the metadata from the current one
and the data passed in. Should be used whenever an AudioSegment is
being returned by an operation that would alters the current one,
since AudioSegment objects are immutable.
"""
# accept lists of data chunks
if isinstance(data, list):
data = b''.join(data)

# accept file-like objects
if hasattr(data, 'read'):
if hasattr(data, 'seek'):
data.seek(0)
data = data.read()

metadata = {
'sample_width': self.sample_width,
'frame_rate': self.frame_rate,
'frame_width': self.frame_width,
'channels': self.channels
}
metadata.update(overrides)
return self.__class__(data=data, metadata=metadata)

复制和粘贴当然不是一个好的做法,但它可以完成工作。

但请注意,它引入了不对称性,因为 AudioSegmentCustom + AudioSegment 返回 AudioSegmentCustom,而 AudioSegment + AudioSegmentCustom 返回 >音频段。再次强调,可以通过在 AudioSegmentCustom 中额外提供 __radd__() 来修复此问题。它将在 AudioSegment.__add__() 之前调用。

关于python - 怎么强制去上课?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37098835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com