gpt4 book ai didi

sockets - 使用NAudio播放来自android设备的音频字节流

转载 作者:行者123 更新时间:2023-12-03 02:18:38 25 4
gpt4 key购买 nike

出于测试目的,我已经实现了C#代码,只是为了播放缓冲区的单个片段(通过在while循环中进行操作,我可以读取来自套接字的所有数据并播放)
我使用了nAudio的这三个版本(v1.2,v1.3,v1.7),这三个版本在这种情况下给出了不同的错误,下面列出了它们(这让我感到困惑,为什么会发生)。
我已经附上了我的源代码。

使用NAudio 1.3时

  • FormatException未处理。
  • 说明-无法识别的MP3块
  • 错误行:-使用(WaveStream blockAlignedStream =
    新的BlockAlignReductionStream(
    WaveFormatConversionStream.CreatePcmStream(
    新的Mp3FileReader(ms))))

  • 使用NAudio 1.6时的
  • InvaliedOperationException未处理
  • discription-以16,000的采样率获得一个帧,该MP3的采样率为48000。Mp3FileReader不支持更改采样率。
  • 错误行-相同行

  • 使用NAudio 1.7时的
  • NullReferenceException未处理
  • discription-未将对象引用设置为对象的实例。
  • 错误线-相同行

  • 我使用1.7而不是1.6,因为它支持采样率更改(在引用资料中提到)。然后我得到了上面的错误。
    每次我得到错误行时都在同一行。
    由于我不是C#和.net平台的新手,因此需要您的帮助来更正此问题。谢谢您,期待答复。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using NAudio.Wave;
    using System.IO;
    using System.Threading;

    namespace audioTest2
    {
    class Program
    {
    public static void Main()
    {

    while (true)
    {
    Console.WriteLine("Waiting for broadcast");


    UdpClient listener = new UdpClient(5000);
    IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 5000);
    byte[] buffer = listener.Receive(ref groupEP);
    using (Stream ms = new MemoryStream())
    {

    buffer = listener.Receive(ref groupEP);
    Console.WriteLine("read : " + buffer.Length);
    ms.Write(buffer,0,buffer.Length);

    ms.Position = 0;
    using (WaveStream blockAlignedStream =
    new BlockAlignReductionStream(
    WaveFormatConversionStream.CreatePcmStream(
    new Mp3FileReader(ms))))
    {
    using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
    {
    waveOut.Init(blockAlignedStream);
    waveOut.Play();
    while (waveOut.PlaybackState == PlaybackState.Playing)
    {
    System.Threading.Thread.Sleep(100);
    }
    }
    }

    }
    }
    }

    }

    }

    最佳答案

    我强烈建议您查看NAudio源代码附带的MP3流演示(在NAudioDemo项目中)。读取MP3文件时,不需要WaveFormatConversionStreamBlockAlignReduction流,并且应避免使用函数回调-而是使用WaveOutEvent。另外,Mp3FileReader类是为可重新放置的整个MP3文件设计的。您需要的方法是解析MP3帧到达时,对其分别解码并以某种方式缓冲音频(例如,使用BufferedWaveProvider)。

    关于sockets - 使用NAudio播放来自android设备的音频字节流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007867/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com