Skip to content

tristanjung1006/memoluce-test

Repository files navigation

Memoluce

Kotlin Multiplatform (KMP)과 Compose Multiplatform을 활용한 크로스플랫폼 오디오 녹음 애플리케이션입니다. Android와 iOS에서 동일한 코드베이스로 네이티브 성능의 오디오 녹음 및 재생 기능을 제공합니다.

스크린샷

Android iOS

주요 기능

기능 설명
오디오 녹음 마이크를 통한 고품질 녹음 (44.1kHz, 16-bit PCM)
오디오 재생 저장된 녹음 파일 재생 및 진행률 표시
실시간 시각화 Waveform과 Level Indicator로 오디오 레벨 표현
녹음 목록 타임스탬프 기반 파일 저장 및 관리
크로스플랫폼 단일 코드베이스로 Android/iOS 동시 지원

개발 환경

항목 버전
Kotlin 2.0+
Compose Multiplatform 1.7+
Android Gradle Plugin 8.10+
Compile SDK 36
Min SDK 28
Target SDK 36
Java 11
Xcode 16+
Gradle 8.11

아키텍처

Kotlin Multiplatform (KMP) 구조

memoluce/
├── shared/                          # 공유 비즈니스 로직 모듈
│   └── src/
│       ├── commonMain/              # 공통 코드 (expect 선언)
│       │   └── domain/
│       │       └── AudioRecorder.kt # expect class 정의
│       ├── androidMain/             # Android 구현 (actual)
│       │   └── domain/
│       │       └── AudioRecorder.android.kt
│       └── iosMain/                 # iOS 구현 (actual)
│           └── domain/
│               └── AudioRecorder.ios.kt
│
├── composeApp/                      # Compose Multiplatform UI 모듈
│   └── src/
│       ├── commonMain/              # 공유 UI 코드
│       │   ├── App.kt               # 메인 앱 진입점
│       │   ├── ui/
│       │   │   ├── RecordingScreen.kt
│       │   │   ├── RecordingListScreen.kt
│       │   │   └── components/
│       │   │       ├── AudioWaveform.kt
│       │   │       └── AudioLevelIndicator.kt
│       │   ├── theme/               # Memoluce Design System
│       │   │   ├── Color.kt
│       │   │   ├── Theme.kt
│       │   │   ├── Type.kt
│       │   │   └── Shape.kt
│       │   └── icons/
│       │       └── MemoluceIcons.kt # 커스텀 벡터 아이콘
│       ├── androidMain/             # Android 플랫폼 코드
│       │   ├── MainActivity.kt
│       │   └── RecordingScreen.android.kt
│       └── iosMain/                 # iOS 플랫폼 코드
│           ├── MainViewController.kt
│           └── RecordingScreen.ios.kt
│
└── iosApp/                          # iOS Xcode 프로젝트
    └── iosApp/
        ├── iOSApp.swift
        └── ContentView.swift

모듈 의존성 그래프

graph TB
    subgraph "Platform Apps"
        ANDROID["📱 Android App"]
        IOS["🍎 iOS App"]
    end

    subgraph "composeApp"
        COMPOSE_COMMON["commonMain<br/>(Shared UI)"]
        COMPOSE_ANDROID["androidMain"]
        COMPOSE_IOS["iosMain"]
    end

    subgraph "shared"
        SHARED_COMMON["commonMain<br/>(Business Logic)"]
        SHARED_ANDROID["androidMain<br/>(AudioRecord/AudioTrack)"]
        SHARED_IOS["iosMain<br/>(AVFoundation)"]
    end

    ANDROID --> COMPOSE_ANDROID
    IOS --> COMPOSE_IOS

    COMPOSE_ANDROID --> COMPOSE_COMMON
    COMPOSE_IOS --> COMPOSE_COMMON

    COMPOSE_COMMON --> SHARED_COMMON

    SHARED_ANDROID --> SHARED_COMMON
    SHARED_IOS --> SHARED_COMMON

    style ANDROID fill:#a4c639,stroke:#689f38,color:#fff
    style IOS fill:#007aff,stroke:#0051a8,color:#fff
    style COMPOSE_COMMON fill:#7c4dff,stroke:#651fff,color:#fff
    style SHARED_COMMON fill:#00bcd4,stroke:#0097a7,color:#fff
Loading

모듈 역할

모듈 역할
:shared:commonMain expect class 정의, 공통 도메인 모델
:shared:androidMain AudioRecord/AudioTrack 기반 녹음/재생 구현
:shared:iosMain AVAudioRecorder/AVAudioPlayer 기반 구현
:composeApp:commonMain Compose Multiplatform UI, 테마, 아이콘
:composeApp:androidMain Android 권한 처리, MainActivity
:composeApp:iosMain iOS MainViewController
iosApp Xcode 프로젝트, SwiftUI 호스팅

플랫폼별 오디오 처리

기능 Android iOS
녹음 AudioRecord API AVAudioRecorder
재생 AudioTrack (PCM Streaming) AVAudioPlayer
파일 포맷 .pcm (Raw PCM) .caf (Core Audio Format)
샘플레이트 44,100 Hz 44,100 Hz
비트 뎁스 16-bit 16-bit
채널 Mono Mono

기술 스택

Core

  • Kotlin Multiplatform - 크로스플랫폼 비즈니스 로직 공유
  • Compose Multiplatform - 크로스플랫폼 선언형 UI
  • Material 3 - 모던 디자인 시스템 기반 UI

Android

  • AudioRecord / AudioTrack - 저수준 오디오 녹음/재생 API
  • Jetpack Compose - 네이티브 Android UI
  • AndroidX Core / Lifecycle - Android 플랫폼 라이브러리

iOS

  • AVFoundation - AVAudioRecorder, AVAudioPlayer
  • SwiftUI - Compose View 호스팅
  • UIKit - UIViewControllerRepresentable 브릿지

Build & Tools

  • Gradle 8.11 - 빌드 시스템
  • Kotlin 2.0+ - 프로그래밍 언어
  • Xcode 16+ - iOS 빌드

빌드 및 실행

요구사항

  • JDK 11+
  • Android Studio (Android 빌드용)
  • Xcode 16+ (iOS 빌드용, macOS 전용)

Android 빌드

# Debug 빌드
./gradlew :composeApp:assembleDebug

# 디바이스에 설치 및 실행
./gradlew :composeApp:installDebug

iOS 빌드

# Shared Framework 빌드
./gradlew :shared:linkDebugFrameworkIosSimulatorArm64
./gradlew :composeApp:linkDebugFrameworkIosSimulatorArm64

# Xcode에서 빌드 및 실행
open iosApp/iosApp.xcodeproj
# Xcode에서 Run (Cmd + R)

프로젝트 동기화

# 클린 빌드 및 동기화
./sync_project.sh

Design System

Memoluce만의 미니멀하고 세련된 디자인 시스템을 적용했습니다.

색상 팔레트

용도 Light Mode Dark Mode
Primary Neutral 950 White
Secondary Teal 600 Teal 400
Background White Neutral 950
Surface White Neutral 900

컴포넌트

  • AudioLevelIndicator: Teal/Purple gradient의 pulsing orb 애니메이션
  • AudioWaveform: Dynamic density와 depth 효과가 적용된 시각화
  • MemoluceIcons: Microphone, Play, Pause 등 커스텀 벡터 아이콘

라이선스

이 프로젝트는 비상업적 용도로만 사용 가능합니다.

Copyright (c) 2025 caraxes. All rights reserved.

About

24h AudioRecord App - Android / iOS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages