NScumm.Core.Audio.Mixer.PlayStream C# (CSharp) Method

PlayStream() public method

public PlayStream ( SoundType type, IAudioStream stream, int id = -1, int volume = 255, int balance, bool autofreeStream = true, bool permanent = false, bool reverseStereo = false ) : SoundHandle
type SoundType
stream IAudioStream
id int
volume int
balance int
autofreeStream bool
permanent bool
reverseStereo bool
return SoundHandle
        public SoundHandle PlayStream(SoundType type, IAudioStream stream, int id = -1, int volume = 255,
            int balance = 0, bool autofreeStream = true, bool permanent = false, bool reverseStereo = false)
        {
            lock (_gate)
            {
                if (stream == null)
                {
                    //                    Console.Error.WriteLine("stream is null");
                    return new SoundHandle();
                }

                Debug.Assert(IsReady);

                // Prevent duplicate sounds
                if (id != -1)
                {
                    for (var i = 0; i != NumChannels; i++)
                        if (_channels[i] != null && _channels[i].Id == id)
                        {
                            // Delete the stream if were asked to auto-dispose it.
                            // Note: This could cause trouble if the client code does not
                            // yet expect the stream to be gone. The primary example to
                            // keep in mind here is QueuingAudioStream.
                            // Thus, as a quick rule of thumb, you should never, ever,
                            // try to play QueuingAudioStreams with a sound id.
                            if (autofreeStream)
                                stream.Dispose();
                            return new SoundHandle();
                        }
                }

                // Create the channel
                var chan = new Channel(this, type, stream, autofreeStream, reverseStereo, id, permanent)
                {
                    Volume = volume,
                    Balance = balance
                };
                return InsertChannel(chan);
            }
        }