在python中是否可以通过直接写入音频输出来播放音频,而无需制作或读取wav文件或制作阵列。
我正在研究一个合成项目,我想实时合成和调制声音。我目前正在使用mac编程,但最终的软件将使用覆盆子pi。使用arduino a可以通过使用8位R2R梯形作为DAC并直接写入构成DAC的GPIO引脚来实现。这是一个简单的简化代码,用于制作" white" arduino上的噪音:
for (int t=0;t<1000;t++){
PORTD = random(0,255); //PORTD is the DAC output
delayMicroseconds(10);
}
制作漂亮的8位底鼓的另一个例子。我想在飞行中计算正弦波,但arduino太慢了,无法做到:
while(n < 200){
for (int t=0;t<100;t++){
PORTD = sine[t]/2; //sine[] is a previously defined array containing a sine wave
delayMicroseconds(n);
}
n = n + 15;
在笔记本电脑或树莓派上运行python会不会有这样的事情?
答案 0 :(得分:1)
在笔记本电脑上,可以使用PyAudio-python的Portaudio绑定。
import pyaudio
from math import pi
import numpy as np
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=44100, output=1,)
def make_sinewave(frequency, length, sample_rate=44100):
length = int(length * sample_rate)
factor = float(frequency) * (pi * 2) / sample_rate
waveform = np.sin(np.arange(length) * factor)
return waveform
wave = make_sinewave(500, 1)
stream.write(wave.astype(np.float32).tostring())
stream.stop_stream()
stream.close()