我想做并申请谁来获取麦克风流,并直接在Flutter中播放它,谁能为我提供帮助,我在互联网上一无所获。谢谢!
答案 0 :(得分:0)
经过一些更改后,它便可以正常工作,请使用以下插件: https://pub.dev/packages/sound_stream
将此内容导入您的pubspec:
dependencies:
sound_stream: ^0.2.0
并使用以下示例代码:
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:sound_stream/sound_stream.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
RecorderStream _recorder = RecorderStream();
PlayerStream _player = PlayerStream();
List<Uint8List> _micChunks = [];
bool _isRecording = false;
bool _isPlaying = false;
StreamSubscription _recorderStatus;
StreamSubscription _playerStatus;
StreamSubscription _audioStream;
@override
void initState() {
super.initState();
initPlugin();
}
@override
void dispose() {
_recorderStatus?.cancel();
_playerStatus?.cancel();
_audioStream?.cancel();
super.dispose();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlugin() async {
_recorderStatus = _recorder.status.listen((status) {
if (mounted)
setState(() {
_isRecording = status == SoundStreamStatus.Playing;
});
});
_audioStream = _recorder.audioStream.listen((data) {
if (_isPlaying) {
_player.writeChunk(data);
} else {
_micChunks.add(data);
}
});
_playerStatus = _player.status.listen((status) {
if (mounted)
setState(() {
_isPlaying = status == SoundStreamStatus.Playing;
});
});
await Future.wait([
_recorder.initialize(),
_player.initialize(),
]);
}
void _play() async {
await _player.start();
if (_micChunks.isNotEmpty) {
for (var chunk in _micChunks) {
await _player.writeChunk(chunk);
}
_micChunks.clear();
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
iconSize: 96.0,
icon: Icon(_isRecording ? Icons.mic_off : Icons.mic),
onPressed: _isRecording ? _recorder.stop : _recorder.start,
),
IconButton(
iconSize: 96.0,
icon: Icon(_isPlaying ? Icons.pause : Icons.play_arrow),
onPressed: _isPlaying ? _player.stop : _play,
),
],
),
),
);
}
}
答案 1 :(得分:-1)
您可以使用this库来录制来自麦克风的音频。
用法
要使用此插件,请在您的audio_recorder
文件中添加pubspec.yaml
作为依赖项。
Android
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
iOS
<key>NSMicrophoneUsageDescription</key>
<string>Record audio for playback</string>
示例
// Import package
import 'package:audio_recorder/audio_recorder.dart';
// Check permissions before starting
bool hasPermissions = await AudioRecorder.hasPermissions;
// Get the state of the recorder
bool isRecording = await AudioRecorder.isRecording;
// Start recording
await AudioRecorder.start(path: _controller.text, audioOutputFormat: AudioOutputFormat.AAC);
// Stop recording
Recording recording = await AudioRecorder.stop();
print("Path : ${recording.path}, Format : ${recording.audioOutputFormat}, Duration : ${recording.duration}, Extension : ${recording.extension},");
现在您需要做的就是播放录制的声音文件。