首页 > 其他分享 >Flutter音频播放之just_audio

Flutter音频播放之just_audio

时间:2023-06-06 16:07:56浏览次数:46  
标签:just 音频 dispose player override audio Flutter

just_audio的使用

just_audio,它是一个用于播放音频的 Flutter 插件。

安装和导入 just_audio

要使用 just_audio 库,需要将其添加到项目的 pubspec.yaml 文件中:

dependencies:
   just_audio: ^0.9.34

然后运行以下命令以安装该库:

flutter pub get

要使用 just_audio,需要在代码中导入它:

import 'package:just_audio/just_audio.dart';

播放本地音频文件

要播放本地音频文件,需要创建 AudioPlayer 对象并调用 setFilePath 方法将音频文件的路径传递给它。 以下是一个简单的示例代码,演示了如何使用 just_audio 播放本地音频文件:

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';

class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}

class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();

  @override
  void initState() {
    super.initState();
    _player.setFilePath('assets/audio/sample.mp3');
  }

  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setFilePath 方法,将本地音频文件的路径传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。

dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。

播放网络音频文件

要播放网络音频文件,需要调用 setUrl 方法将音频文件的 URL 传递给 AudioPlayer 对象。以下是一个简单的示例代码,演示了如何使用 just_audio 播放网络音频文件:

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';

class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}

class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _url = 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3';

  @override
  void initState() {
    super.initState();
    _player.setUrl(_url);
  }

  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setUrl 方法,将网络音频文件的 URL 传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。

dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。

播放音频流

要播放音频流,需要创建一个 AudioPlayer 对象,并调用 setAudioSource 方法来设置音频源。setAudioSource 方法可以接收多种参数类型,包括本地文件路径、网络 URL、DASH/HLS URL、以及自定义的 AudioSource 对象。以下是一个简单的示例代码,演示了如何使用 just_audio 播放音频流:

import'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';

class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}

class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _url = 'https://stream.radio.co/sb8ebfa4b0/listen';

  @override
  void initState() {
    super.initState();
    _player.setAudioSource(AudioSource.uri(Uri.parse(_url)));
  }

  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setAudioSource 方法,将音频流的 URL 传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。

dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。

播放音频列表

要播放音频列表,需要创建一个包含多个音频源的 ConcatenatingAudioSource 对象,并将其传递给 AudioPlayer 对象的 setAudioSource 方法。以下是一个简单的示例代码,演示了如何使用 just_audio 播放音频列表:

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';

class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}

class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _playlist = ConcatenatingAudioSource(children: [
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')),
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3')),
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3')),
  ]);

  @override
  void initState() {
    super.initState();
    _player.setAudioSource(_playlist);
  }

  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并创建了一个包含三个音频源的 ConcatenatingAudioSource 对象 _playlist。在 initState 方法中,我们调用了 _player.setAudioSource(_playlist) 方法,将音频列表传递给 _player 对象。在 build 方法中,我们创建了两个按钮,一个用于播放音频列表,另一个用于暂停音频列表。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频列表。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频列表。

dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。

标签:just,音频,dispose,player,override,audio,Flutter
From: https://blog.51cto.com/u_15777557/6425028

相关文章

  • flutter系列之:做一个会飞的菜单
    简介flutter中自带了drawer组件,可以实现通用的菜单功能,那么有没有一种可能,我们可以通过自定义动画来实现一个别样的菜单呢?答案是肯定的,一起来看看吧。定义一个菜单项目因为这里的主要目的是实现菜单的动画,所以这里的菜单比较简单,我们的menu是一个StatefulWidget,里面就是一个Co......
  • GYM100212B - I Just Called...
    大模拟。首先的难度在于理解题意:打电话的地点分为镇、地区、超级地区三级。其中,一些地区是被网络连接的。电话号码的前缀由地区号+镇号组成。它们可以是不等长的,但是整个电话号码的长度是\(d\)。一个镇可能有多个镇号,不同地区的镇可以拥有相同的镇号,但地区号是唯一的。同时......
  • 让Flutter 应用程序性能提高 10 倍的 10 个技巧
    Flutter应用程序以其精美的设计和流畅的功能而闻名,但性能问题会很快破坏用户体验。借助这10个优化性能的专家技巧,将您的应用提升到一个新的水平。使用WidgetsBindingObserver跟踪应用程序的生命周期使用“WidgetsBindingObserver”来跟踪您的应用程序的生命周期。此观察器允许......
  • ChatGPT + Flutter快速开发多端聊天机器人App
    ChatGPT+Flutter快速开发多端聊天机器人Appdownload:3wzxit666comChatGPT+Flutter快速开发:打造高效智能的移动应用ChatGPT是一个基于自然语言处理的聊天机器人平台,Flutter则是一个快速、美观、高效的跨平台移动应用开发框架。通过将这两个工具结合起来,可以快速打造出一款高效......
  • Flutter get_storage本地存储
    倪大头关注IP属地:山东0.0972021.09.0818:01:18字数84阅读4,451之前本地存储用的是shared_preferences,但它的存取都是异步的,现在推荐一个Getx提供的本地存储插件get_storagedependencies:get_storage:import'package:get_storage/get_storage.dart';需要......
  • Flutter 使用dio来发起网络请求以及Cookie管理
    前言Flutter官方建议您使用 dio 来发起网络请求,在学习过程中,也尝试过用dartio中的HttpClient发起的请求,这里主要讲一下dio的使用以及CookieJar、CookieManager管理cookie。diodio是一个强大易用的darthttp请求库,支持RestfulAPI、FormData、拦截器、请求取消、Cookie......
  • Flutter依赖注入
    依赖注入依赖注入(DependencyInjection,简称DI)是一种软件设计模式,它的主要目的是将对象之间的依赖关系解耦,使得代码更加可维护、可测试、可扩展,使得代码更易于维护和测试。在Flutter中,DI可以帮助我们管理应用程序中的各种依赖关系,包括服务、数据存储和UI组件等。在DI模式中,我们将......
  • flutter学习笔记(二)
    flutter一切皆widgetflutter和web前端的区别:1.js语法变成dart2.html标签变成组件widget3.flutter里没有css,只有各种widget的属性来实现样式(比如绝对定位用Stack组件来实现)fluter和web前端的相同点:1.dart语法接近js2.flutter里也可以实现flex弹性布局,用Expanded来实现(Expand......
  • Side by Side 1, Third Edition [Longman] + AUDIO
    SidebySide1,ThirdEdition[Longman]+AUDIOLevel:BeginnerA1Описание:SidebySide,ThirdEdition,byStevenJ.MolinskyandBillBliss,isadynamic,all-skillsprogramthatintegratesconversationpractice,reading,writing,andlistening—al......
  • flutter 使用 http 请求数据
    flutter虽然有原生的HttpClient,package:http对开发会更友好,这是官方推荐的网络请求模块。安装httppackagefluterpubaddhttp在android文件夹下的AndroidManifest.xml文件,添加网络权限,<uses-permissionandroid:name="android.permission.INTERNET"/>构造URI因为ht......