플러터:마이크 입력
보이기
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터:DB연결
- 플러터:Firebase(미완)
- 플러터:MySQL(미완)
- 디자인
- 플러터:배포
- 플러터:배포(안드로이드)(미완)
- 플러터:참고자료
- 플러터:위젯
- 플러터:구글 AdMob(미완)
- 플러터:라이브러리
개요
기기에서 마이크를 사용하는 법.
사전준비 권한 설정
권한 부여
| 항목 | 설명 | 비고 |
|---|---|---|
| 안드로이드 | android/app/src/main/AndroidManifest.xml 에 넣는다. |
|
| 아이폰 | ios/Runner/Info.plist에 넣는다. | <key>NSMicrophoneUsageDescription</key>
<string>앱에서 음성 입력을 사용합니다.</string> |
| Windows,
Web |
별도 설정 불필요. 자동으로 팝업이 뜸. |
필요한 패키지 점검
| 항목 | 설명 | 비고 |
|---|---|---|
| 패키지 설치 | dependencies:
flutter: sdk: flutter permission_handler: ^11.0.0 noise_meter: ^5.0.2 |
noise_meter는 db를 읽는다.
아마 시간이 지나면 오래된 버전이라 문제가 발생할 수 있음. flutter pub get |
데시벨 측정 예시 코드
마찬가지로 패키지 버전에 따라 함수명이 달라지기도 함. 오래되면 문제가 발생할 수 있음.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:noise_meter/noise_meter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
NoiseMeter? _noiseMeter;
StreamSubscription<NoiseReading>? _subscription;
double _decibel = 0;
@override
void initState() {
super.initState();
_initMicrophone();
}
Future<void> _initMicrophone() async {
// 마이크 권한 요청
if (await Permission.microphone.request().isGranted) {
_noiseMeter = NoiseMeter(onError: (e) {
print("Noise meter error: $e");
});
_subscription = _noiseMeter!.noiseStream.listen((noise) {
setState(() {
_decibel = noise.meanDecibel;
});
});
_noiseMeter!.start();
} else {
print("마이크 권한 거부됨");
}
}
@override
void dispose() {
_subscription?.cancel();
_noiseMeter?.stop();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text("데시벨 측정기")),
body: Center(
child: Text(
"${_decibel.toStringAsFixed(1)} dB",
style: const TextStyle(fontSize: 50),
),
),
),
);
}
}