Skip to main content

sk_speech

sk_speech — исследовательский Python-пакет для анализа, измерения, преобразования, синтеза и визуализации речи. Он объединяет акустические методы Praat/Parselmouth, Librosa и SciPy с собственными алгоритмами обработки F0, формант F1–F5, интенсивности, гласных, шума, просодии и физиологических параметров голосообразования.

Python Tests

Обзор возможностей sk_speech

Обзор направлений пакета: анализ и преобразование речи, исследование акустической динамики и экспериментальные модели голосообразования.

Пакет предназначен для широкого спектра задач исследования и программного преобразования речи: от получения покадровых акустических рядов до комплексного профиля говорящего, анализа гласных, синтеза сигналов и моделирования голосового тракта.

Области применения

Акустический анализ

  • основной тон F0: частота, диапазон, энергия, интенсивность, амплитуда, ширина полосы, длительность, наклон и периодические изменения;
  • форманты F1–F5: частоты, полосы, энергия, интенсивность, амплитуда, длительность, траектории и взаимные расстояния;
  • общая интенсивность и относительная амплитуда речи;
  • спектральный наклон, спектральная плоскость, PSD и тембральные признаки;
  • темп, ритм, паузы, длительность озвученных участков и скорость речи;
  • длина голосового тракта и связанные резонансные оценки.

Покадровые последовательности и калибровка

  • синхронизированные временные ряды F0, интенсивности и маски озвученных кадров;
  • нейтральный калибровочный профиль говорящего;
  • абсолютные и относительные отклонения от нейтрального профиля;
  • экспорт последовательностей в CSV для статистического анализа и моделей ML.

Классификация режима речи

  • тихая и громкая речь;
  • шёпот и крик;
  • доля тишины и границы речевых участков;
  • ясность формант и комплексный диагностический отчёт.

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

Преобразование голоса

  • сдвиг, выравнивание, масштабирование диапазона и изменение наклона F0;
  • изменение энергии, амплитуды и ширины полосы основного тона;
  • независимый сдвиг, усиление и изменение ширины F1–F5;
  • изменение интенсивности и плавное изменение громкости;
  • ускорение и замедление речи, периодическая модуляция скорости;
  • комплексное преобразование речи по рассчитанному акустическому профилю.

Гласные и временная структура

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

Шум и фильтрация

  • RMS, спектральная плоскость и спектральная плотность мощности;
  • оценка наличия и уровня шума несколькими методами;
  • спектральное вычитание и шумовой профиль;
  • ФНЧ, ФВЧ, полосовой, медианный и сглаживающие фильтры;
  • адаптивный LMS-фильтр;
  • ERB- и гамматонный банк фильтров с адаптацией к F0 и формантам.

Синтез и физическое моделирование

  • генерация гармонических и формантных сигналов;
  • синтез звука по динамике частоты, полосы и интенсивности;
  • модели площади голосовой щели, воздушного потока и субглотического давления;
  • оценки сопротивления дыхательных путей, числа Рейнольдса и SPL;
  • экспериментальные модели дыхания, сердца, давления, гормонов и метаболизма.

Визуализация и пакетная обработка

  • траектории F0 и формант;
  • спектры, PSD, спектрограммы и спектральный наклон;
  • границы гласных и сравнение сигналов до и после преобразования;
  • обработка каталогов WAV-файлов и подготовка сериализуемых профилей.

Установка

Из PyPI:

python -m pip install sk-speech

Актуальная версия ветки main из GitHub:

python -m pip install "git+https://github.com/iproxy3d/sk_speech.git"

Для разработки и запуска примеров:

git clone https://github.com/iproxy3d/sk_speech.git
cd sk_speech
python -m pip install -e ".[dev,examples]"

Необязательные расширения устанавливаются только для использующих их задач:

# Нейросетевая оценка F0 методом PENN
python -m pip install "sk-speech[penn]"

# Сдвиг высоты тона через pyrubberband
python -m pip install "sk-speech[rubberband]"

