2016-12-08 16 views
2

サーバーから.mp3ファイルを取得して再生するDart Webアプリケーションを作成しました。私はFlutterを使用してモバイル版を作成しようとしています。私はダーツを知っている:web_audioは、Webアプリケーションのための主要なオプションですが、Flutterは私のSDKでそれを見つけることができません。フラッタアプリのための私のコードのweb_audio部品:Flutterアプリケーションで.mp3ファイルを再生するにはどうすればよいですか?

import 'dart:html'; 
    import 'dart:convert'; 
    import 'dart:web_audio'; 
    AudioContext audioContext; 

    main() async { 
     audioContext = new AudioContext(); 
     var ul = (querySelector('#songs') as UListElement); 
     var signal = await HttpRequest.getString('http://10.0.0.6:8000/api/filelist'); 
    // Map json = JSON.decode(signal); 
    // for (Map file in json['songs']) { 
     print("signal: $signal"); 
     Map json = JSON.decode(signal); 
     for (Map file in json['songs']) { 
     var li = new LIElement() 
      ..appendText(file['title']); 
     var button = new ButtonElement(); 
     button.setAttribute("id", "#${file['file']}"); 
     button.appendText("Play"); 

     li.append(button); 
     new Song(button, file['file']); 
     ul.append(li); 

     } 

    } 


    class Song { 
     ButtonElement button; 
     bool _playing = false; 
     // AudioContext _audioContext; 
     AudioBufferSourceNode _source; 
     String title; 

     Song(this.button, this.title) { 

     button..onClick.listen((e) => _toggle()); 
     } 

     _toggle() { 
     _playing = !_playing; 
     _playing ? _start() : _stop(); 
     } 

     _start() { 
     return HttpRequest 
      .request("http://10.0.0.6:8000/music/$title", responseType: "arraybuffer") 
      .then((HttpRequest httpRequest) { 
       return audioContext 
        .decodeAudioData(httpRequest.response) 
      .then((AudioBuffer buffer) { 
        _source = audioContext.createBufferSource(); 
        _source.buffer = buffer; 
        _source.connectNode(audioContext.destination); 
        _source.start(0); 
        button.text = "Stop"; 
        _source.onEnded.listen((e){ 
        _playing = false; 
        button.text = "Play"; 
       }); 
      }); 
     }); 
     } 

     _stop() { 
     _source.stop(0); 
     button.text = "Play"; 
     } 
    } 

がどのように私はダーツを書き換えます:私は、私はJavascriptに次のコンパイルすることができますので、それは、あります知っていますか? FlutterでMediaPlayerにアクセスできますか?もしそうなら、私はpubspec.yamlでどのように参照しますか?

+0

基本的には、応答として.mp3ファイルと.wavファイルを送信するサービスがあります。ファイルの名前はリクエストのURLにあります。私はそのサービスを消費し、その音楽をFlutterアプリで再生できるようにしたい。このようなイベントはどうなるべきですか? –

+1

flutter_spritesライブラリを介してFlutter用のオーディオ再生コンポーネントがありました。 flutter_spritesとオーディオコンポーネントの両方がFlutterコードベースから削除されました。[https://github.com/flutter/flues/issues/1364](https://github.com/flutter/flutter/issues/1364)を参照してください。 。 Flutterチームに連絡して、サウンド/オーディオコンポーネントの状態を確認できます。または、[Flutter hello_serviceの例](https://github.com/flutter/flutter/tree/master/examples/hello_services)に基づいて、Android/JavaレイヤーとDartを統合した独自のサービスを作成してください。 –

+0

Flutterチームにどのように連絡しますか? –

答えて

2

上記のraju-bitterのように、Flutterはコアエンジンにいくつかのビルトインオーディオラッパーを提供するために使用されましたが、それ以降は削除されています:https://github.com/flutter/flutter/issues/1364

フラッタを使用したアプリは、iOSまたはAndroidアプリだけなので、hello_servicesモデル(https://github.com/flutter/flutter/tree/master/examples/hello_services)のJavaまたはObj-Cコードを使用して、Flutter経由で実行できるすべてのことを行うことができます。このモデルはhttps://flutter.io/platform-servicesに記載されています。私たちがまだ望むほど簡単ではありません。近いうちに多くの改善が見られました。

関連する問題