テスト目的で、バッファーの単一セグメントを再生するためだけに c# コードを実装しました (while ループで実行することにより、ソケットからのデータ全体を読み取って再生できます)。この 3 つのバージョンの nAudio (v1.2) を使用しました。 、v1.3、v1.7) 3 つのバージョンでは、そのコンテキストで異なるエラーが発生します。以下にリストします (なぜそれが起こるのか混乱しています)。ソースコードをこれに添付しました。
NAudio1.3使用時
- FormatException は処理されませんでした。
- 説明 -認識されていない MP3 ブロック
- エラー行 :- (WaveStream blockAlignedStream = new BlockAlignReductionStream( WaveFormatConversionStream.CreatePcmStream( new Mp3FileReader(ms)))) を使用
NAudio1.6使用時
- InvaliedOperationException が処理されませんでした
- 説明 - サンプル レート 48000 の mp3 で、サンプル レート 16000 のフレームを取得しました。Mp3FileReader はサンプル レートの変更をサポートしていません。
- エラー行 - 同行
NAudio 1.7 使用時
- NullReferenceException は処理されませんでした
- 説明 - オブジェクト参照がオブジェクトのインスタンスに設定されていません。
- エラー行 - 同行
サンプルレートの変更をサポートしているため、1.6の代わりに1.7を使用しました(ソースで言及されています)。次に、上記のエラーが発生します。エラー行が同じ行になるたびに。私は 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);
}
}
}
}
}
}
}
}