Flutter音频处理插件moises的使用

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

Flutter音频处理插件moises的使用



Moises REST API客户端库

概述 #

首先,创建一个账户以获取您的API密钥。在获得密钥后,可以在Moises构造函数中传递该密钥。以下示例演示了如何获取MoisesApplicationModel

Future<void> getApplication() async {
  try {
    // 创建一个新的Moises客户端并传入您的API密钥
    final Moises moises = Moises('您的API密钥');

    // 获取应用数据
    final MoisesApplicationModel value = await moises.application.get();

    return value;
  } on MoisesException catch (error) {
    print('错误: $error');
  }
}

您可以在此处找到更多示例:示例代码。要运行这些示例,请执行dart run example/main.dart

与JSON序列化器一起工作 #

此客户端通过json_serializable包来实现JSON序列化。要在文件更新时持续地在后台重建序列化器,请运行以下命令:

flutter pub run build_runner watch --delete-conflicting-outputs

完整的API文档 #

有关完整的API文档,请参阅官方指南:API文档

贡献 #

如果您想为moises做出贡献,请确保查阅贡献指南。该项目使用GitHub问题来跟踪请求和错误。


完整示例Demo

import 'package:moises/moises.dart';

import 'moises_key.dart';

Future<void> main() async {
  /// 搜索本地密钥
  final String key = await MoisesKey.get();
  if (key.isEmpty) return;

  /// 创建新的客户端
  final Moises moises = Moises(key);

  /// 应用程序
  await getApplication(moises);

  /// 上传
  await getUpload(moises);

  /// 工作流
  await getWorkflowList(moises);

  /// 任务列表
  await getJobsList(moises);
  await getJob(moises);
  await deleteJob(moises);
  await createJob(moises);
}

Future<void> getApplication(Moises moises) async {
  try {
    final MoisesApplicationModel value = await moises.application.get();
    print('应用程序: ${value.toJson()}');
  } on MoisesException catch (e) {
    print('错误: ${e.error}');
  }
}

Future<void> getUpload(Moises moises) async {
  try {
    final MoisesUploadModel value = await moises.upload.get();
    print('上传: ${value.toJson()}');
  } on MoisesException catch (e) {
    print('错误: ${e.error}');
  }
}

Future<void> getWorkflowList(Moises moises) async {
  try {
    final List<MoisesWorkflowModel> value = await moises.workflow.getAll(
      const MoisesWorkflowFilterModel(
        page: 0,
        size: 20,
      ),
    );
    print('工作流列表(${value.length}): $value');
  } on MoisesException catch (e) {
    print('错误: ${e.error}');
  }
}

Future<void> getJobsList(Moises moises) async {
  try {
    final List<MoisesJobModel> value = await moises.job.getAll(
      const MoisesJobFilterModel(
        status: MoisesJobStatusEnum.succeeded,
        workflow: 'workflow-name',
        batchName: 'batch-name',
        page: 0,
        size: 20,
      ),
    );
    print('任务列表总数: ${value.length} | $value');
  } on MoisesException catch (e) {
    print('错误: ${e.error}');
  }
}

Future<void> getJob(Moises moises) async {
  try {
    const String id = '00000000-0000-0000-0000-000000000000';
    final MoisesJobModel value = await moises.job.get(id);
    print('任务: ${value.toJson()}');
  } on MoisesException catch (e) {
    print('错误: ${e.error}');
  }
}

Future<void> createJob(Moises moises) async {
  try {
    final MoisesNewJobResultModel value = await moises.job.create(
      const MoisesNewJobModel(
        name: 'job-name',
        workflow: 'my-workflow-name',
        params: {
          'inputUrl': 'https://your-server.com/some-audio.wav',
        },
      ),
    );
    print('新任务结果: ${value.toJson()}');
  } on MoisesException catch (e) {
    print('错误: ${e.error}');
  }
}

Future<void> deleteJob(Moises moises) async {
  try {
    const String id = '00000000-0000-0000-0000-000000000000';
    await moises.job.delete(id);
    print('任务 $id 成功删除');
  } on MoisesException catch (e) {
    print('错误: ${e.error}');
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用moises插件进行音频处理的示例代码。moises是一个强大的Flutter插件,用于音频处理和分析,支持多种音频编辑功能,如音高修正、节奏调整、音量标准化等。

首先,确保你的Flutter项目已经配置好,并在pubspec.yaml文件中添加moises依赖:

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

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

接下来,我们编写一个简单的Flutter应用,演示如何使用moises插件处理音频。这个示例将演示如何加载音频文件,应用音高变换,并保存处理后的音频。

import 'package:flutter/material.dart';
import 'package:moises/moises.dart';
import 'package:path_provider/path_provider.dart';

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

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

class _MyAppState extends State<MyApp> {
  Moises? moises;
  String? outputPath;

  @override
  void initState() {
    super.initState();
    _initMoises();
  }

  Future<void> _initMoises() async {
    moises = Moises();
    await moises!.initialize();
  }

  Future<void> processAudio() async {
    final directory = await getApplicationDocumentsDirectory();
    final inputPath = '${directory.path}/input.mp3';  // 替换为你的输入音频文件路径
    final tempDir = await getTemporaryDirectory();
    outputPath = '${tempDir.path}/output.mp3';

    // 加载音频文件
    final audioFile = await moises!.audioFileFromPath(inputPath);

    // 应用音高变换(例如,提高半音)
    final processedAudio = await audioFile.pitchShift(pitchShiftSemitones: 0.5);

    // 保存处理后的音频
    await processedAudio.saveToPath(outputPath!);

    setState(() {});  // 更新UI以反映处理完成
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Moises Audio Processing'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Processing Status:'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: processAudio,
                child: Text('Process Audio'),
              ),
              SizedBox(height: 20),
              if (outputPath != null)
                Text('Processed Audio Saved to: $outputPath'),
            ],
          ),
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml文件中添加moises依赖。
  2. 初始化Moises实例:在initState方法中初始化Moises实例。
  3. 音频处理processAudio方法加载音频文件,应用音高变换,并保存处理后的音频。
  4. UI更新:在UI上显示处理状态和保存路径。

注意事项

  • 确保你有一个有效的音频文件路径(在此示例中为input.mp3),并且该音频文件已经存在于指定的目录中。
  • moises插件可能需要一些权限来访问存储,因此在实际应用中,你可能需要请求相应的权限。
  • 在实际应用中,处理音频文件可能需要一些时间,因此可能需要添加加载指示器或其他用户反馈机制。

这个示例提供了一个基本框架,你可以根据实际需求进一步扩展和修改。

回到顶部