Подтвердить что ты не робот

Генерация звука/синтез с помощью python?

Можно ли заставить python генерировать простой звук, подобный синусоидальной волне?

Есть ли для этого модуль? Если нет, как бы вы начали создавать свои собственные?

Кроме того, вам понадобится какая-то хост-среда для запуска python для воспроизведения звука или может быть достигнута только при совершении звонков с терминала?

Если ответ зависит от ОС, я использую mac.

4b9b3361

Ответ 1

Я искал то же самое, в конце концов, я написал этот код, который работает нормально.

import math        #import needed modules
import pyaudio     #sudo apt-get install python-pyaudio

PyAudio = pyaudio.PyAudio     #initialize pyaudio

#See https://en.wikipedia.org/wiki/Bit_rate#Audio
BITRATE = 16000     #number of frames per second/frameset.      

FREQUENCY = 500     #Hz, waves per second, 261.63=C4-note.
LENGTH = 1     #seconds to play sound

if FREQUENCY > BITRATE:
    BITRATE = FREQUENCY+100

NUMBEROFFRAMES = int(BITRATE * LENGTH)
RESTFRAMES = NUMBEROFFRAMES % BITRATE
WAVEDATA = ''    

#generating wawes
for x in xrange(NUMBEROFFRAMES):
 WAVEDATA = WAVEDATA+chr(int(math.sin(x/((BITRATE/FREQUENCY)/math.pi))*127+128))    

for x in xrange(RESTFRAMES): 
 WAVEDATA = WAVEDATA+chr(128)

p = PyAudio()
stream = p.open(format = p.get_format_from_width(1), 
                channels = 1, 
                rate = BITRATE, 
                output = True)

stream.write(WAVEDATA)
stream.stop_stream()
stream.close()
p.terminate()

Ответ 2

Я знаю, что я немного опаздываю в игру на этом, но это довольно фантастический проект для синтеза и аудио композиции python: https://github.com/hecanjog/pippi

Он все еще активно развивается, но на какое-то время он идет.

Ответ 4

После траты времени на некоторые несовместимые или несуществующие проекты я обнаружил модуль python wavebender, который предлагает создание одного или нескольких каналов синусоидальных, квадратных и комбинированных волн. Результаты могут быть записаны либо в wavefile, либо в sys.stdout, откуда они могут быть напрямую интерпретированы aplay в режиме реального времени. Некоторые полезные примеры объясняются здесь и включены в проект страница github.

Ответ 5

Я нашел эти два репозитория python очень полезными, возможно, хочу посмотреть на него...

python https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder

ipython: https://timsainb.github.io/spectrograms-mfccs-and-inversion-in-python.html

[EDIT] Как указано, здесь объясняется две ссылки

python, похоже, есть ошибка, но многие люди смогли запустить его, поэтому я не уверен. ipython работал как шарм, поэтому я надеюсь, что вы сможете его запустить.

Обе ссылки должны воспринимать аудио как вход, предпочтительно .wav. Featurize it (USE FFT: 512, размер шага = 512/8) для получения спектрограмм (вы можете даже визуализировать его), это 2D-матрица, а затем тренировать объекты машинного обучения или делать все, что хотите, с помощью матрицы, которая представляет оригинал аудио. Если вы хотите, в любой точке, что эти векторы представляют, вы также можете повторно синхронизировать звук.

Ответ 6

Мне нравится PyAudiere, который позволяет воспроизводить массивы numpy в виде звуков... Я думаю, что это хорошо подходит для моего фона Matlab. Я считаю, что это кросс-платформенный. Я думаю, scikits.audiolab делает то же самое, и может быть более актуальным/лучше поддерживается... мне кажется легче, чем пытаться спасти вещи как wavfiles или записать их в буферы и использовать встроенную звуковую библиотеку Python.

Ответ 7

Я работаю над мощным синтезатором в python. Я использовал пользовательские функции для записи непосредственно в WAV файл. Существуют встроенные функции, которые можно использовать для этой цели. Вам нужно будет изменить заголовок .wav, чтобы отобразить частоту дискретизации, бит на выборку, количество каналов и продолжительность синтеза.

Вот ранняя версия генератора сильной волны, которая выводит список значений, которые после применения bytearray становятся подходящими для записи в параметр данных волнового файла. [edit] Функция преобразования должна преобразовать список в маленькие значения endian hex перед применением bytearray. Подробнее см. В формате WAVE PCM в формате звукового файла ниже. [/edit]

def sin_basic(freq, time=1, amp=1, phase=0, samplerate=44100, bitspersample=16):
    bytelist = []
    import math
    TwoPiDivSamplerate = 2*math.pi/samplerate
    increment = TwoPiDivSamplerate * freq
    incadd = phase*increment
    for i in range(int(samplerate*time)):
        if incadd > (2**(bitspersample - 1) - 1):
            incadd = (2**(bitspersample - 1) - 1) - (incadd - (2**(bitspersample - 1) - 1))
        elif incadd < -(2**(bitspersample - 1) - 1):
            incadd = -(2**(bitspersample - 1) - 1) + (-(2**(bitspersample - 1) - 1) - incadd)
        bytelist.append(int(round(amp*(2**(bitspersample - 1) - 1)*math.sin(incadd))))
        incadd += increment
    return bytelist

В более новой версии могут использоваться формы сигналов для модуляции частоты, амплитуды и фазы параметров осциллограммы. Формат данных делает тривиальным смешивать и объединять волны вместе. Если это похоже на ваш переулок, посмотрите WAVE PCM soundfile format.