如何解决如何在任何一个频道中播放提示音而又不影响python?
我想出了一个使用立体声进行导航的项目。例如向左转,它在左声道上发出更快的哔哔声,而在右声道上发出更低的哔哔声。
这是我的python代码:
import simpleaudio as sa
import numpy as np
import time
import threading
# beep.play()
# beep.test()
# beep.stop()
# beep.setLR(distance)
class Beep:
def __init__(self,freq = 3520.0,sample_rate = 48000,T = 0.05):
self.freq = freq
self.sample_rate = sample_rate
self.T = T
t = np.linspace(0,T,int(T * sample_rate),False)
note = np.sin(freq * t * 2 * np.pi)
audio = (note * 32767 / np.max(np.abs(note))).astype(np.int16)
audio_length = audio.shape[0]
self.audio = [np.zeros((audio_length,2),dtype=np.int16),np.zeros((audio_length,dtype=np.int16)]
self.audio[0][:,0] = audio
self.audio[1][:,1] = audio
self.__distance = (None,None)
self.__threads = [None,None]
self.__isPlaying = [False,False]
def test(self):
for _ in range(2):
for i in range(2):
play_obj = sa.play_buffer(self.audio[i],2,self.sample_rate)
play_obj.wait_done()
time.sleep(self.T*2)
def __routine(self,isRight=0):
while self.__isPlaying[isRight]:
if type(self.__distance[isRight]) != type(None):
play_obj = sa.play_buffer(self.audio[isRight],self.sample_rate)
play_obj.wait_done()
time.sleep(self.T * self.__distance[isRight])
def setLR(self,distance):
if len(distance) != 2:
raise Exception('distance must be a pair of left and right distance')
self.__distance = distance
def play(self):
self.__isPlaying = [True,True]
for i in range(2):
self.__threads[i] = threading.Thread(target=self.__routine,args=(i,))
self.__threads[i].start()
def stop(self):
self.__isPlaying = [False,False]
但是在我的实现中,当一侧发出蜂鸣声而另一侧没有发出哔声时,声音会发生碰撞,而另一次发出的哔声会静音。听起来好像被切断了。
如何正确实施独立的侧面哔哔声,当同时(或几乎同时)播放时,不会打扰另一个通道?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。