Расширение rubberband дополнительно требует системную консольную программу Rubber Band в PATH. Обычная установка sk-speech не загружает PENN, PyTorch или pyrubberband, поэтому эти зависимости не влияют на базовую установку под Windows и Linux.

Для чтения и записи форматов, которые soundfile не поддерживает напрямую, pydub может дополнительно потребовать установленный ffmpeg. Интерактивные примеры требуют аудиоустройства и оконной среды.

Быстрый старт

Комплексный акустический профиль

import librosa
from sk_speech import sk_volume

y, sr = librosa.load("speech.wav", sr=None, mono=True)
profile = sk_volume.get_speech_params(y, sr)

print(profile["f0"]["freq"])
print(profile["f1"]["freq"], profile["f2"]["freq"])
print(profile["duration"], profile["speed"])
print(profile["vowels"])

get_speech_params() объединяет признаки F0, F1–F5, длительность, скорость, гласные, оценку пола и длину голосового тракта. Словарь options позволяет отключать ненужные и более дорогие вычисления.

Временные ряды F0 и интенсивности

from sk_speech import PitchConfig, PitchExtractor

extractor = PitchExtractor(
    PitchConfig(
        sample_rate=16_000,
        frame_step_s=0.01,
        pitch_floor_hz=50.0,
        pitch_ceiling_hz=800.0,
    )
)

track = extractor.from_file("speech.wav")
track.to_csv("pitch_features.csv")

print(track.time_s)
print(track.f0_hz)
print(track.intensity_db)
print(track.voiced)

f0_hz содержит NaN на неозвученных кадрах. intensity_db — широкополосная интенсивность Praat на той же временной сетке. Для обычной цифровой записи это относительный уровень; физический dB SPL требует калибровки всей измерительной цепочки.

Нейтральный профиль говорящего

from sk_speech import PitchExtractor, PitchProfile, calibrate_pitch, normalize_pitch

extractor = PitchExtractor()
profile = calibrate_pitch(extractor.from_file("neutral.wav"))
profile.save("pitch_profile.json")

normalized = normalize_pitch(
    extractor.from_file("current.wav"),
    PitchProfile.load("pitch_profile.json"),
)
normalized.to_csv("normalized_pitch.csv")

Нормализованный ряд содержит относительное отклонение F0, отклонение F0 в герцах, разность интенсивности в децибелах и маску озвученных кадров.

Форманты F1–F5

import librosa
from sk_speech import sk_formants

y, sr = librosa.load("speech.wav", sr=None, mono=True)
formants = sk_formants.get_formant_info(y, sr)

for index in range(1, 6):
    value = sk_formants.get_formant_frequency_by_index(
        y, sr, index, formants=formants
    )
    print(f"F{index}: {value:.1f} Hz")

Детектирование режима речи

import librosa
from sk_speech import sk_detection

y, sr = librosa.load("speech.wav", sr=None, mono=True)

result = {
    "soft": sk_detection.is_soft_speech(y, sr),
    "loud": sk_detection.is_loud_speech(y, sr),
    "whisper": sk_detection.is_whisper(y, sr),
    "scream": sk_detection.is_scream(y, sr),
}
print(result)

Оценка и подавление шума

import librosa
import soundfile as sf
from sk_speech import sk_noise

y, sr = librosa.load("noisy.wav", sr=None, mono=True)
report = sk_noise.analyze_noise_level(y, sr)
clean = sk_noise.noise_reduction_spectral_subtraction(y, sr)

print(report)
sf.write("clean.wav", clean, sr)

Преобразование F0, формант и скорости

import librosa
import soundfile as sf
from sk_speech import sk_formants, sk_pitch

y, sr = librosa.load("speech.wav", sr=None, mono=True)
y = sk_pitch.change_pitch_shift_hz(y, sr, pitch_shift_hz=20)
y = sk_formants.change_formant_frequencies(
    y, sr, frequency_factors=[1.04, 1.03, 1.02, 1.01, 1.0]
)
y = sk_pitch.change_audio_speed(y, sr, begin_speed=1.0, end_speed=1.1)

