0

私はオーディオ初心者です

<Audio src = "data:audio / wav; base64、AA ....." />のようにデータを文字列として渡すことで、HTMLページにオーディオを埋め込むことを検討していますが、これを上げる必要があります。ボリューム。NAudioを使用してみましたが、変換が行われ、再生されなくなったようです。これは私が音量を上げるために使用するコードです:

public string ConvertToString(Stream audioStream)
{
audioStream.Seek(0,SeekOrigin.Begin);
byte[] bytes = new byte[audioStream.Length];
audioStream.Read(bytes,0,(int)audioStream.Length);
audioStream.Seek(0,SeekOrigin.Begin);
return Convert.ToBase64String(bytes);
}

var fReader = new WaveFileReader(strm);
var chan32 = new WaveChannel32(fReader,50.0F,0F);
var ouputString = "data:audio/wav;base64," + ConvertToString(chan32);

しかし、outputStringをオーディオタグに入れると、再生に失敗します。NAudioはどのような種類の変換を行いますか。また、シリアル化してブラウザで再生できるように、オーディオストリームを取得するにはどうすればよいですか。または別の提案のために:ボリュームを上げるのと同じくらい簡単な何かのためにNAudioがヘビー級になったら、私にとってより良いオプションは何ですか?

4

1 に答える 1

1

私はWebページにWAVファイルを埋め込むことの専門家ではありません(正直言って、それは良い考えではないようです-WAVはWebページにサウンドを配信する最も非効率的な方法の1つです)が、私はそれを期待しますヘッダーを含むエンティアWAVファイルをエンコードする必要があります。サンプルデータを書き出すだけです。したがって、NAudioでは、WaveFileWriterを使用してMemoryStreamまたは一時ファイルに書き込み、ページに書き込むことができる音量調整済みのWAVファイルを作成する必要があります。

コードにはさらに2つの問題があります。1つは、32ビット浮動小数点に移行したため、WAVファイル形式の効率がさらに低下したことです(元のファイルのサイズが2倍になります)。WAVファイルを作成する前に、Wave32To16Streamを使用して16ビットに戻る必要があります。2つ目は、各サンプルに50を掛けることです。これにより、ほぼ確実に信号がひどく歪んでしまいます。クリッピングは、WAVファイルを増幅するときに非常に簡単に発生する可能性があり、元の録音にどれだけのヘッドルームがあるかによって異なります。多くの場合、ダイナミックレンジ圧縮は、単に音量を上げるよりも優れたオプションです。

于 2013-03-05T08:33:43.447 に答える