大佬教程收集整理的这篇文章主要介绍了每次循环播放 wav 文件时,如何消除烦人的“啪”声?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个简单的可控和非阻塞循环播放器。使用 simpleaudio 创建的以下类有效,但是,在音频的每个循环之间有一个短暂的停顿和明显的爆裂/噼啪声。老实说,我不确定是什么原因造成的,我不确定如何解决它,而不是完全使用不同的音频模块。有什么建议吗?
import simpleaudio as sa
from threading import Thread
class WavPlayer(Thread):
def __init__(self,filepath,loop=falsE):
self.loop = loop
self.wav_obj = sa.WaveObject.from_wave_file(filepath)
self.play_obj = None
Thread.__init__(self)
def run(self):
self.play_obj = self.wav_obj.play() #initialize play buffer and play once
while self.loop is True:
if not self.play_obj.is_playing():
print("played again")
self.play_obj = self.wav_obj.play()
def terminate(self):
print("music terminated")
self.play_obj.stop()
self.loop = false
self.join()
main_loop = WavPlayer("main_loop.wav",TruE)
menu_loop = WavPlayer("menu.wav",TruE)
main_loop.start()
z = input("Enter to end theme looPing")
main_loop.loop = false
z = input("Enter to terminate music")
main_loop.terminate()
print("playing next song")
menu_loop.start()
cont = ''
while cont != 'n':
cont = input("conTinue tesTing non-blocking? enter n to stop: ")
menu_loop.terminate()
Filedropper link to menu_loop wav file
Filedropper link to main_loop wav file
我在编写一个调音器时遇到了同样的问题,该调音器从有限数量的样本中生成无限长的音符(我使用了 pyaudio
,并且调音音符是一个非常简单的声音,这使得爆破声非常明显,但补救要容易得多)。
如果你循环一个波浪对象:
** **
* * *
* * *
* * *
** **
...由于最后一个和第一个样本之间的巨大差异,您会听到砰的一声。删除一些样本直到最后一个和第一个样本匹配将消除流行音乐(simpleaudio
允许您将样本读入 numpy
数组,然后您可以(稍微)截断(稍微)直到第一个和最后一个样本匹配).
在零交叉处切割是这种情况的一个特例,请参阅 this discussion。当然,一些声音库可能已经在零交叉处截断了您的样本。
在麻烦扩展程序以将样本转换为 numpy
数组并截断它们之前,您首先可以尝试使用 Audacity 之类的声音编辑器并手动完成,然后聆听结果。
以上是大佬教程为你收集整理的每次循环播放 wav 文件时,如何消除烦人的“啪”声?全部内容,希望文章能够帮你解决每次循环播放 wav 文件时,如何消除烦人的“啪”声?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。