簡體   English   中英

將wave轉換為字節數組

[英]convert wave to byte array

我是C#的新手,我想通過ip發送語音,但是我在這里遇到了問題。

private Byte[] arr;

private void send()
{
     arr = File.ReadAllBytes("wave path");
     con = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

     // ...

     con.Send(arr, 0, arr.length, 0);
     con.Close();
}

現在可以將wave轉換為byte

File.ReadAllBytes("wave path");

但實際上我想直接從麥克風發送電波(不是從電波文件發送)

所以我使用NAudio.dll錄制音頻,這是代碼

private void button2_Click(object sender, EventArgs e)
{
    int devicenum = 0;
    sourcestream = new NAudio.Wave.WaveIn();
    sourcestream.DeviceNumber = devicenum;
    sourcestream.WaveFormat = new NAudio.Wave.WaveFormat(4410, NAudio.Wave.WaveIn.GetCapabilities(devicenum).Channels);
    NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourcestream);

    waveOut = new NAudio.Wave.DirectSoundOut();
    waveOut.Init(waveIn);
    sourcestream.StartRecording();
    waveOut.Play();
}

我測試了它從麥克風播放的音頻

如何將waveOut轉換為數組字節,以便發送

 waveOut.Play();

我發現一些視頻將音頻寫入波形文件,然后再次從文件讀取字節。 有什么方法可以直接將音頻轉換為數組字節嗎?

使用BufferedWaveProvider初始化WaveOut實例。 這將允許您通過將樣本塊寫入BufferedWaveProvider來添加要播放的樣本塊,如下所示:

waveOut = new WaveOut())
var provider = new BufferedWaveProvider(waveFormat);
waveOut.Init(provider);
waveOut.Play();

provider.AddSamples(sampleBuffer, 0, sampleBuffer.Length);

因此,在從遠程發送器獲取樣本的網絡接收器代碼中,將緩沖區(當然是在解碼后)添加到BufferedWaveProvider ,它將開始播放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM