मैं एक कस्टम एमपी 3 ध्वनि चलाने की कोशिश कर रहा हूं जिसे मैंने ऐप फ़ोल्डर में एक संपत्ति फ़ोल्डर में रखा है, जैसे आप एक फ़ॉन्ट या छवि फ़ाइल के लिए करेंगे, लेकिन फिर मुझे नहीं पता कि कैसे आगे बढ़ना है। मुझे लगता है कि मुझे ऑडियो फ़ाइल को pubspec.yaml में पंजीकृत करने की आवश्यकता हो सकती है, लेकिन कैसे?

और मैं इसे कैसे खेलूं?

मैंने इन दो उत्तरों की जाँच की है: फ्लटर में कस्टम ध्वनि कैसे चलाएं?

स्पंदन - प्ले कस्टम ध्वनियां अपडेट की गईं?

लेकिन पहला बहुत पुराना है और दूसरा ध्वनि पथ के रूप में URL का उपयोग करता है: const kUrl2 = "http://www.rxlabz.com/labz/audio.mp3"; और मुझे जो ध्वनि पसंद है वह ऐप में है, ऑनलाइन नहीं। तो... मैं यह कैसे कर सकता हूँ?

यह मेरा वर्तमान कोड है, जैसा कि आप देख सकते हैं, केवल एक फ्लोटिंग बटन है। और मुझे उस बिंदु पर ध्वनि शुरू करने की आवश्यकता है जिसे मैंने कोड में कहा था।

लेकिन दृश्य स्टूडियो लाल विभिन्न भागों में रेखांकित करता है: प्रतीक्षा करें: यह कहता है कि प्रतीक्षा अपरिचित है। audioPlugin.play: का कहना है कि यह भी अपरिचित है

import 'dart:io';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(new MyApp());

Directory tempDir = await getTemporaryDirectory();
File tempFile = new File('${tempDir.path}/demo.mp3');
await tempFile.writeAsBytes(bytes, flush: true);
AudioPlayer audioPlugin = new AudioPlayer();


class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {


  void _incrementCounter() {
    setState(() {
      print("Button Pressed");

      ///
      /// 
      /// 
      /// Here I Need To start Playing the Sound
      /// 
      /// 
      /// 
      /// 
      audioPlugin.play(tempFile.uri.toString(), isLocal: true);

    });
  }



  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(),
      floatingActionButton: new FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: new Icon(Icons.add),
      ),
    );
  }
}
1
Fabrizio 17 अगस्त 2018, 22:09
pub.dev/packages/audioplayers इस पैकेज का उपयोग करें और पैकेज url पर दिया गया उदाहरण देखें।
 – 
iOSJit
20 जिंदा 2021, 21:50

2 जवाब

सबसे बढ़िया उत्तर

यह सुंदर नहीं है, लेकिन...

एमपी3 फ़ाइल को एसेट फ़ोल्डर में जोड़ें और इसे pubspec.yaml में जोड़ें जैसे यह ए>।

एसेट को rootBundle.load(asset) के साथ बाइनरी डेटा के रूप में लोड करें

ऐप का अस्थायी फ़ोल्डर स्थान प्राप्त करने के लिए path_provider का उपयोग करें

tempDir में फ़ाइल खोलने के लिए नियमित dart:io का उपयोग करें (शायद संपत्ति के नाम का उपयोग करें) और उसमें bytes लिखें।

फ़ॉर्म file:///folderPath/fileName में अस्थायी फ़ाइल नाम से एक file URL बनाएं

इसे ऑडियोप्लेयर पर पास करें, isLocal को सही पर सेट करें (iOS पर आवश्यक)।

import 'dart:async';
import 'dart:io';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:audioplayer/audioplayer.dart';
import 'package:path_provider/path_provider.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Audio Player Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  AudioPlayer audioPlugin = AudioPlayer();
  String mp3Uri;

  @override
  void initState() {
    _load();
  }

  Future<Null> _load() async {
    final ByteData data = await rootBundle.load('assets/demo.mp3');
    Directory tempDir = await getTemporaryDirectory();
    File tempFile = File('${tempDir.path}/demo.mp3');
    await tempFile.writeAsBytes(data.buffer.asUint8List(), flush: true);
    mp3Uri = tempFile.uri.toString();
    print('finished loading, uri=$mp3Uri');
  }

  void _playSound() {
    if (mp3Uri != null) {
      audioPlugin.play(mp3Uri, isLocal: true);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Audio Player Demo Home Page'),
      ),
      body: Center(),
      floatingActionButton: FloatingActionButton(
        onPressed: _playSound,
        tooltip: 'Play',
        child: const Icon(Icons.play_arrow),
      ),
    );
  }
}
3
Richard Heap 18 अगस्त 2018, 17:00
उत्तर के लिए धन्यवाद, लेकिन मुझे दो समस्याएं हैं, यह कहता है कि रूटबंडल अज्ञात है, लेकिन मुझे कुछ भी आयात करने के लिए नहीं कहता है, और मैं स्पंदन और डार्ट के लिए नया हूं, तो क्या आप अंतिम तीन चीजों को कोड की पंक्तियों के रूप में लिख सकते हैं तुमने मुझे करने के लिए कहा था? अग्रिम में धन्यवाद!
 – 
Fabrizio
17 अगस्त 2018, 23:30
1
सुनिश्चित करें कि आपके पास import 'package:flutter/services.dart' show rootBundle; है
 – 
Richard Heap
18 अगस्त 2018, 00:01
मैंने services.dart आयात किया लेकिन यह अभी भी मुझे प्रतीक्षा पर एक त्रुटि देता है।
 – 
Fabrizio
18 अगस्त 2018, 13:46
आपके पास ऐसे बयान थे जो कोड ब्लॉक के हिस्से नहीं थे
 – 
Richard Heap
18 अगस्त 2018, 17:01

ऑडियोप्लेयर पैकेज का उपयोग करें => https://pub.dev/packages/audioplayers

iOS समर्थन के लिए प्लिस्ट में कुंजी जोड़ें

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Pubspec.yaml फ़ाइल में निर्भरताएँ जोड़ें

audioplayers: ^0.13.2

स्पंदन कोड:

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

class AudioTest extends StatefulWidget {
  @override
  _AudioTestState createState() => _AudioTestState();
}

class _AudioTestState extends State<AudioTest> {

  static AudioCache _player = AudioCache();
  static const _audioPath = "count_down.mp3";
  AudioPlayer _audioPlayer = AudioPlayer();

  Future<AudioPlayer> playAudio() async {
    return _player.play(_audioPath);
  }

  void _stop(){
    if (_audioPlayer != null) {
      _audioPlayer.stop();
  }

  @override
  void initState() {

    playAudio().then((player) {
      _audioPlayer = player;
    });

    super.initState();
  }

  @override
  Widget build(BuildContext context) {

    return homeScreen();
  }

  Widget homeScreen() {
    return Scaffold();
    //Enter your code here
  }
}
2
Jithin 15 नवम्बर 2019, 14:45