audio_waveform_kit 1.1.1
audio_waveform_kit: ^1.1.1 copied to clipboard
Audio recording with waveform and spectrum visualization
1.1.0 #
Features #
AudioWaveformScope— опциональный параметрrecordingService: позволяет подставить свою реализациюAudioRecordingService(например, пишущую PCM на диск по ходу записи вместо накопления в памяти, или работающую в foreground service) и при этом пользоваться виджетами и блоком пакета. Приnullповедение прежнее — scope сам создаётAudioRecordingServiceImplи освобождает его. Переданный извне сервис scope не диспозит: его жизненным циклом управляет вызывающая сторона
1.0.1 #
Fixes #
AudioRecordingBloc— убран повторныйdispose()AudioRecordingService: при демонтажеAudioWaveformScopeсервис закрывался дважды (вBloc.close()и вRepositoryProvider.dispose), что могло бросать исключение на уже освобождённомAudioRecorder. Теперь жизненным циклом сервиса управляет только DI-scopeStringSnapshotPainter— исправленыNaN-координаты пути при снапшоте из одного сэмплаTimelineSpectrumPainter— исправлено деление на ноль приSpectrumConfig.frequencyBands == 1LiveSpectrumDisplay,SpectrumDisplay— чтениеspectrumConfigвbuild()переведено сcontext.read()наcontext.select()AudioWaveformPlayer— убран небезопасныйcontext.findRenderObject()!в пользу явной проверки наnullWaveformDisplay,RecordingLevelDisplay,StringSnapshotDisplay,MessengerWaveformDisplay,LiveSpectrumDisplay— сравнение списков сэмплов вbuildWhenпереведено с!=(по ссылке) наListEquality(по содержимому)AudioRecordingBloc— дефолтmaxSnapshotSamplesприведён к2048, согласован с дефолтомAudioWaveformScope
Changes #
WaveformStyleперенесён изwidgets/waveform_display.dartвpainters/waveform_painter.dart— устранена обратная зависимость painter → widget; публичный API не изменился (WaveformStyleпо-прежнему доступен изaudio_waveform_kit.dart)- Добавлен
AudioRecordingState$Finished.toRecordingResult()— единая точка маппинга state вRecordingResultвместо ручной сборки вAudioRecordButton collectionдобавлен в прямые зависимости пакета (ранее использовался транзитивно)
1.0.0 #
Features #
AudioWaveformScope— DI-scope виджет; оборачивает дерево и предоставляетAudioRecordingService,SpectrumAnalyzerиAudioRecordingBlocAudioRecordButton— кнопка записи/остановки с фабричным конструкторомdefaultStyle()RecordingTimer— отображение прошедшего времени записиAudioWaveformPlayer— самодостаточный виджет воспроизведения с прогресс-баром; работает с файлом (native) и WAV-байтами (web)
Визуализация (live, во время записи)
WaveformDisplay— огибающая волновой формы; стилиWaveformStyle.envelopeиWaveformStyle.stringMessengerWaveformDisplay— RMS-волновая форма в стиле мессенджераRecordingLevelDisplay— VU-метр реального времениLiveSpectrumDisplay— живой FFT-спектр, обновляется каждые 50 мсStringSnapshotDisplay— осциллограф из сырых PCM-семплов
Визуализация (static, после записи)
SpectrumDisplay— FFT-спектр; линейный и логарифмический режимыTimelineSpectrumDisplay— тепловая карта время–частотаStaticLevelDisplay— статический VU-метрStaticMessengerWaveformDisplay— статическая RMS-волновая формаStaticStringSnapshotDisplay— статическая осциллограмма
BLoC и состояния
AudioRecordingBloc— конечный автомат записи:$Idle → $Recording → $Finished / $Error; события$Start,$Stop,$ResetAudioPlayerBloc— конечный автомат воспроизведения:$Idle / $Playing / $Paused / $Completed / $Error; события$Play,$Pause,$Stop,$Seek
Анализ и модели
SpectrumAnalyzer— чистый Dart FFT с оконной функцией Ханна, 50 % перекрытием, авто-нормализацией; методыanalyze(),computeTimeline(),analyzeRaw()SpectrumConfig— настройки FFT:fftSize,frequencyBands,frequencyMin/Max,sampleRate,dynamicRangeDb,displayTypeRecordingResult— контейнер результата:filePath,wavBytes,duration,waveformSamples,rmsSamples,snapshotSamples,spectrumData,spectrumTimeline
Утилиты
AudioUtils—encodeWav(),wavToSamples(),formatDuration()PlatformUtils—isWeb,hasMicrophonePermission()
Platform support #
| Platform | Recording | Playback |
|---|---|---|
| Android | ✓ file | ✓ file |
| iOS | ✓ file | ✓ file |
| macOS | ✓ file | ✓ file |
| Windows | ✓ file | ✓ file |
| Linux | ✓ file | ✓ file |
| Web | ✓ WAV bytes | ✓ WAV bytes |