Flutter:按下按钮时播放声音

Hur*_*nut 11 dart flutter

我对编程很陌生,尤其是颤振。我想写一个音板,基本上是一个按钮列表,每个按钮的作用是在按下它们时播放我在 PC 上的声音。我已经用列表视图和一些材质按钮完成了设计,但我不知道如何让它们在我按下时播放声音。有人能帮我吗?

Cop*_*oad 23

添加audioplayers作为依赖和音频文件,pubspec.yaml这样的文件:

dependencies:
  audioplayers: any

flutter: 
  assets:
    - assets/audio/my_audio.mp3
Run Code Online (Sandbox Code Playgroud)

完整代码(空安全):

class _HomePageState extends State<HomePage> {
  late final AudioCache _audioCache;

  @override
  void initState() {
    super.initState();
    _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'),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)


Ily*_*ent 16

对于需要播放“咔嗒”声的任何人:

import 'package:flutter/services.dart';
Run Code Online (Sandbox Code Playgroud)
SystemSound.play(SystemSoundType.click);
Run Code Online (Sandbox Code Playgroud)


Med*_* V. 8

对于重复的声音,我推荐soundpool包。
根据我的经验,它提供了更好的延迟,即触发操作和实际声音播放之间的延迟更低。
这是代码示例(从包的自述文件中复制):

    import 'package:soundpool/soundpool.dart';

    Soundpool pool = Soundpool(streamType: StreamType.notification);
    int soundId = await rootBundle.load("sounds/dices.m4a").then((ByteData soundData) {
                  return pool.load(soundData);
                });
    int streamId = await pool.play(soundId);
Run Code Online (Sandbox Code Playgroud)


Ind*_*ngh 7

如果您只想在有人按下按钮时播放音乐,那么您可以按照以下步骤操作:-

1.添加依赖

dependencies:
      audioplayers: ^0.10.0
Run Code Online (Sandbox Code Playgroud)

然后在终端中运行以下命令以获取新添加的包 -

flutter packages get
Run Code Online (Sandbox Code Playgroud)

2. 将其导入到 main.dart 或您要使用的文件中。

import 'package:audioplayers/audio_cache.dart'; 
Run Code Online (Sandbox Code Playgroud)

有两个类可以导入AudioPlayerAudioCache并使用AudioCache播放本地文件。

3.创建一个AudioCache对象

 final player = AudioCache();
Run Code Online (Sandbox Code Playgroud)

4. 使用 play() 方法播放音频

player.play('note1.wav');
Run Code Online (Sandbox Code Playgroud)

注意 - note1.wav 存储在我的主目录中的assets文件夹中,您在使用 play() 方法时不必提及它。

示例代码 -

dependencies:
      audioplayers: ^0.10.0
Run Code Online (Sandbox Code Playgroud)