2017-11-25 55 views
0

我想用创建numpy的sounddevice录制音调并将其写入wav文件。这里是代码:在python3中使用sounddevice和numpy编写wav文件

import numpy 
import sounddevice as sd 
import soundfile as sf 
import sys 

duration = 3 
amplitude = 0.3 
sampling_frequency = 44100 

time = numpy.arange(int(numpy.ceil(duration * sampling_frequency)))/ sampling_frequency 

frequency1 = 500 
tone1 = amplitude * numpy.sin(2* numpy.pi * frequency1 * time) 

frequency2 = 700 
tone2 = amplitude * numpy.sin(2* numpy.pi * frequency1 * time) 
frequency3 = 1500 
tone3 = amplitude * numpy.sin(3* numpy.pi * frequency1 * time) 
frequency4 = 400 
tone4 = amplitude * numpy.sin(4* numpy.pi * frequency1 * time) 

result = tone1 
result2 = tone2 
result3 = tone3 
result4 = tone4 

sd.play(result + result2 + result3 + result4, sampling_frequency) 

filename = 'output.wav' 

mydata = sd.rec(int(result + result2 + result3 + result4),sampling_frequency,channels=2, blocking=True) 
sf.write(filename, mydata, sampling_frequency) 

我得到这个错误:只有长度为1的阵列可以转换到Python标量 有什么不好的代码?我与蟒蛇一个新手

+0

如果添加了完整的错误消息,这将是有益的,因为它规定了哪些生产线成品率错误。 – Coolness

回答

0

你的第二个到最后一行是

mydata = sd.rec(int(result + result2 + result3 + result4),sampling_frequency,channels=2, blocking=True) 

如果您尝试result1等变量的总和强制转换为整数。但是,它们实际上是numpy数组,因为time是一个数组。您不能将数组转换为单个整数,因为它具有多个值。我不知道为什么你正在尝试做的,你可能只是想删除int(),并将其更改为

mydata = sd.rec(result + result2 + result3 + result4, sampling_frequency, channels=2, blocking=True)