Я создаю приложение для слухового аппарата на флаттере для тех, кто не слышит должным образом. Идея заключается в том, что звук заключается в том, что пользователь микрофона может изменить его частоту, изменить другие настройки с помощью ползунка или чего-то еще, а динамик воспроизведет этот звук с обработанным звуком. настройки, проблема, с которой я столкнулся, заключается в том, что сначала записывается звук, а затем воспроизводится, как я это делаю, чтобы он напрямую воспроизводил звук с микрофона на динамик, динамик может быть на мобильном телефоне или гарнитуре.
Я ожидаю для воспроизведения звука вместе с микрофоном.
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_sound/flutter_sound.dart';
import 'package:permission_handler/permission_handler.dart';
class VoiceChanger extends StatefulWidget {
@override
_VoiceChangerState createState() => _VoiceChangerState();
}
class _VoiceChangerState extends State {
late final StreamController _audioStreamController;
FlutterSoundRecorder? _recorder;
FlutterSoundPlayer? _player;
bool isRecording = false;
bool isPlayingBack = false;
@override
void initState() {
super.initState();
_recorder = FlutterSoundRecorder();
_player = FlutterSoundPlayer();
_audioStreamController = StreamController();
initAudio();
}
Future initAudio() async {
await _recorder!.openRecorder();
await _player!.openPlayer();
await _player!.setVolume(1.0);
}
Future startRecording() async {
if (await Permission.microphone.request().isGranted) {
// Start recording to a stream
await _recorder!.startRecorder(
toStream: _audioStreamController.sink,
codec: Codec.pcm16,
);
// Listen to the stream and play audio data in real-time
_audioStreamController.stream.listen((data) async {
// Ensure playback continues smoothly
if (!isPlayingBack) {
isPlayingBack = true;
await _player!.startPlayer(
fromDataBuffer: data,
codec: Codec.pcm16,
whenFinished: () {
isPlayingBack = false; // Set playing flag to false when finished
},
);
} else {
// Feed the new audio data to the player without interruption
await _player!.feedFromStream(data);
}
});
setState(() {
isRecording = true;
});
} else {
print("Microphone permission is not granted");
}
}
Future stopRecording() async {
await _recorder!.stopRecorder();
setState(() {
isRecording = false;
isPlayingBack = false; // Stop playback
});
}
@override
void dispose() {
_recorder?.closeRecorder();
_player?.closePlayer();
_audioStreamController.close(); // Ensure stream is closed
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Voice Changer'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: isRecording ? stopRecording : startRecording,
child: Text(isRecording ? 'Stop Recording' : 'Start Recording'),
),
],
),
),
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -recording
Flutter не может воспроизводить звук во время записи ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение