Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:如何获得麦克风';将原始音频信号实时输入存储器?_Flutter_Audio - Fatal编程技术网

Flutter 颤振:如何获得麦克风';将原始音频信号实时输入存储器?

Flutter 颤振:如何获得麦克风';将原始音频信号实时输入存储器?,flutter,audio,Flutter,Audio,好吧,标题说明了一切。这个想法是监测环境噪音。一旦检测到某种模式,音频信号应记录到文件中。困难在于记录的文件应该在检测到模式前几秒钟启动。因此,存储器中需要音频信号才能“返回”几秒钟。您知道如何将原始音频输入实时存储到内存中吗?该软件包可以帮助您将麦克风音频作为PCM格式的流。假设每秒有16000个样本,您可以使用它来创建产生n秒音频块的流: import 'dart:math'; // for min import 'package:sound_stream/sound_stream.dart

好吧,标题说明了一切。这个想法是监测环境噪音。一旦检测到某种模式,音频信号应记录到文件中。困难在于记录的文件应该在检测到模式前几秒钟启动。因此,存储器中需要音频信号才能“返回”几秒钟。您知道如何将原始音频输入实时存储到内存中吗?

该软件包可以帮助您将麦克风音频作为PCM格式的
。假设每秒有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开始,就支持录制到流中。无论如何,谢谢分享这个。