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 |
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
| 모듈 | 역할 |
|---|---|
: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 |
- Kotlin Multiplatform - 크로스플랫폼 비즈니스 로직 공유
- Compose Multiplatform - 크로스플랫폼 선언형 UI
- Material 3 - 모던 디자인 시스템 기반 UI
- AudioRecord / AudioTrack - 저수준 오디오 녹음/재생 API
- Jetpack Compose - 네이티브 Android UI
- AndroidX Core / Lifecycle - Android 플랫폼 라이브러리
- AVFoundation -
AVAudioRecorder,AVAudioPlayer - SwiftUI - Compose View 호스팅
- UIKit -
UIViewControllerRepresentable브릿지
- Gradle 8.11 - 빌드 시스템
- Kotlin 2.0+ - 프로그래밍 언어
- Xcode 16+ - iOS 빌드
- JDK 11+
- Android Studio (Android 빌드용)
- Xcode 16+ (iOS 빌드용, macOS 전용)
# Debug 빌드
./gradlew :composeApp:assembleDebug
# 디바이스에 설치 및 실행
./gradlew :composeApp:installDebug# Shared Framework 빌드
./gradlew :shared:linkDebugFrameworkIosSimulatorArm64
./gradlew :composeApp:linkDebugFrameworkIosSimulatorArm64
# Xcode에서 빌드 및 실행
open iosApp/iosApp.xcodeproj
# Xcode에서 Run (Cmd + R)# 클린 빌드 및 동기화
./sync_project.shMemoluce만의 미니멀하고 세련된 디자인 시스템을 적용했습니다.
| 용도 | 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.