sf.write("transformed.wav", y, sr)

Модули пакета

Модуль Назначение
sk_speech.pitch Высокоуровневые временные ряды F0 и интенсивности, калибровка и CSV
sk_speech.sk_pitch Расширенный анализ и преобразование F0, просодии, ритма и тембра
sk_speech.sk_formants Анализ, динамика, паттерны, синтез и преобразование F1–F5
sk_speech.sk_volume Комплексные профили речи, векторы и составные преобразования
sk_speech.sk_vowels Границы, типы, статистика и преобразование гласных
sk_speech.sk_detection Тихая/громкая речь, шёпот, крик, паузы и ясность
sk_speech.sk_noise Метрики шума, PSD и шумоподавление
sk_speech.sk_filters Временные, частотные, LMS-, ERB- и гамматонные фильтры
sk_speech.sk_gammatone Адаптивная гамматонная обработка
sk_speech.sk_plot Визуализация акустических признаков и преобразований
sk_speech.sk_signal Гармонический и параметрический синтез сигналов
sk_speech.sk_vocal_tract Расчёты длины голосового тракта и резонансов
sk_speech.sk_vocal_cords Голосовая щель, поток, давление, сопротивление и SPL
sk_speech.regulators Экспериментальные физиологические регуляторы речи

Документация начинается с навигационной страницы. Отдельно доступны помодульный справочник API, руководство «С чего начать», руководство по экспериментальному моделированию дыхания и голосообразования и каталог готовых примеров.

Структура репозитория

sk_speech/
├── src/
│   └── sk_speech/       # импортируемый Python-пакет
│       ├── pitch/       # высокоуровневый API F0 и интенсивности
│       └── data/        # встроенные JSON- и WAV-ресурсы
├── examples/            # готовые сценарии анализа и преобразования
├── docs/                # руководства и помодульный справочник API
│   └── api/             # отдельные файлы API по модулям
├── tests/               # автоматические тесты
├── tools/               # инструменты сопровождения документации
└── pyproject.toml       # сборка, зависимости и метаданные пакета

Каталог src/ намеренно является корнем исходного кода, а src/sk_speech/ — самим импортируемым пакетом. Это стандартная src layout структура Python-проектов: она отделяет исходники от файлов репозитория и не позволяет тестам случайно импортировать неустановленную локальную копию. После установки путь src не появляется в имени импорта:

import sk_speech

Тесты

python -m pytest

GitHub Actions запускает тесты на Python 3.10, 3.11 и 3.12.

Лицензия

Пакет распространяется на условиях лицензии MIT.

Metadata

Release files for sk-speech 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sk-speech 0.1.0
File Size Uploaded Provenance Actions
sk_speech-0.1.0.tar.gz 5.3 MB With provenance Details for sk_speech-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sk-speech 0.1.0
File Interpreter ABI Platform Actions
sk_speech-0.1.0-py3-none-any.whl Python 3 none any Details for sk_speech-0.1.0-py3-none-any.whl

Total release size: 10.4 MB

Release files / sk_speech-0.1.0.tar.gz

Download URL sk_speech-0.1.0.tar.gz
Size 5.3 MB
Tags Source
SHA-256 checksum
How to use checksums
eee33bc737ce24353695acdac9dbc2a2508f6abbc3b325f546696d5096d93ea2
BLAKE2b-256 checksum
How to use checksums
1288f761608bbbd6e6d7f05b29bd34345b9acca06d637e270eca1b0136b5e539
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Release files / sk_speech-0.1.0-py3-none-any.whl

Download URL sk_speech-0.1.0-py3-none-any.whl
Size 5.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
32749e7c7f75c43feccdf25d93490b11a1db56efd1a8a415d33e2d71186f2f64
BLAKE2b-256 checksum
How to use checksums
ea848d69dfe555235927649569678a0d0e8bda966612b80d989b8184adb80a61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Security for sk-speech 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sk_speech-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page