Flutter音频处理插件pcmtowave的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter音频处理插件pcmtowave的使用

pcmtowave 是一个用于将 PCM 数据实时转换为 WAV 格式的 Flutter 插件。以下是如何使用该插件的详细步骤。

使用

首先,你需要在你的项目中初始化 pcmtowave 并设置参数。以下是基本用法:

final _pcmtowave = convertToWav(
  sampleRate: 44100, 
  converMiliSeconds: 1000, // 每秒转换一次
  numChannels: 2  
);

// 开始录音
final stream = await record.startStream(const RecordConfig(
  encoder: AudioEncoder.pcm16bits
));
isrecord = true;

stream.listen((event) {
  _pcmtowave.run(event); // 将录制的数据转换为wav格式
});

// 监听转换后的wav数据
_pcmtowave.convert.listen((event) async {
  data = event;
});

_pcmtowave.dispose();

完整示例

以下是一个完整的示例,展示了如何在 Flutter 应用程序中使用 pcmtowave 插件进行音频处理。

示例代码

import 'dart:convert';
import 'dart:io';

import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pcmtowave/convertToWav.dart';
import 'package:pcmtowave/pcmtowave.dart';
import 'package:record/record.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

  // 初始化
  final _pcmtowave = convertToWav(
    sampleRate: 44100,
    converMiliSeconds: 1000,
    numChannels: 2
  );
  final record = AudioRecorder();
  final player = AudioPlayer();

  String text = "";

  [@override](/user/override)
  void initState() {
    super.initState();
    _pcmtowave.convert.listen((event) async {
      // 在这里处理转换后的wav数据
    });
  }

  bool isrecord = false;

  Uint8List? data;

  recor() async {
    if (await record.hasPermission()) {
      // 开始录音到文件或流
      if (!isrecord) {
        final stream = await record.startStream(const RecordConfig(
            encoder: AudioEncoder.pcm16bits
        ));
        isrecord = true;

        stream.listen((event) {
          _pcmtowave.run(event); // 转换录制的数据为wav格式
        });
      } else {
        record.stop();
        isrecord = false;
      }
    }
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('pcm'),
        ),
        body: Column(
          children: [
            Container(
              margin: const EdgeInsets.all(3),
              padding: const EdgeInsets.all(3),
              height: 80,
              width: double.infinity,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                color: Color(0xFFFAF0E6),
                border: Border.all(
                  color: Colors.indigo,
                  width: 3,
                ),
              ),
              child: Row(children: [
                ElevatedButton(
                  onPressed: () {
                    recor();
                  },
                  child: Text(isrecord ? '停止' : '开始录音'),
                ),
                SizedBox(
                  width: 20,
                ),
                Text(isrecord ? '正在录音' : '录音已停止'),
              ]),
            ),
            Container(
              margin: const EdgeInsets.all(3),
              padding: const EdgeInsets.all(3),
              height: 80,
              width: double.infinity,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                color: Color(0xFFFAF0E6),
                border: Border.all(
                  color: Colors.indigo,
                  width: 3,
                ),
              ),
              child: Row(children: [
                SizedBox(
                  width: 20,
                ),
                Text(text),
              ]),
            ),
          ],
        )
      ),
    );
  }
}

更多关于Flutter音频处理插件pcmtowave的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter音频处理插件pcmtowave的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中音频处理插件pcmtowave的使用,下面是一个示例代码案例,展示如何使用该插件将PCM音频数据转换为WAV格式。

首先,确保你已经在pubspec.yaml文件中添加了pcmtowave依赖:

dependencies:
  flutter:
    sdk: flutter
  pcmtowave: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来是一个简单的示例代码,展示如何使用pcmtowave插件:

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:pcmtowave/pcmtowave.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Uint8List? pcmData; // PCM音频数据
  Uint8List? waveData; // 转换后的WAV音频数据

  @override
  void initState() {
    super.initState();
    // 这里模拟加载PCM数据,实际应用中你可能需要从文件或其他来源获取PCM数据
    _loadPCMData();
  }

  void _loadPCMData() {
    // 模拟PCM数据,实际应用中请替换为真实的PCM数据
    pcmData = Uint8List.fromList(List.generate(16000 * 2, (index) => index % 256)); // 16kHz, Mono, 8-bit PCM

    // 转换PCM数据为WAV格式
    _convertPCMToWAVE();
  }

  void _convertPCMToWAVE() async {
    if (pcmData != null) {
      try {
        waveData = await pcmToWave(
          pcmData!,
          sampleRate: 16000, // 采样率
          numChannels: 1, // 声道数
          bitDepth: 8, // 位深度
        );
        print('WAV数据转换成功,长度为: ${waveData!.length}');
      } catch (e) {
        print('WAV数据转换失败: $e');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('PCM to WAV 转换示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('PCM数据加载并转换WAV中...'),
              if (waveData != null)
                ElevatedButton(
                  onPressed: () {
                    // 这里可以添加保存WAV文件或其他处理waveData的逻辑
                    print('WAV数据已准备好,长度: ${waveData!.length}');
                  },
                  child: Text('WAV数据已准备好'),
                ),
            ],
          ),
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖导入

    • 导入pcmtowave包以及其他必要的Flutter包。
  2. 数据加载与转换

    • initState方法中,模拟加载PCM数据(实际应用中,你需要从文件或其他来源获取PCM数据)。
    • 调用_convertPCMToWAVE方法,将PCM数据转换为WAV格式。
  3. pcmToWave函数

    • pcmToWave函数接受PCM数据、采样率、声道数和位深度作为参数,返回转换后的WAV数据。
  4. UI展示

    • 使用简单的Flutter UI展示转换状态,并在WAV数据转换成功后提供一个按钮来触发后续操作(如保存文件)。

注意事项:

  • 请确保PCM数据的格式(采样率、声道数、位深度)与pcmToWave函数的参数一致。
  • 在实际应用中,你可能需要处理更复杂的PCM数据来源和输出(如从文件读取PCM数据,将WAV数据保存到文件等)。

希望这个示例代码对你有所帮助!如果有其他问题,请随时提问。

回到顶部