【问题标题】:How to play a custom sound in Flutter?如何在 Flutter 中播放自定义声音?
【发布时间】:2017-05-05 20:35:45
【问题描述】:

我可以用这行代码播放简单的声音:

SystemSound.play(SystemSoundType.click);

如何播放自定义声音?

让我们说一个简短的 mp3

【问题讨论】:

  • 我无法播放系统声音。我在调试输出中收到以下消息:“来自设置缓存,名称 = sound_effects_enabled ,值 = 0”。知道缺少什么吗?

标签: dart flutter


【解决方案1】:

播放已在资产中定义的文件的简单解决方案是使用 AudioCache。 图书馆:https://pub.dartlang.org/packages/audioplayers。 More about AudioCache 将库添加到pubspec.yaml 后,导入所需的类:

import 'package:audioplayers/audio_cache.dart';

在同一个文件中添加一个资产,并将有声音的文件放到资产文件夹中(如果你没有这个文件夹,创建它)

assets:
- assets/sound_alarm.mp3

然后添加此代码:

static AudioCache player = new AudioCache();
const alarmAudioPath = "sound_alarm.mp3";
player.play(alarmAudioPath);

一个例子here

【讨论】:

  • 库没有被导入
  • 您是否将音频播放器:^0.13.7 添加到 pubspec.yaml 中的依赖项中?
  • 是的,我做了并点击了包获取。但未检测到导入语句,说明“Uri 的目标不存在”
  • 我遇到了同样的错误。添加依赖并导入库后运行“flutter packages get”命令,然后关闭VS代码。这从字面上解决了错误。
  • 考虑使用这个插件,因为它也支持使用网络音频,这与其他插件相反。因此,其他音频插件中的点赞数和受欢迎程度。
【解决方案2】:

感谢您查看 Flutter!

目前(截至 2017 年 5 月 5 日)的 Flutter SDK 没有内置支持来播放和控制任意音频。但是,我们设计了我们的插件系统来支持它。

此插件为 Flutter 添加音频支持:https://pub.dartlang.org/packages/audioplayer

来自插件的自述文件:

Future play() async {
  final result = await audioPlayer.play(kUrl);
  if (result == 1) setState(() => playerState = PlayerState.playing);
}

// add a isLocal parameter to play a local file
Future playLocal() async {
  final result = await audioPlayer.play(kUrl);
  if (result == 1) setState(() => playerState = PlayerState.playing);
}


Future pause() async {
  final result = await audioPlayer.pause();
  if (result == 1) setState(() => playerState = PlayerState.paused);
}

Future stop() async {
  final result = await audioPlayer.stop();
  if (result == 1) {
    setState(() {
      playerState = PlayerState.stopped;
      position = new Duration();
    });
  }
}

【讨论】:

  • 在通道 bz.rxla.flutter/audio 上找不到方法播放的实现)有什么想法吗?
  • 没有声音。我从我身边尝试过。
  • 2020 年 2 月,仍然没有 Flutter 本身的支持。很好,他们发布了一个异国情调的“本周小部件”,但这太基本了,不能成为图书馆的标准。
  • 我们真的需要第三方插件来做一些像播放音频剪辑这样基本的事情吗?!?
【解决方案3】:

空安全代码:

  1. 将依赖项添加到您的 pubspec.yaml 文件中,

    dependencies:
      audioplayers: ^0.19.0
    
  2. 将音频文件路径添加到您的pubspec.yaml 文件。

    flutter: 
      assets:
        - assets/audio/my_audio.mp3
    
  3. 运行flutter pub get

完整代码:

class HomePage extends StatelessWidget {
  final AudioCache _audioCache = AudioCache(
    prefix: 'audio/',
    fixedPlayer: AudioPlayer()..setReleaseMode(ReleaseMode.STOP),
  );
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ElevatedButton(
        onPressed: () => _audioCache.play('my_audio.mp3'),
        child: Text('Play Audio'),
      ),
    );
  }
}

【讨论】:

    【解决方案4】:

    音频播放器工作(来自https://medium.com/@bennett4/adding-custom-sound-effects-to-a-flutter-mobile-app-41594f1f3305):

    (1) 将库添加到您的 pubspec.yaml:audioplayers: ^0.15.1

    (2) 在 flutter 下的 pubspec.yaml 中添加对资产文件的引用:

    flutter
        assets:
           - assets/yes.mp3
    

    确保它位于资产文件夹下。它在子文件夹中时不起作用。例如,类似: - assets/sounds/yes.mp3 将不起作用。只需将您的音频文件放在 assets 文件夹中,而不是放在其子文件夹中

    (3) 在您的应用中导入库为:import package:audioplayers/audioplayers.dart;

    (4) 然后定义这个函数:

    Future<AudioPlayer> playLocalAsset() async {
        AudioCache cache = new AudioCache();
       //At the next line, DO NOT pass the entire reference such as assets/yes.mp3. This will not work.
       //Just pass the file name only.
        return await cache.play("yes.mp3"); 
    }
    

    (5) 需要播放声音时调用该函数:await playLocalAsset();

    【讨论】:

    • 如果我们想停止这个音频应该怎么做?
    【解决方案5】:

    [答案更新:这种方法行不通,见 cmets] 您可以使用 Flutter 团队维护的 video_player 插件。它可以跨平台再现多种媒体,包括声音文件。更具体地说,您可能想要使用 VideoPlayerController 类。

    例如。

       _controller = VideoPlayerController.network('@987654322@');
       _controller.play();
    

    【讨论】:

    • OP 要求 mp3,这个插件可以播放吗?
    • 没关系,我意识到这恰好适用于 Android 上的某些音频文件这一事实并不意味着该插件支持音频播放。我发现这个插件无法在 iOS 上播放音频。并且没有计划让它工作,因为这不是video_player 插件的目的。社区中建议的方法是改用@ryanheise 的just_audio。
    • @iKeepChangingName 是的,just_audio 确实可以播放 mp3,而且效果很好。
    猜你喜欢
    • 2019-01-24
    • 2019-03-07
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2022-12-24
    • 2013-10-20
    相关资源
    最近更新 更多