Flutter 颤振:按下按钮时播放声音

Flutter 颤振:按下按钮时播放声音,flutter,dart,Flutter,Dart,我对编程非常陌生,尤其是Flitter。我想写一个音板,基本上是一个按钮列表,每个按钮的工作是播放一个声音,我在我的电脑上,当他们被按下。我已经用列表视图和一些材质按钮完成了设计,但我不知道如何让它们在按下时播放声音。有人能帮我吗?将音频播放器作为依赖项添加到pubspec.yaml文件中,如下所示: 依赖项: 音频播放器:有吗 颤振: 资产: -资产/audio/my_audio.mp3 完整代码(空安全): class\u HomePageState扩展状态{ 后期最终音频缓存_Audio

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

音频播放器
作为依赖项添加到
pubspec.yaml
文件中,如下所示:

依赖项:
音频播放器:有吗
颤振:
资产:
-资产/audio/my_audio.mp3
完整代码(空安全):

class\u HomePageState扩展状态{
后期最终音频缓存_AudioCache;
@凌驾
void initState(){
super.initState();
_audioCache=audioCache(
前缀:“audio/”,
fixedPlayer:AudioPlayer()…设置释放模式(释放模式.停止),
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:升降按钮(
按下:()=>\u audioCache.play('my\u audio.mp3'),
孩子:文本(“玩耍”),
),
);
}
}

如果您只想在有人按下按钮时播放音乐,则可以执行以下步骤:-

1。添加依赖项

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

flutter packages get
2。将其导入main.dart或要使用它的文件。

import 'package:audioplayers/audio_cache.dart'; 
将使用两个类,您可以导入AudioPlayerAudioCache,并播放本地文件AudioCache

3。创建AudioCache对象

 final player = AudioCache();
4。使用play()方法播放音频

player.play('note1.wav');
Note-note1.wav存储在我的主目录中的assets文件夹中,使用play()方法时不必提及它

示例代码-

import'包:audioplayers/audio_cache.dart';
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
最终播放器=AudioCache();
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:安全区(
孩子:扁平按钮(
儿童:文本(“游戏”),
已按下:(){
player.play('note1.wav');
},
),
),
),
);
}
}

对于重复的声音,我建议使用软件包。
根据我的经验,它提供了更好的延迟,即触发动作和实际声音播放之间的延迟更低。
下面是代码示例(从程序包的自述文件中复制):

import'包:soundpool/soundpool.dart';
声音池=声音池(流类型:streamType.notification);
int soundId=wait rootBundle.load(“sounds/dices.m4a”)。然后((ByteData soundData){
返回池。加载(声音数据);
});
int streamId=wait pool.play(soundId);

首先,您必须在主项目文件夹名称中创建一个目录,作为“资产”,用于存储所有音乐。我有7种音乐,像note1.wav,note2.wav。。。。。注7.wav

资产

assets:
     - assets/
依赖关系

dependencies:
  audioplayers: ^0.10.0
main.dart代码

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

void main() => runApp(Xylophone());

class Xylophone extends StatefulWidget {
  @override
  _XylophoneState createState() => _XylophoneState();
}

class _XylophoneState extends State<Xylophone> {
  
// music play sound number function, like note1.wav, note2.wav etc.
  void playSound(int number){
    final player = AudioCache();
    player.play('note$number.wav');
  }
// Expanded Widget Function Used for repeated Code
 Expanded buildKey(int soundNum, Color color){
   return Expanded(
     child: FlatButton(
       color: color,
       onPressed: (){
         playSound(soundNum);
       },
       child: Text(""),
     ),
   );
 }
  @override
  Widget build(BuildContext context) {
    // var buttonHeight = MediaQuery.of(context).size.height/2;
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: SafeArea(
        child: Scaffold(
          body: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              buildKey(1, Colors.red),
              buildKey(2, Colors.green),
              buildKey(3, Colors.blue),
              buildKey(4, Colors.deepPurpleAccent),
              buildKey(5, Colors.redAccent),
              buildKey(6, Colors.black54),
              buildKey(7, Colors.pink),
            ],
          ),
        ),
      ),
    );
  }
}

import'包:audioplayers/audio_cache.dart';
进口“包装:颤振/材料.省道”;
void main()=>runApp(木琴());
类木琴扩展了StatefulWidget{
@凌驾
_木琴酸盐createState()=>U木琴酸盐();
}
木琴酯类扩展状态{
//音乐播放声音数字功能,如note1.wav、note2.wav等。
无效播放声音(整数){
最终播放器=AudioCache();
player.play('note$number.wav');
}
//用于重复代码的扩展小部件功能
扩展的构建键(int soundNum,Color){
扩大回报(
孩子:扁平按钮(
颜色:颜色,
已按下:(){
播放声音(soundNum);
},
子项:文本(“”),
),
);
}
@凌驾
小部件构建(构建上下文){
//var buttonHeight=MediaQuery.of(context).size.height/2;
返回材料PP(
debugShowCheckedModeBanner:false,
家:安全区(
孩子:脚手架(
正文:专栏(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
构建键(1,颜色。红色),
buildKey(2种颜色,绿色),
buildKey(3种颜色,蓝色),
buildKey(4种颜色,深紫色),
buildKey(5种颜色,红色调),
buildKey(6种颜色,黑色54),
buildKey(7种颜色,粉色),
],
),
),
),
);
}
}

Try
audioplayers
plugin我已经看到了,但从文档中我不明白一件事……错误:方法“initState”没有在“MyApp”的超类中定义。错误:方法“AudioCache”没有为类“HomePageState”定义。
import“package:audioplayers/audio\u cache.dart”位于文件顶部。我的问题是在
import'package:audioplayers/audio_cache.dart'之前我没有使用有状态的小部件
导入“包:AudioPlayer/AudioPlayer.dart”如果任何人对此实现有问题,我必须停止应用程序并重新启动它。热重新加载/重新启动是不够的。