ASP.NET/C#のサーバー側マイクロフォンにアクセスしようとしています。私がやることを計画しています何ASP.NET/C#のサーバー側マイクロフォンキャプチャ
:
どちらのページをロードすると、またはボタンをクリックすると、C#の-functionがアクティブになります。これは、マイクストリームを取得し、それを出力ストリームとして再生します。あなたがページに行き、ボタンをクリックすると、私はマイクロホンに何を話すのか聞いてきます。
これは理論です。 Atmは動作しません。私が続ける前に、私はそれが音声チャットではないことを言いたいと思います。ちょうど私のマイク入力がホームページ上でライブ演奏されています。クライアントサイドのマイクロフォンキャプチャにFlashまたはSilverlightを使用することは完全にわかっています。
サウンド出力が機能します。ホームページをクリックするだけで簡単に.wavファイルから再生できます。マイクが認識されます。 Response.Writeを使用して、マイクのデバイス番号、製品名などをホームページに表示しました。したがって、サーバーはマイクロを知っています。例外はスローされません。サウンドはありませんが、デバッグ中にバグは見つかりませんでした。
私はコードにバグがあると思います。ちょうど言及する:デバイス番号、ここではちょうど0として置く、正しいです。私は他のアプリケーションでそれをテストしました。コードは非常にシンプルで、例としてループバックのためにYouTubeのNAudio-Tutorialのコードを使用しました。なぜなら、それが動作するかどうかを判断しようとしているからです。ここで
はコードです:ここでは
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NAudio.Wave;
public partial class _Default : System.Web.UI.Page
{
private NAudio.Wave.WaveIn sourceStream = null;
private NAudio.Wave.DirectSoundOut waveOut = null;
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "Seite aufgerufen";
}//protected void Page_Load(object sender, EventArgs e)
protected void show(object sender, EventArgs e)
{
}
protected void start(object sender, EventArgs e)
{
Label1.Text = "Aufnahme gestartet";
int deviceNumber = 0;
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.DeviceNumber = deviceNumber;
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream);
waveOut = new NAudio.Wave.DirectSoundOut();
waveOut.Init(waveIn);
sourceStream.StartRecording();
waveOut.Play();
}//protected void Page_Load(object sender, EventArgs e)
protected void stop(object sender, EventArgs e)
{
Label1.Text = "Aufnahme beendet";
if (waveOut != null)
{
waveOut.Stop();
waveOut.Dispose();
waveOut = null;
}//if (waveOut != null)
if (sourceStream != null)
{
sourceStream.StopRecording();
sourceStream.Dispose();
sourceStream = null;
}//if (sourceStream != null)
}//protected void Page_Load(object sender, EventArgs e)
}//public partial class _Default : System.Web.UI.Page
は、ページを表示するためのコードです:
<%@ Page Title="Startseite" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Willkommen bei ASP.NET.
</h2>
<p>
Weitere Informationen zu ASP.NET finden Sie auf <a href="http://www.asp.net" title="ASP.NET-Website">www.asp.net</a>.
</p>
<p>
<a href="http://go.microsoft.com/fwlink/?LinkID=152368"
title="MSDN-ASP.NET-Dokumente">Dokumentation finden Sie auch unter ASP.NET bei MSDN</a>.
<p>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br />
<asp:Button ID="Button1" runat="server" Text="Start" OnClick = "start" /><br />
<asp:Button ID="Button2" runat="server" Text="Start" OnClick = "stop" /><br />
</p>
</asp:Content>
Windowsフォームアプリケーションから機能しますか? –
デフォルトのNAudio.Wave.DirectSoundOut()オブジェクトがブラウザを介してストリーミングされると思われる原因は何ですか?私はそれがサーバー上のデフォルトのサウンドデバイスに出力されると思う。 – user957902
Windowsフォームアプリで完璧に動作するようです。だからこそ、私はその問題について何か不思議です。また、DirectSoundOut()がストリームからファイルを取り出したときにうまく動作します。私はDirectSoundOut以外の何かを試してみるでしょう、多分それは動作します。 – yetanotheruser