Рубрики
Без рубрики

Ретро звуковые эффекты в Python

Узнайте, как сделать захватывающие ретро звуковые эффекты с программированием Python. Создавайте взрывы, Bleeps и гулять, которые звучат, как ранние аркадные игры.

Автор оригинала: Robin Andrews.

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

В моей юности я провел много времени, играл в игры (а также программирование в базовом) на то, что тогда были современные домашние компьютеры, такие как ZX Spectrum и BBC Micro Computer Отказ Эти компьютеры имели несколько отличных функций с точки зрения создания звуков, которые довольно сложно воспроизвести с использованием современных языков.

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

Функция get_sound () В приведенном ниже приведенном ниже, позволяет создавать образцы, основанные либо на цифрах фортепиано, либо меньшими интервалами шага. Одним из примеров приведен для воспроизведения незначительного масштаба Natura – A B C D E F G A ' Отказ

Для того, чтобы использовать функцию, вам нужно будет установить Simpleaudio пакет а также numpy Отказ Simpleaudio Мангис фактическое звуковое производство, а numpy используется для математики, которые создают образцы.

Я установил частоту дискретизации на очень низкое значение 8000 Так как мы не ищем звук Hi-Fidelity – просто хорошие старые звуковые звуки и гудит.

ПРЕДУПРЕЖДЕНИЕ. Поверните свои динамики перед тем, как попробовать этот код, чтобы защитить уши и динамики!

Вот разрыв того, что делает функция:

  • Формулы для преобразования значений примечания на частоты, либо с 12 семитонами на октаву или 48
  • Создание целой кучей значений для базы образца на грех функция
  • Усиливайте значения в крупнейшее 16-битное положительное целое число, также с учетом аргумента громкости
  • Ручка отсечения. Если у вас есть громкий звук, который внезапно откажется, это звучит плохо. Эта часть кода сглаживается от клиппирования во многих случаях

Получение творчества с ретро звуковыми эффектами в Python

Я дал вам основу с кодом ниже для производства ретро звуковых эффектов в Python. Остальное действительно зависит от вас. Есть так много способов использовать эту функциональность.

В первые дни компьютерных звуковых эффектов они, возможно, не думали об этом, как это, но они в основном участвуют в Алгоритмический состав И теперь вы тоже можете.

Вот несколько вещей, чтобы попробовать:

  • Генерация случайных смол
  • Использование петлей для перемещения через последовательности смол
  • Использование оператора модулей ( % ), чтобы обернуть смолы в определенный диапазон.
  • Создание странных и замечательных звуковых эффектов или просто хорошая старомодная чиптуна

Ретро звуковые эффекты в Python – список кодов

import numpy as np
import simpleaudio as sa

SAMPLE_RATE = 8000


def get_sound(note, duration, volume=0.5):
    time_vector = np.linspace(0, duration, int(duration * SAMPLE_RATE), False)
    # frequency = 440 * 2 ** ((note - 49) / 12)  # 440Hz is key 49 on a piano
    frequency = 220 * 2 ** (note / 48)
    # Generate audio samples
    audio = np.sin(frequency * time_vector * 2 * np.pi)
    # normalize to 16-bit range
    audio *= volume * 32767 / np.max(np.abs(audio))

    # Fade out the end
    release_time = 0.05  # Seconds
    if duration >= release_time:
        release_samples = int(np.ceil(release_time * SAMPLE_RATE))
        fade_curve = np.linspace(volume, 0.0, num=release_samples)
        audio[-release_samples:] *= fade_curve

    # convert to 16-bit data
    audio = audio.astype(np.int16)
    return audio


##scale = [get_sound(note, 0.5) for note in [49, 51, 52, 54, 56, 57, 59, 61]]
##for note in scale:
##    wave_object = sa.WaveObject(note, 1, 2, SAMPLE_RATE)
##    play_object = wave_object.play()
##    play_object.wait_done()

blips = [get_sound(i, 0.1) for i in range(48, 92, 1)]

for blip in blips:
     wave_object = sa.WaveObject(blip, 1, 2, SAMPLE_RATE)
     play_object = wave_object.play()
     play_object.wait_done()

blips = [get_sound(i, 0.1) for i in range(48, 92, 1)]

for blip in blips[::-1]:
     wave_object = sa.WaveObject(blip, 1, 2, SAMPLE_RATE)
     play_object = wave_object.play()
     play_object.wait_done()

Я надеюсь, что вы веселитесь, делая ретро звуковые эффекты с Python – дайте мне знать в комментариях, как вы находитесь.

Счастливые вычисления. 🙂.