繁体   English   中英

如何从 numpy 数组生成音频?

[英]How to generate audio from a numpy array?

我想从 numpy 中的二维数组创建“心率监视器”效果,并希望音调反映数组中的值。

您可以使用scipy.io.wavfilewrite函数创建一个 wav 文件,然后您可以随意播放该文件。 请注意,数组必须是整数,因此如果您有浮点数,您可能需要适当地缩放它们:

import numpy as np
from scipy.io.wavfile import write

data = np.random.uniform(-1,1,44100) # 44100 random samples between -1 and 1
scaled = np.int16(data/np.max(np.abs(data)) * 32767)
write('test.wav', 44100, scaled)

如果您希望 Python 实际播放音频,那么此页面提供了一些包/模块的概述。

对于 2016 年来到这里的人来说,scikits.audiolab 似乎不再起作用了。 我能够使用 sounddevice 获得解决方案。

import numpy as np
import sounddevice as sd

fs = 44100
data = np.random.uniform(-1, 1, fs)
sd.play(data, fs)

在 Jupyter 中,最好的选择是:

from IPython.display import Audio
Audio(numpy.sin(numpy.linspace(0, 3000, 20000)), rate=20000)

此外,您可以尝试scikits.audiolab 它具有文件 IO 和“播放”数组的能力。 数组不一定是整数。 模仿 dbaupp 的例子:

import numpy as np
import scikits.audiolab

data = np.random.uniform(-1,1,44100)
# write array to file:
scikits.audiolab.wavwrite(data, 'test.wav', fs=44100, enc='pcm16')
# play the array:
scikits.audiolab.play(data, fs=44100)

我在使用scikit.audiolabs遇到了一些问题,所以我为这个任务寻找了一些其他选项。 我想出了sounddevice ,它似乎更新了很多。 我还没有检查它是否适用于 Python 3。

执行您想要的操作的一种简单方法是:

import numpy as np
import sounddevice as sd

sd.default.samplerate = 44100

time = 2.0
frequency = 440

# Generate time of samples between 0 and two seconds
samples = np.arange(44100 * time) / 44100.0
# Recall that a sinusoidal wave of frequency f has formula w(t) = A*sin(2*pi*f*t)
wave = 10000 * np.sin(2 * np.pi * frequency * samples)
# Convert it to wav format (16 bits)
wav_wave = np.array(wave, dtype=np.int16)

sd.play(wav_wave, blocking=True)

pygame.sndarraypygame.sndarray模块,它可以将 numpy 数据作为音频播放。 其他答案可能更好,因为 PyGame 可能难以启动和运行。 再说一次,scipy 和 numpy 都有自己的困难,所以也许将 PyGame 添加到组合中并不是很大的一步。

http://www.pygame.org/docs/ref/sndarray.html

另一种现代方便的解决方案是使用pysoundfile ,它可以读写各种音频文件格式

import numpy as np
import soundfile as sf

data = np.random.uniform(-1, 1, 44100)
sf.write('new_file.wav', data, 44100)

不确定如何从阵列产生音频的细节,但我发现mpg321是一个很棒的命令行音频播放器,并且可能对你有用

我使用它作为Anki的首选播放器,它是用 python 编写的,并且具有可以作为将代码/数组与音频接口的一个很好的起点。

查看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM