如何正确播放音频文件到SKYPE4COM

时间:2015-09-17 21:31:37

标签: c# naudio skype4com

我正在开发skype插件。它应该在通话期间播放音频文件。

音频播放器使用naudio库

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
    <li>Link 1</li>
    <li>Link 2</li>
    <li>Link 3</li>
    <li>Link 4</li>
    <li>Link 5</li>
    <li>Link 6</li>
    <li>Link 7</li>
    <li>Link 8</li>
    <li>Link 9</li>
    <li>Link 10</li>
</ul>

在skype插件类中,我创建了NetworkStream和TcpListener。使用来自播放器的事件来获取缓冲区数据并写入网络流 WriteToStream(buffer,0,num); 在通话开始时我改变了Skype的输入

public class AudioPlayback : IDisposable, IPlayer
{
    WaveStream _outStream;
    IWavePlayer _player;
    IWaveIn _recorder;
    public event Action<byte[], int> DataAvailable;

    public AudioPlayback()
    {
        _recorder = new WaveInEvent();
        _recorder.WaveFormat = new WaveFormat(16000, 16, 1);
        _recorder.DataAvailable += OnRecorderDataAvailable;
    }
    private void OnRecorderDataAvailable(object sender, WaveInEventArgs e)
    {
        if (DataAvailable!= null)
        {
            DataAvailable(e.Buffer, e.BytesRecorded);
        }
    }
    public void LoadFile(string fileName)
    {
        _outStream = new Mp3FileReader(fileName);
        if (_outStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
        {
            _outStream = WaveFormatConversionStream.CreatePcmStream(_outStream);
        }
    }
    private void CreatePlayer()
    {
        if (_player == null)
        {
            var waveOut = new WaveOut();
            waveOut.DesiredLatency = 200;
            waveOut.NumberOfBuffers = 2;
            waveOut.DeviceNumber = 0;
            _player = waveOut;
        }
    }
    public void Play()
    {
        CreatePlayer();
        if (_player.PlaybackState != PlaybackState.Playing)
        {
            if (_player.PlaybackState == PlaybackState.Stopped)
                _recorder.StartRecording();

            _player.Init(_outStream);
            _player.Play();
         }
    }
}

与此斗争了好几个小时。最后只有在打开立体声混音器(录音设备)时才能在另一个Skype上获得声音。 问题:这是正确的方法吗?我不喜欢播放声音并捕获它。但在这里我有一个积极的事情 - 我使用适合skype的参数完全捕获。

0 个答案:

没有答案