Flutter 颤振:如何获得麦克风';将原始音频信号实时输入存储器?
好吧,标题说明了一切。这个想法是监测环境噪音。一旦检测到某种模式,音频信号应记录到文件中。困难在于记录的文件应该在检测到模式前几秒钟启动。因此,存储器中需要音频信号才能“返回”几秒钟。您知道如何将原始音频输入实时存储到内存中吗?该软件包可以帮助您将麦克风音频作为PCM格式的Flutter 颤振:如何获得麦克风';将原始音频信号实时输入存储器?,flutter,audio,Flutter,Audio,好吧,标题说明了一切。这个想法是监测环境噪音。一旦检测到某种模式,音频信号应记录到文件中。困难在于记录的文件应该在检测到模式前几秒钟启动。因此,存储器中需要音频信号才能“返回”几秒钟。您知道如何将原始音频输入实时存储到内存中吗?该软件包可以帮助您将麦克风音频作为PCM格式的流。假设每秒有16000个样本,您可以使用它来创建产生n秒音频块的流: import 'dart:math'; // for min import 'package:sound_stream/sound_stream.dart
流
。假设每秒有16000个样本,您可以使用它来创建产生n秒音频块的流:
import 'dart:math'; // for min
import 'package:sound_stream/sound_stream.dart';
Stream<Uint8List> audioChunks([int seconds = 3]) async* {
final stream = RecorderStream();
await stream.initialize();
stream.start();
final buffer = Uint8List();
int filled = 0;
int max = seconds * 16000 * 2; // pcm 16bit = 2bytes / sample
async for (final chunk in stream.audioStream) {
int cl = min(max-filled, chunk.length);
buffer.addAll(chunk.sublist(0, cl));
filled += cl;
if (filled == max) {
yield buffer;
filled = 0;
buffer = Uint8List();
}
if (chunk.length > cl) {
buffer.addAll(chunk.sublist(cl));
filled += chunk.length - cl;
}
}
}
import'dart:math';//至少
导入“package:sound_stream/sound_stream.dart”;
流音频块([int秒=3])异步*{
最终流=记录器流();
等待stream.initialize();
stream.start();
最终缓冲区=Uint8List();
int-filled=0;
int max=seconds*16000*2;//pcm 16bit=2字节/样本
异步(stream.audioStream中的最后一个块){
int cl=最小值(最大填充量,块长度);
addAll(chunk.sublist(0,cl));
填充+=氯;
如果(已填充==最大值){
产量缓冲;
填充=0;
buffer=Uint8List();
}
如果(chunk.length>cl){
addAll(chunk.sublist(cl));
填充+=chunk.length-cl;
}
}
}
您可以使用颤振声音插件将麦克风的原始音频信号实时输入内存。
参考链接是:
这里有一个演示示例
我有一个例子是
Widget _buildRecorder(Track track) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: RecorderPlaybackController(
child: Column(
children: [
Left("Recorder"),
SoundRecorderUI(track),
Left("Recording Playback"),
SoundPlayerUI.fromTrack(
track,
enabled: false,
showTitle: true,
audioFocus: true
? AudioFocus.requestFocusAndDuckOthers
: AudioFocus.requestFocusAndDuckOthers,
),
],
)));
}
}
不是颤振开发,而是FWIW一般的过程是调试/定位api交付音频缓冲区的位置。事件/侦听器的数据类型应类似于原始数组。通过对该数组的引用,在侦听器传递音频缓冲区数据的范围内,您的进程执行以下操作:1。缓冲区2上的阵列复制。将数字1的结果加载到circularBuffer,在其中管理/挂起元数组,以便以原始形式保持前nn秒的音频。在对原始缓冲区进行任何编码之前,api应该给u访问权限。看起来颤振声音刚好及时更新。从前天(9月23日)刚刚发布的版本6.0开始,就支持录制到流中。无论如何,谢谢分享这个。