gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:46:18 26 4
gpt4 key购买 nike

在python中是否可以通过直接写入音频输出来播放音频,而无需制作或读取wav文件或制作要播放的数组。

我一直在做一个合成器项目,我想实时合成和调制声音。我目前正在使用 mac 进行编程,但最终的软件将在 raspberry pi 上。使用 arduino,a 能够通过使用 8 位 R2R 阶梯作为 DAC 并直接写入组成 DAC 的 GPIO 引脚来实现此目的。这是在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 可以实现这样的事情吗?

最佳答案

在笔记本电脑上,这可以通过 PyAudio - Python 的 Portaudio 绑定(bind)来完成。

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

关于python - 无需读取或写入 wav 文件或数组即可实时播放合成音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47359781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com