Skip to content

Add sound support for image carousels #119

@knotbin

Description

@knotbin

Summary

Add support for attaching and playing reusable sounds on image and carousel posts.

Motivation

Reusable sounds currently work naturally for videos because the rendered video already contains the actual audio. The post-level sound reference is only an indicator/indexing reference for discoverability, attribution, and sound pages.

Images and carousels do not contain audio, so using a sound there requires explicit client playback behavior in addition to the existing sound reference.

Context

Related code:

  • Image/carousel posting: lib/src/core/network/atproto/data/repositories/feed_repository_impl.dart
  • Image review flow: lib/src/features/posting/ui/pages/image_review_page.dart
  • Feed post sound hydration/display: lib/src/core/network/atproto/data/models/feed_models.dart
  • Sound picker/editor plumbing under lib/src/core/pro_video_editor/

The lexicon shape already allows so.sprk.feed.post#sound alongside image media, so, as far as I know, there aren't any changes on the server that are needed.
The main client work is likely selecting a sound for image posts and playing the hydrated sound audio for static media.

Proposed direction

  • Let image/carousel posts select a reusable sound during creation.
  • Persist the selected sound as the post-level sound strong ref.
  • For videos, keep current behavior: do not derive playback from sound; use the video's embedded audio.
  • For images/carousels, play the hydrated sound audio when the post is active/visible.
  • Treat carousel sound as post-level continuous audio, not per-image audio.

Acceptance criteria

  • Image and carousel posts can be created with a selected reusable sound.
  • Sound pages include image/carousel posts that use the selected sound.
  • Static media posts with sounds play audio in-feed without affecting video sound behavior.
  • Visibility, pause/resume, and carousel swipes do not cause obvious audio desync or unintended restarts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions