web-dev-qa-db-ja.com

numpy配列からオーディオを生成する方法は?

Numpyの2D配列から「心拍数モニター」効果を作成し、配列の値をトーンに反映させたい。

44
gisgyaan

scipy.io.wavfileの-​​ write function を使用して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=実際にオーディオを再生したい場合) このページ は、いくつかのパッケージ/モジュールの概要を提供します。

63
huon

2016年にここに来る人々にとっては、scikits.audiolabはもう機能していないようです。サウンドデバイスを使用して解決策を得ることができました。

import numpy as np
import sounddevice as sd

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

さらに、 scikits.audiolab を試すこともできます。ファイルIOおよび配列を「再生」する機能を備えています。配列は整数である必要はありません。

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)
15
mwv

Jupyterを使用している場合、最適なオプションは次のとおりです。

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

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)
4
geekazoid

PyGameにはモジュールpygame.sndarrayこれは、numpyデータをオーディオとして再生できます。 PyGameは立ち上げて実行するのが難しいため、他の答えはおそらくより良いでしょう。再び、scipyとnumpyにはそれぞれの困難が伴うので、PyGameをミックスに追加することは大きなステップではないかもしれません。

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

2
Bryan

配列からオーディオを生成する方法の詳細は定かではありませんが、 mpg321 が素晴らしいコマンドラインオーディオプレーヤーであり、潜在的に機能する可能性があることがわかりました。

私はこれを Anki のプレイヤーとして選択します。これはpythonで記述されており、コード/配列とオーディオをインターフェースするのに最適な開始点となるライブラリがあります。

チェックアウト:

0
ryanjdillon

別の現代的で便利な解決策は、 pysoundfile を使用することです。これは、読み取りと書き込みが可能です 幅広い音声ファイル形式

import numpy as np
import soundfile as sf

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