将二进制数据转换为颤动的音频

时间:2020-08-17 19:51:18

标签: flutter

我将服务器安装在C#(Windows窗体)中,从中记录系统声音并通过websocket将声音作为字节数组段发送。我创建了一个客户端,用来播放从websocket服务器接收的数据, 当我打印从服务器接收的数据时,它会给我类似的东西

[44、208、240、11、78、112、62、234、159、35、145、128、240、99、91, 123、252、181、56、44、222、214、137、206、45、55、59、114、199、206, 47、230、77、154、200、12、218、187、187、100、219、225、6、82、123, 75、133、251、105、44、243、232、69、24、31、95、39、136、43、152, 121、233、56、22、197、141、44、213、47、182、77、59、171、201、37, 101、125、203、126、113、131、175、194、244、7、158、154、138、25, 223、217、123、112、225、133、139、59、230、31、227、110、92、4、187, 187、99、222、217、173、153、185、54、145、63、128、102、34、148、64, 242、188、131、4、127、49、217、38、41、58、39、53、209、46、216、160, 164、142、102、226、151、223、133、150、201、66、131、133、89、216, 69、174、181、117、114、23、188、73、1、180、156、179、254、119、219, 231、142、139、40、214、75、187、97、126、85、2、86、178、7、33、112, 4,121,242,39,185,155,27,173,24,185,226,167,141,105,58, 104、202、47]

当我打印数据的运行时类型时,结果是

_uint8arrayView

我在网上冲浪时没有发现任何与扑朔迷离的箱子相似的东西,所以我不知道该怎么办。我想使用soundpool packageAssetAudioPlayer package播放它。任何想法将不胜感激。提前谢谢!。

这是我到目前为止所做的主要逻辑

  Future client() async {
    Random r = new Random();
    String key = base64.encode(List<int>.generate(8, (_) => r.nextInt(255)));

    HttpClient client = HttpClient(/* optional security context here */);
    Uri uri = new Uri(
        scheme: "http",
        host: _controller.text.trim(),
        port: int.parse("5970", radix: 10),
        path: "");
    HttpClientRequest request = await client.getUrl(uri);
    // HttpClientRequest request = await client.get(
    //     'ws://${_controller.text.trim()}',
    //     int.parse("5970", radix: 10),
    //     'chat'); // form the correct url here
    request.headers.add('Connection', 'upgrade');
    request.headers.add('Upgrade', 'websocket');
    request.headers
        .add('sec-websocket-version', '13'); // insert the correct version here
    request.headers.add('sec-websocket-key', key);

    HttpClientResponse response = await request.close();
    // todo check the status code, key etc
    Socket socket = await response.detachSocket();

    WebSocket ws = WebSocket.fromUpgradedSocket(
      socket,
      serverSide: false,
    );
    ws.listen(
      (event) {
        connected = true;
        var bytes = File.fromRawPath(event);

        var s = openBytesStream(event);

        //streamController.addStream(event);
        //stream(s);
        print(event.runtimeType);

        //soudpool();
      },
      onError: (error) {
        connected = false;
      },
      onDone: () {
        connected = false;
      },
      cancelOnError: false,
    );
  }


  final assetsAudioPlayer = AssetsAudioPlayer();

  Future stream(String url) async {
    try {
      await assetsAudioPlayer.open(
        Audio.liveStream(url),
        showNotification: true,
        autoStart: true,
      );
    } catch (t) {
      //stream unreachable
      print(t);
    }
  }

  Future<void> soudpool(Uint8List soundData) async {
    Soundpool pool = Soundpool(streamType: StreamType.notification);

    int soundId = await pool.loadAndPlayUint8List(soundData);

    int streamId = await pool.play(soundId);
  }

0 个答案:

没有答案