skillok meeting
ade9583c661cc1280b544b11b9e57c1c48bba461
Перейти к файлу
Код
meeting cratesaudioexamplesdecode.rs
anc Ядро: встреча = заметка Markdown, всё по кнопке - Убрана автоматика: слежение за Zoom, окно согласия, трей, уведомления, автозапуск, живая расшифровка, разбор по JSON-схеме. - Встреча — note.md и дорожки звука; правка, дописывание, переименование, удаление. - «Добавить аудио»: чтение mp3, m4a, wav, aiff, flac, ogg (symphonia), потоковое приведение к 16 кГц моно. - «Расшифровать»: нарезка по паузам с обрезкой тишины в начале куска, до 4 кусков сразу, повтор, пометка нераспознанного, блок «Расшифровка». - Команды ИИ над заметкой: «Конспект», «Задачи», «Ревью», свой запрос; промпты файлами в prompts/. - «Записать» по кнопке: дорожки Zoom и микрофона в WAV, пауза, стоп. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> ad47f89 30 сентября 2026 г.
decode.rs
//! Проба декодера: `cargo run -p meet-audio --example decode -- файл.m4a`.
//! Печатает длительность и сколько в файле речи по нарезчику.

use meet_audio::chunker::{Chunker, Config};
use meet_audio::decode::decode_file;
use meet_audio::pcm::samples_to_ms;

fn main() {
    for path in std::env::args().skip(1) {
        match decode_file(std::path::Path::new(&path)) {
            Ok(samples) => {
                let mut c = Chunker::new(Config::default());
                let mut chunks = c.push(samples_to_ms(samples.len()), &samples);
                chunks.extend(c.flush());
                let speech: u64 = chunks.iter().map(|c| c.speech_ms).sum();
                println!(
                    "{path}: {} мс, кусков {}, речи {} мс",
                    samples_to_ms(samples.len()),
                    chunks.len(),
                    speech
                );
            }
            Err(e) => println!("{path}: {e}"),
        }
    }
}