Александр Иванов – Python для творческих. Звук на твоей стороне. (страница 4)
Независимо от выбранного сценария, помните главное: вы не обязаны проходить книгу от корки до корки. Глава 4 не требует прочтения Глав 1–3. Каждая глава самодостаточна. Захотелось прямо сейчас сделать радио-голос — открыли Главу 9 и сделали. Потом понадобилось убрать шум — вернулись к Главе 4. Книга — это набор инструментов, а не роман с сюжетом. Используйте ее как удобно.
Глава 1. Знакомимся со звуком через Python
О чём эта глава
Вы когда-нибудь открывали аудиофайл в программе и видели перед собой волны, пики и провалы? Вы смотрите на них и, возможно, думаете: «Красиво, но что с этим делать?» В этой главе мы научимся не просто смотреть на звук, а понимать его. Мы загрузим аудиофайл в Python, разберём его на составные части и узнаем о нём то, что невозможно узнать ушами. Мы узнаем его точную длительность, громкость, количество тишины и речи. А главное — мы поймём, как компьютер представляет звук внутри себя. Это фундамент, на котором строится вся дальнейшая работа. Без этого фундамента нельзя двигаться дальше, как нельзя строить дом без знания того, из чего сделан фундамент. Мы начнём с самых основ, и я обещаю: если вы никогда в жизни не писали код, через час вы напишете свой первый работающий скрипт и он сделает что-то полезное.
Что такое звук для компьютера
Давайте начнём с простого вопроса. Вы слышите музыку, голос, шум улицы. Это всё — звук. Но что такое звук для компьютера? Компьютер не имеет ушей. Он не слышит так, как слышим мы с вами. Для компьютера звук — это просто очень длинный список чисел. Представьте себе линейку, на которой вы отмечаете высоту волны в каждый момент времени. Или представьте, что вы фотографируете поверхность воды в озере много тысяч раз в секунду. Каждая фотография показывает вам одно число: насколько высоко поднялась вода в этой точке. Сложите все эти числа в ряд — и вы получите цифровое представление звука.
Этот ряд чисел называется аудиосигналом. Когда вы записываете голос на телефон, микрофон телефона колеблется от вашего голоса. Специальная электронная схема измеряет положение микрофона много тысяч раз в секунду и записывает каждое измерение в виде числа. Чем чаще происходят измерения, тем точнее запись. Стандартное значение — сорок четыре тысячи сто измерений в секунду для музыки и двадцать две тысячи пятьдесят для речи. Это называется частотой дискретизации. Звучит сложно, но суть простая: это просто количество чисел, которое компьютер сохраняет за одну секунду звука. Двадцать две тысячи чисел в секунду для речи — это более чем достаточно. Человеческий голос не забирается так высоко по частоте, как музыка, поэтому речь можно записывать с меньшей плотностью чисел, и качество не пострадает.
Почему именно такие числа, а не круглые двадцать тысяч или пятьдесят тысяч? Тут есть интересная история. Существует правило, открытое инженерами Найквистом и Шенноном: чтобы точно записать звук определённой высоты, нужно делать измерения как минимум вдвое чаще, чем колеблется сам звук. Человеческое ухо слышит звуки примерно до двадцати тысяч колебаний в секунду. Значит, чтобы записать всё, что слышит человек, нужно не менее сорока тысяч измерений в секунду. На аудиодисках используется сорок четыре тысячи сто — это чуть больше сорока тысяч, взятое с запасом. А двадцать две тысячи пятьдесят — это ровно половина от дискового стандарта, чего вполне хватает для голоса. Голос редко поднимается выше восьми тысяч колебаний в секунду, поэтому двадцати двух тысяч измерений более чем достаточно. Такой выбор экономит место на диске и ускоряет обработку. Одна минута речи в таком качестве занимает около двух с половиной мегабайт — сущий пустяк для современного компьютера.
Теперь давайте представим сам список чисел. Каждое число в этом списке — это значение громкости в конкретный момент. Обычно эти числа лежат в диапазоне от минус единицы до плюс единицы. Минус один — это максимальная громкость в отрицательном направлении, когда мембрана динамика уходит назад. Плюс один — максимальная громкость вперёд. Ноль — это тишина, положение покоя. Реальный звук колеблется вокруг нуля: то в плюс, то в минус, то снова в плюс. Если вы посмотрите на эти числа, то увидите, как они танцуют вокруг нуля. Громкий звук — это большие числа, близкие к единице или минус единице. Тихий звук — это маленькие числа, близкие к нулю. Тишина — это почти ноль. Шум — это много маленьких случайных чисел, которые немного отклоняются от нуля, но не уходят далеко.
Установка всего необходимого
Прежде чем мы начнём работать со звуком, нам нужно подготовить инструменты. Это как перед приготовлением обеда: сначала достаём кастрюли и продукты, потом готовим. Нам понадобится Python — это язык программирования, на котором мы будем писать наши инструкции для компьютера. И нам понадобятся несколько библиотек — это готовые наборы инструментов для работы со звуком, которые другие программисты уже написали за нас. Мы не будем изобретать велосипед, а воспользуемся их трудом.
Установка Python — это очень просто. Идите на сайт python.org. Прямо на главной странице вы увидите большую кнопку «Download Python» с номером версии. Смело нажимайте её. Скачается установщик. Запустите его. На первом экране установщика обязательно поставьте галочку внизу, которая называется «Add Python to PATH». Эта галочка говорит компьютеру: «Запомни, где лежит Python, чтобы я мог запускать его из любой папки». Если пропустите эту галочку, потом придётся немного повозиться с настройками. Ничего страшного, просто переустановите Python ещё раз и на этот раз галочку поставьте. Дальше нажимайте «Install Now» и ждите минуту. Всё, Python на вашем компьютере.
Теперь проверим, что Python работает. Откройте программу «Командная строка», если у вас Windows — нажмите клавишу Windows, начните вводить слово «cmd», нажмите Enter. Если у вас Mac или Linux, откройте «Терминал». В появившемся чёрном окошке введите команду python --version и нажмите Enter. Если Python установился, вы увидите что-то вроде «Python 3.12.1» — номер версии. Если видите ошибку, скорее всего, вы не поставили ту самую галочку при установке. Переустановите Python, галочку поставьте, и всё получится.
Следующий шаг — установка библиотек. Библиотеки в Python — это как дополнительные кухонные приборы. Сам по себе Python умеет многое, но для работы со звуком ему нужны специальные инструменты. К счастью, установка библиотек делается одной командой. В той же командной строке введите по очереди три команды, нажимая Enter после каждой:
pip install librosa
pip install soundfile
pip install sounddevice
Каждая команда скачает из интернета нужную библиотеку и установит её. Вы увидите бегущие строчки с процентами — это нормально. Когда установка закончится, командная строка снова будет ждать вашего ввода. Это значит, всё прошло успешно.
Что делает каждая библиотека? librosa — это наш главный инструмент для работы со звуком. Она умеет загружать аудиофайлы, анализировать их, извлекать из них информацию. soundfile умеет сохранять обработанный звук обратно в файл. sounddevice умеет проигрывать звук прямо из кода, чтобы мы могли быстро проверить результат. Все три библиотеки бесплатны и созданы сообществом программистов со всего мира.
Теперь создайте на рабочем столе папку с любым названием, например audio_book. В этой папке мы будем хранить все наши скрипты и аудиофайлы. Порядок на компьютере — это важно. Когда все файлы лежат в одной папке, их легко найти и с ними удобно работать.
Ваш первый скрипт: загружаем аудио
Настал момент написать наш первый код. Не пугайтесь слова «код». Код — это просто инструкция для компьютера, записанная на особом языке. Если вы можете объяснить другому человеку, как сделать бутерброд, вы можете написать код. Это такое же пошаговое описание действий, только адресованное не человеку, а машине.
Откройте любой текстовый редактор. На Windows можно использовать Блокнот, но я рекомендую скачать бесплатную программу Visual Studio Code — она удобнее, потому что подсвечивает код разными цветами и помогает не ошибаться. Создайте новый файл и сохраните его в нашей папке с именем first_script.py. Расширение .py говорит компьютеру, что это программа на Python. Это важно: если вы сохраните файл как .txt, Python не поймёт, что это код.
Теперь впишите в файл следующие строчки. Не обязательно понимать прямо сейчас каждую из них — мы разберём всё по шагам сразу после того, как запустим. Просто напечатайте их внимательно, соблюдая все отступы и знаки препинания. В Python регистр букв имеет значение: Print и print — это разные слова для компьютера. Пишите всё маленькими буквами, как в примере.
python
import librosa
y, sr = librosa.load('my_voice.wav')
print("Файл загружен!")
print(f"Частота измерений: {sr} раз в секунду")
print(f"Длина записи: {len(y) / sr:.2f} секунд")
print(f"Всего чисел в файле: {len(y)}")
Нажмите «Сохранить». Теперь вернитесь в командную строку. Нам нужно перейти в папку, где лежит наш скрипт. В командной строке введите команду cd Desktop/audio_book и нажмите Enter. cd означает «change directory», то есть «сменить папку». Теперь командная строка находится внутри нашей рабочей папки.