Воспроизведение звука из формы волны, хранящейся в массиве

В настоящее время я экспериментирую с созданием звуков на Python, и мне любопытно, как я могу взять массив, представляющий форму волны (с частотой дискретизации 44100 Гц), и воспроизвести ее. Я ищу здесь чистый Python, вместо того, чтобы полагаться на библиотеку, которая поддерживает больше, чем только формат .wav.

4 Solutions collect form web for “Воспроизведение звука из формы волны, хранящейся в массиве”

Вы должны использовать библиотеку. Написание всего этого на чистом питоне может быть много тысяч строк кода, чтобы взаимодействовать с аудио-оборудованием!

С библиотекой, например audiere, это будет так просто:

import audiere ds = audiere.open_device() os = ds.open_array(input_array, 44100) os.play() 

Есть также пиглет, пирогам и многие другие.

Я думаю, вы можете посмотреть этот список http://wiki.python.org/moin/PythonInMusic В нем перечислены многие полезные инструменты для работы со звуком.

Для воспроизведения звука заданного массива input_array из 16-битных выборок. Это модифицированный пример на странице документации pyadio

 import pyaudio # instantiate PyAudio (1) p = pyaudio.PyAudio() # open stream (2), 2 is size in bytes of int16 stream = p.open(format=p.get_format_from_width(2), channels=1, rate=44100, output=True) # play stream (3), blocking call stream.write(input_array) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate() 

или использовать модуль звукового оповещения . Установите с помощью pip install sounddevice , но вам нужно это сначала: sudo apt-get install libportaudio2

абсолютный базовый:

 import numpy as np import sounddevice as sd sd.play(myarray) #may need to be normalised like in below example #myarray must be a numpy array. If not, convert with np.array(myarray) 

Еще несколько вариантов:

 import numpy as np import sounddevice as sd #variables samplfreq = 100 #the sampling frequency of your data (mine=100Hz, yours=44100) factor = 10 #incr./decr frequency (speed up / slow down by a factor) (normal speed = 1) #data print('..interpolating data') arr = myarray #normalise the data to between -1 and 1. If your data wasn't/isn't normalised it will be very noisy when played here sd.play( arr / np.max(np.abs(arr)), samplfreq*factor) 
  • Как найти и построить самую большую выборку в wav-файле
  • Чтение и запись стереофайла .wav с метаданными python +
  • Преобразование маленькой конечной строки в целое число
  • как получить образцы wav из wav-файла?
  • Почему я должен отказаться от половины того, что возвращается FFT?
  • Python - downsampling wav аудиофайл
  • Как написать 24-битный WAV-файл в Python?
  • Данные, возвращаемые scipy.io.wavfile.read
  • Python - лучший язык программирования в мире.