플러터:마이크 입력: 두 판 사이의 차이
보이기
새 문서: {{플러터}} == 개요 == 기기에서 마이크를 사용하는 법. == 사전준비 권한 설정 == {| class="wikitable" |+ !항목 !설명 !비고 |- |안드로이드 |android/app/src/main/AndroidManifest.xml 에 넣는다. |<uses-permission android:name="android.permission.RECORD_AUDIO"/> |- |아이폰 |ios/Runner/Info.plist에 넣는다. |<key>NSMicrophoneUsageDescription</key> <string>앱에서 음성 입력을 사용합니다.</string> |- |패키지 설치 |dependenci... |
잔글편집 요약 없음 |
||
| 5번째 줄: | 5번째 줄: | ||
== 사전준비 권한 설정 == | == 사전준비 권한 설정 == | ||
=== 권한 부여 === | |||
{| class="wikitable" | {| class="wikitable" | ||
!항목 | !항목 | ||
!설명 | !설명 | ||
| 13번째 줄: | 14번째 줄: | ||
|안드로이드 | |안드로이드 | ||
|android/app/src/main/AndroidManifest.xml 에 넣는다. | |android/app/src/main/AndroidManifest.xml 에 넣는다. | ||
|<uses-permission android:name="android.permission.RECORD_AUDIO"/> | | | ||
* 권한은 <code><application></code> 태그 밖, <code><manifest></code> 태그 안에 위치해야 함. | |||
* <uses-permission android:name="android.permission.RECORD_AUDIO"/> | |||
|- | |- | ||
|아이폰 | |아이폰 | ||
| 19번째 줄: | 22번째 줄: | ||
|<key>NSMicrophoneUsageDescription</key> | |<key>NSMicrophoneUsageDescription</key> | ||
<string>앱에서 음성 입력을 사용합니다.</string> | <string>앱에서 음성 입력을 사용합니다.</string> | ||
|- | |||
|Windows, | |||
Web | |||
|별도 설정 불필요. 자동으로 팝업이 뜸. | |||
| | |||
|} | |||
=== 필요한 패키지 점검 === | |||
{| class="wikitable" | |||
!항목 | |||
!설명 | |||
!비고 | |||
|- | |- | ||
|패키지 설치 | |패키지 설치 | ||
| 27번째 줄: | 42번째 줄: | ||
sdk: flutter | sdk: flutter | ||
permission_handler: ^11.0.0 | |||
noise_meter: ^5.0.2 | |||
|noise_meter는 db를 읽는다. | |noise_meter는 db를 읽는다. | ||
아마 시간이 지나면 오래된 버전이라 문제가 발생할 수 있음. | |||
flutter pub get | |||
|} | |} | ||
== 데시벨 측정 예시 코드 == | == 데시벨 측정 예시 코드 == | ||
마찬가지로 패키지 버전에 따라 함수명이 달라지기도 함. 오래되면 문제가 발생할 수 있음.<syntaxhighlight lang="dart">import 'dart:async'; | |||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||
import 'package:permission_handler/permission_handler.dart'; | import 'package:permission_handler/permission_handler.dart'; | ||
import 'package:noise_meter/noise_meter.dart'; | import 'package:noise_meter/noise_meter.dart'; | ||
void main() { | void main() { | ||
runApp(const MyApp()); | |||
} | } | ||
class MyApp extends StatefulWidget { | class MyApp extends StatefulWidget { | ||
const MyApp({super.key}); | |||
@override | |||
State<MyApp> createState() => _MyAppState(); | |||
} | } | ||
class _MyAppState extends State<MyApp> { | 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), | |||
), | |||
), | |||
), | |||
); | |||
} | |||
}</syntaxhighlight> | |||
} | |||
2025년 11월 17일 (월) 03:02 판
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터: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),
),
),
),
);
}
}