В увлекательном мире редактирования аудио возможность управлять высотой звука открывает царство творческих возможностей. Независимо от того, являетесь ли вы музыкантом, звукорежиссером или просто любителем звука, возможность изменять высоту звука источника звука с помощью кода может оказаться ценным навыком. В этой статье мы рассмотрим различные методы достижения этой цели, используя разговорный язык и попутно предоставляя примеры кода.
Метод 1: растяжение по времени
Одним из распространенных подходов к изменению высоты тона является растяжение по времени. Изменяя длительность аудиосэмпла, сохраняя при этом его высоту, мы можем эффективно изменить воспринимаемую высоту звука. Этого можно добиться с помощью таких библиотек, как Librosa в Python или SoundTouch в C++.
Вот пример использования Librosa в Python:
import librosa
audio, sample_rate = librosa.load('input.wav')
new_pitch = 2.0 # Desired pitch shift factor
stretched_audio = librosa.effects.time_stretch(audio, new_pitch)
librosa.output.write_wav('output.wav', stretched_audio, sample_rate)
Метод 2: изменение высоты звука
Другой метод — это изменение высоты звука, которое напрямую изменяет высоту звука источника звука. Этот метод можно реализовать с помощью таких библиотек, как Essentia в Python или библиотеки SoundTouch в C++.
Вот пример использования Essentia в Python:
import essentia.standard as ess
audio = ess.MonoLoader(filename='input.wav')()
new_pitch = 2.0 # Desired pitch shift factor
pitch_shifted_audio = ess.PitchShift()(audio, pitchShift=new_pitch)
ess.MonoWriter(filename='output.wav')(pitch_shifted_audio)
Метод 3: Гранулярный синтез
Дробильный синтез включает в себя разбиение аудиосэмпла на мелкие зерна и индивидуальное управление их высотой. Этот метод позволяет выполнять более точные и сложные изменения высоты звука. Язык программирования SuperCollider предоставляет мощные возможности детального синтеза.
Вот пример в SuperCollider:
s.boot;
// Load the audio sample
(
s.waitForBoot({
var audio, grains, pitchShift;
audio = Buffer.read(s, "/path/to/input.wav");
// Granular synthesis parameters
grains = GrainBuf.ar(2, Impulse.ar(8), 0.1, pitchShift: 2.0, buffer: audio);
// Output the pitch-shifted audio
Out.ar(0, grains);
}).add;
)
В этой статье мы рассмотрели несколько методов редактирования высоты звука источника звука с помощью кода. Используя методы растяжения во времени, изменения высоты тона и гранулярного синтеза, вы можете открыть мир возможностей для манипулирования звуком. Экспериментируйте с этими методами в своих проектах и позвольте своему творчеству развиваться!