import 'package:shared_preferences/shared_preferences.dart'; import 'package:smtias_capture/services/raw_capture_service.dart'; /// サウンドフィードバックの ON/OFF を管理し,再生を担うサービス. /// /// 設定は SharedPreferences に永続化される(キー: `sound_enabled`). class SoundService { static const _keySound = 'sound_enabled'; final RawCaptureService _rawCaptureService; bool _soundEnabled = true; SoundService({RawCaptureService? rawCaptureService}) : _rawCaptureService = rawCaptureService ?? RawCaptureService(); /// サウンドが有効かどうか. bool get isSoundEnabled => _soundEnabled; /// SharedPreferences から設定を読み込む. Future init() async { final prefs = await SharedPreferences.getInstance(); _soundEnabled = prefs.getBool(_keySound) ?? true; } /// サウンドの ON/OFF を切り替え,設定を永続化する. Future toggleSound() async { _soundEnabled = !_soundEnabled; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keySound, _soundEnabled); } /// シャッター音を再生する(サウンドが OFF の場合は何もしない). Future playShutterSound() async { if (!_soundEnabled) return; try { await _rawCaptureService.playShutterSound(); } catch (e) { // サウンドエラーで撮影フローを止めない } } /// 保存完了音を再生する(サウンドが OFF の場合は何もしない). Future playSaveCompleteSound() async { if (!_soundEnabled) return; try { await _rawCaptureService.playSaveCompleteSound(); } catch (e) { // サウンドエラーで撮影フローを止めない } } }