Как я могу создать графику звуковой волны с помощью генератора?
Вот как вы можете сделать это с помощью Python, используя библиотеки для создания звука и создания изображений:
1. Создать данные звуковой волны:
Эта часть создает числовые данные, представляющие звуковую волну. Мы используем `numpy` для численных вычислений и` scipy` для создания различных сигналов.
`` Python
импортировать Numpy как NP
Импорт matplotlib.pyplot как plt
Импорт scipy.io.wavfile как wav
от Scipy.Signal Import Sawtooth, Square
Параметры
частота =440 # Гц (примечание A4)
Продолжительность =2 # секунды
Sample_Rate =44100 # Гц (стандартная аудиокаума)
амплитуда =0,8 # сохранить его ниже 1, чтобы избежать обрезки
Вектор времени
t =np.linspace (0, продолжительность, int (sample_rate * duration), endpoint =false)
Выберите форму волны (синус, квадрат, пилот и т. Д.)
#waveform =np.sin (2 * np.pi * Частота * t) * Амплитуда # синусная волна
#waveform =square (2 * np.pi * частота * t) * амплитуда # квадратная волна
WAYSFORM =SAWTOOTH (2 * NP.PI * Частота * T) * Амплитуда # Sawtooth Wave
#Optional:добавьте немного шума
шум =np.random.normal (0, 0,1, len (форма волны))
форма волны +=шум
Нормализуйте, чтобы избежать обрезки (важно для аудио -вывода)
waveform =waveform / np.max (np.abs (форма волны))
#Optional:Сохранить как файл wav
wav.write ("output.wav", sample_rate, waveform.astype (np.float32)))
`` `
2. Создайте графику:
Эта часть принимает сгенерированные данные звуковой волны и разбирается с использованием `matplotlib`.
`` Python
Построить форму волны
Plt.Figure (FigSize =(10, 4))
plt.plot (t, форма волны)
plt.xlabel ("Время (S)")
plt.ylabel ("амплитуда")
plt.title ("звуковая форма волны")
plt.grid (true)
plt.savefig ("sound_wave.png") #save как png
plt.show ()
`` `
Полный код:
`` Python
импортировать Numpy как NP
Импорт matplotlib.pyplot как plt
Импорт scipy.io.wavfile как wav
от Scipy.Signal Import Sawtooth, Square
Параметры
частота =440 # Гц (примечание A4)
Продолжительность =2 # секунды
Sample_Rate =44100 # Гц (стандартная аудиокаума)
амплитуда =0,8 # сохранить его ниже 1, чтобы избежать обрезки
Вектор времени
t =np.linspace (0, продолжительность, int (sample_rate * duration), endpoint =false)
Выберите форму волны
waveform =Sawtooth (2 * np.pi * Частота * t) * амплитуда
#Optional:добавьте немного шума
шум =np.random.normal (0, 0,1, len (форма волны))
форма волны +=шум
Нормализуйте, чтобы избежать обрезания
waveform =waveform / np.max (np.abs (форма волны))
#Optional:Сохранить как файл wav
wav.write ("output.wav", sample_rate, waveform.astype (np.float32)))
Построить форму волны
Plt.Figure (FigSize =(10, 4))
plt.plot (t, форма волны)
plt.xlabel ("Время (S)")
plt.ylabel ("амплитуда")
plt.title ("звуковая форма волны")
plt.grid (true)
plt.savefig ("sound_wave.png")
plt.show ()
`` `
Этот код будет:
1. Сгенерируйте волну пилообразной (вы можете легко изменить ее на синусоидальные, квадратные или другие формы волны, используя функции `scipy.signal ').
2. При желании добавьте шум, чтобы сделать его более реалистичным.
3. Нормализуйте форму волны, чтобы предотвратить обрезку.
4. При желании сохранить его в виде файла WAV.
5. Создать и сохранить изображение PNG амплитуды звуковой волны с течением времени.
Не забудьте установить необходимые библиотеки:`numpy`,` matplotlib` и `scipy '. Вы можете установить их с помощью PIP:`PIP установить Numpy Matplotlib Scipy`