Автор оригинала: 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 – дайте мне знать в комментариях, как вы находитесь.
Счастливые вычисления. 🙂.