实时播放合成音频而无需读取或写入wav文件或数组

时间:2017-11-17 21:48:14

标签: python synthesizer

在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会不会有这样的事情?

1 个答案:

答案 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()