[解決済み] C#によるストリームからのオーディオ再生
2022-11-28 17:24:40
質問
C#で、音声(例えばMP3)を直接 System.IO.Stream から直接オーディオ (例えば MP3) を再生する方法はありますか?
解決方法 オーディオ
の助けを借りて NAudio 1.3 ではそれが可能です。
- MP3 ファイルを URL から MemoryStream にロードする。
- MP3 データを完全に読み込んだ後、wave データに変換する
- WAVEデータを NAudio のWaveOutクラスで再生します。
半分だけ読み込まれた MP3 ファイルを再生することさえできればよかったのですが、これは NAudio ライブラリの設計上、不可能なようです。
そして、これがその作業を行う関数です。
public static void PlayMp3FromUrl(string url)
{
using (Stream ms = new MemoryStream())
{
using (Stream stream = WebRequest.Create(url)
.GetResponse().GetResponseStream())
{
byte[] buffer = new byte[32768];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
}
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の最近のバージョンでの変更を反映するために回答を更新しました。
を使えば可能です。
NAudio
を使えば可能です。これは、PC 上の ACM コーデックを探して変換を行います。NAudio に付属する Mp3FileReader は現在、ソース ストリーム内で位置を変更できることを期待しています (MP3 フレームのインデックスを前面に作成します)ので、ネットワーク経由のストリーミングには適していません。しかしながら、まだ
MP3Frame
と
AcmMp3FrameDecompressor
クラスで、ストリームされたMP3をオンザフライで伸長することができます。
私のブログで説明した記事
を使用してMP3ストリームを再生する方法について説明した記事をブログに投稿しました。
. 基本的には、1つのスレッドがMP3フレームをダウンロードし、それを解凍し、それを
BufferedWaveProvider
. 次に別のスレッドが
BufferedWaveProvider
を入力として再生します。
関連
-
[解決済み] Visual Studioの "ターゲットフレームワーク "が見つからない
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] 到達不能なホストに対してソケット操作を行おうとした
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] .NET Framework 4 マルチターゲティングパックがアンインストールできない
-
[解決済み] WinSCP 応答待ちタイムアウト
-
[解決済み] .net の OOM 問題を解決する必要があります。
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] 文字列からストリームを生成するにはどうすればよいですか?
-
[解決済み] Microsoft.ACE.OLEDB.12.0' プロバイダがローカルマシンに登録されていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] msiexec を使用せずにコマンドラインから MSI ファイルをアンインストールする
-
[解決済み] VS2017/2015 で .xproj ファイルを開く方法
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] VB.NETで線を引く方法
-
[解決済み] 到達不能なホストに対してソケット操作を行おうとした
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] .NET WebRequestを使用してsharepointにファイルをアップロードすると、409/Conflict HTTPエラーが発生する理由?
-
[解決済み] 列挙型を文字列に変換する
-
[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?
-
[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?