我试图在python中设计一种将0-255之间的整数值列表转换为1500-2200Hz的代表性等效音调的方法。定时信息(1200Hz)由(-1),( - 2)和(-3)值给出。我创建了一个生成.wav文件的函数,然后使用每个音调的参数调用此函数。 我需要通过将大量单个音调连接到一个输出文件或创建一些运行整个列表并创建单独文件的方式来创建“流”。或者通过其他一些我不知道的疯狂功能.... 定时信息的持续时间会有所不同,但信息位(0-255)都是固定长度的。
列表的样本如下所示:
[ - 2,3,5,7,7,7,16,9,10,21,16,-1,19,13,8,8,0,5,9,21,19,11, -1,11,16,19,5,21,34,39,46,58,50,-1,35,46,17,28,23,19,8,2,13,12,-1,9 ,6,8,11,2,3,2,13,44,42,-1,35,41,46,55,73,69,56,47,45,26,-1,-3]
我正在考虑的当前解决方案涉及打开文件,使用'if'语句检查列表中的下一个值,以检查该位是否为计时(-ve),如果不是:运行算法查看需要生成freq并将音调添加到输出文件中。继续,直到-3或列表结束。
任何人都可以指导如何创建完整的输出文件或任何建议...... 我是编程的新手,所以请保持温柔。提前致谢
答案 0 :(得分:2)
看起来你正试图重新发明轮子,小心...... 如果你想从数组生成音乐,那么你可以看看pyaudiere,它是audiere库上的一个简单包装器。请参阅有关如何打开数组的文档,但看起来应该是这样的:
import audiere
d = audiere.open_device()
s = d.open_array(buff,fs)
s.play()
此次通话的文件是:
open_array(buffer,fs):
打开声音缓冲区进行播放,并为其返回OutputStream对象。缓冲区应该是Float32的NumPy数组,有一列或两列用于单声道立体声播放。第二个参数是采样频率。超出范围+ -1的值将被剪裁。
答案 1 :(得分:0)
您只需将新数据附加到wav文件的末尾即可。因此,如果您尚未关闭文件,只需继续写入文件,或者如果您已经关闭文件,请以附加模式(w = open(myfile, 'ba')
)重新打开并写入新数据。
为了使这听起来合理而没有咔嗒声等,诀窍是使波形从一个频率连续到下一个频率。假设您正在使用相同幅度的正弦波,则需要以与前一个相同的相位开始每个正弦波。您可以通过播放波形的长度来确保始终以零相位结束,然后始终从零相位开始,或者通过明确地将相位包含在正弦波中来实现。
答案 2 :(得分:0)
我不确定我到底知道你在问什么,但我会尽力回答。
如果我不需要,我不会乱用低级WAV格式。只需使用Audiolab即可。
song
NumPy 1-D数组if
声明,以检测它是否为正数或正数t = linspace(0,1,num=48000)
a = sin(2*pi*f*t)
song = concatenate((song,a))
wavwrite(song, 'filename.wav', fs, enc)
您是否自己想过这种音调和时间格式,还是其他人创造的东西?