본문으로 이동

플러터:마이크 입력

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2025년 11월 17일 (월) 01:47 판 (새 문서: {{플러터}} == 개요 == 기기에서 마이크를 사용하는 법. == 사전준비 권한 설정 == {| 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...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

틀:플러터 Dart:개요 플러터에 대한 지식 분류

  1. 플러터:개요
    1. 플러터:VSCode
    2. 플러터:안드로이드 스튜디오
  2. 플러터:실행
  3. 플러터:개념 잡기
    1. 플러터:화면 하나 만들기
    2. 플러터:변하는 화면(StatefulWidget)
    3. 플러터:화면 전환(화면 쌓기, 하단 네비게이션 바)
    4. 플러터:화면 전환(Drawer)
    5. 플러터:입력 관련
      1. 플러터:버튼
      2. 플러터:키보드 입력
      3. 플러터:슬라이더
    6. 플러터:그래프 그리기(fl chart)
    7. 플러터:데이터 저장(간단한 데이터)
    8. 플러터:인증(Firebase 인증)(미완)
    9. 플러터:인증(OAuth2)(미완)
  4. 권한 사용
    1. 플러터:마이크 입력
  5. 위젯
    1. 플러터:아이콘
    2. 플러터:레이아웃 계열 위젯
    3. 플러터:네비게이션 계열 위젯
    4. 플러터:버튼
    5. 플러터:상태관리(미완)
  6. 플러터:DB연결
    1. 플러터:Firebase(미완)
    2. 플러터:MySQL(미완)
  7. 디자인
    1. 플러터:테마
    2. 플러터:앱바
  8. 플러터:배포
    1. 플러터:배포(안드로이드)(미완)
  9. 플러터:참고자료
  10. 플러터:위젯
    1. 플러터:공간배치용 위젯
  11. 플러터:구글 AdMob(미완)
  12. 플러터:라이브러리
    1. 플러터:logger

개요

기기에서 마이크를 사용하는 법.

사전준비 권한 설정

항목 설명 비고
안드로이드 android/app/src/main/AndroidManifest.xml 에 넣는다. <uses-permission android:name="android.permission.RECORD_AUDIO"/>
아이폰 ios/Runner/Info.plist에 넣는다. <key>NSMicrophoneUsageDescription</key>

<string>앱에서 음성 입력을 사용합니다.</string>

패키지 설치 dependencies:

  flutter:

    sdk: flutter

  permission_handler: ^10.5.0

  noise_meter: ^1.1.0

noise_meter는 db를 읽는다.

데시벨 측정 예시 코드

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),

          ),

        ),

      ),

    );

  }

}