问题描述
我想出了一个使用立体声进行导航的项目。例如向左转,它在左声道上发出更快的哔哔声,而在右声道上发出更低的哔哔声。
这是我的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 (将#修改为@)