Ejemplo n.º 1
0
        /// <summary>
        /// 打开文件
        /// </summary>
        /// <param name="filename">文件名</param>
        public void OpenFile(string filename)
        {
            openningFile = filename;
            //Debug.WriteLine("已调用BassEngine.OpenFile()");
            Stop();
            pendingOperation = PendingOperation.None;

            var flag   = (Un4seen.Bass.BASSFlag)Enum.Parse(typeof(Un4seen.Bass.BASSFlag), ConfigurationManager.AppSettings["Bass.OpenFileConfig"]);
            int handle = Un4seen.Bass.Bass.BASS_StreamCreateFile(filename, 0, 0, flag);

            if (handle != 0)
            {
                ActiveStreamHandle = handle;
                ChannelLength      = TimeSpan.FromSeconds(Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(ActiveStreamHandle, Un4seen.Bass.Bass.BASS_ChannelGetLength(ActiveStreamHandle, 0)));
                Un4seen.Bass.BASS_CHANNELINFO info = new Un4seen.Bass.BASS_CHANNELINFO();
                Un4seen.Bass.Bass.BASS_ChannelGetInfo(ActiveStreamHandle, info);
                sampleFrequency = info.freq;

                int syncHandle = Un4seen.Bass.Bass.BASS_ChannelSetSync(ActiveStreamHandle,
                                                                       Un4seen.Bass.BASSSync.BASS_SYNC_END,
                                                                       0,
                                                                       endTrackSyncProc,
                                                                       IntPtr.Zero);

                if (syncHandle == 0)
                {
                    throw new ArgumentException("Error establishing End Sync on file stream.", "filename");
                }

                CanPlay = true;
                RaiseOpenSucceededEvent();

                switch (pendingOperation)
                {
                case PendingOperation.None:
                    break;

                case PendingOperation.Play:
                    Play();
                    break;

                case PendingOperation.Pause:
                    Pause();
                    break;

                default:
                    break;
                }
            }
            else
            {
                RaiseOpenFailedEvent();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 播放当前流
        /// </summary>
        private void PlayCurrentStream()
        {
            // Play Stream
            if (ActiveStreamHandle != 0 && Un4seen.Bass.Bass.BASS_ChannelPlay(ActiveStreamHandle, false))
            {
                Un4seen.Bass.BASS_CHANNELINFO info = new Un4seen.Bass.BASS_CHANNELINFO();
                Un4seen.Bass.Bass.BASS_ChannelGetInfo(ActiveStreamHandle, info);
            }
#if DEBUG
            else
            {
                Debug.WriteLine("Error={0}", Un4seen.Bass.Bass.BASS_ErrorGetCode());
            }
#endif
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 播放当前流
        /// </summary>
        private void PlayCurrentStream()
        {
            // Play Stream
            if (ActiveStreamHandle != 0 && Un4seen.Bass.Bass.BASS_ChannelPlay(ActiveStreamHandle, false))
            {
                Un4seen.Bass.BASS_CHANNELINFO info = new Un4seen.Bass.BASS_CHANNELINFO();
                Un4seen.Bass.Bass.BASS_ChannelGetInfo(ActiveStreamHandle, info);
            }
            #if DEBUG
            else
            {

                Debug.WriteLine("Error={0}", Un4seen.Bass.Bass.BASS_ErrorGetCode());

            }
            #endif
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 打开网络地址
        /// </summary>
        /// <param name="url">URL地址</param>
        public void OpenUrlAsync(string url)
        {
            openningFile = url;
            //Debug.WriteLine("已调用BassEngine.OpenUrlAsync()");

            Stop();
            pendingOperation = PendingOperation.None;

            onlineFileWorker = new Thread(new ThreadStart(() =>
                {
                    int handle = Un4seen.Bass.Bass.BASS_StreamCreateURL(url, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT, null, IntPtr.Zero);

                    Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            if (handle != 0)
                            {
                                if (openningFile == url)		//该文件为正在打开的文件
                                {
                                    ActiveStreamHandle = handle;
                                    ChannelLength = TimeSpan.FromSeconds(Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(ActiveStreamHandle, Un4seen.Bass.Bass.BASS_ChannelGetLength(ActiveStreamHandle, 0)));
                                    Un4seen.Bass.BASS_CHANNELINFO info = new Un4seen.Bass.BASS_CHANNELINFO();
                                    Un4seen.Bass.Bass.BASS_ChannelGetInfo(ActiveStreamHandle, info);
                                    sampleFrequency = info.freq;

                                    int syncHandle = Un4seen.Bass.Bass.BASS_ChannelSetSync(ActiveStreamHandle,
                                         Un4seen.Bass.BASSSync.BASS_SYNC_END,
                                         0,
                                         endTrackSyncProc,
                                         IntPtr.Zero);

                                    if (syncHandle == 0)
                                        throw new ArgumentException("Error establishing End Sync on file stream.", "path");

                                    CanPlay = true;
                                    RaiseOpenSucceededEvent();

                                    switch (pendingOperation)
                                    {
                                        case PendingOperation.None:
                                            break;
                                        case PendingOperation.Play:
                                            Play();
                                            break;
                                        case PendingOperation.Pause:
                                            Pause();
                                            break;
                                        default:
                                            break;
                                    }
                                }
                                else		//该文件不是正在打开的文件(即文件已过时,可能的原因是UI线程较忙,调用onlineFileWorker.Abort()时BeginInvoke的内容已提交,但还未执行)
                                {
                                    if (!Un4seen.Bass.Bass.BASS_StreamFree(handle))
                                    {
                                        Debug.WriteLine("BASS_StreamFree失败:" + Un4seen.Bass.Bass.BASS_ErrorGetCode());
                                    }
                                    //Debug.WriteLine("已调用BASS_StreamFree()");
                                }
                            }
                            else
                            {
                                Debug.WriteLine(Un4seen.Bass.Bass.BASS_ErrorGetCode());
                                RaiseOpenFailedEvent();
                            }
                        }));
                    onlineFileWorker = null;
                }));
            onlineFileWorker.IsBackground = true;
            onlineFileWorker.Start();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 打开文件
        /// </summary>
        /// <param name="filename">文件名</param>
        public void OpenFile(string filename)
        {
            openningFile = filename;
            //Debug.WriteLine("已调用BassEngine.OpenFile()");
            Stop();
            pendingOperation = PendingOperation.None;

            int handle = Un4seen.Bass.Bass.BASS_StreamCreateFile(filename, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);

            if (handle != 0)
            {
                ActiveStreamHandle = handle;
                ChannelLength = TimeSpan.FromSeconds(Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(ActiveStreamHandle, Un4seen.Bass.Bass.BASS_ChannelGetLength(ActiveStreamHandle, 0)));
                Un4seen.Bass.BASS_CHANNELINFO info = new Un4seen.Bass.BASS_CHANNELINFO();
                Un4seen.Bass.Bass.BASS_ChannelGetInfo(ActiveStreamHandle, info);
                sampleFrequency = info.freq;

                int syncHandle = Un4seen.Bass.Bass.BASS_ChannelSetSync(ActiveStreamHandle,
                     Un4seen.Bass.BASSSync.BASS_SYNC_END,
                     0,
                     endTrackSyncProc,
                     IntPtr.Zero);

                if (syncHandle == 0)
                    throw new ArgumentException("Error establishing End Sync on file stream.", "path");

                CanPlay = true;
                RaiseOpenSucceededEvent();

                switch (pendingOperation)
                {
                    case PendingOperation.None:
                        break;
                    case PendingOperation.Play:
                        Play();
                        break;
                    case PendingOperation.Pause:
                        Pause();
                        break;
                    default:
                        break;
                }
            }
            else
            {
                RaiseOpenFailedEvent();
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 打开网络地址
        /// </summary>
        /// <param name="url">URL地址</param>
        public void OpenUrlAsync(string url)
        {
            openningFile = url;
            //Debug.WriteLine("已调用BassEngine.OpenUrlAsync()");

            Stop();
            pendingOperation = PendingOperation.None;

            onlineFileWorker = new Thread(new ThreadStart(() =>
            {
                int handle = Un4seen.Bass.Bass.BASS_StreamCreateURL(url, 0, openUrlConfig, null, IntPtr.Zero);

                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    if (handle != 0)
                    {
                        if (openningFile == url)                                                        //该文件为正在打开的文件
                        {
                            ActiveStreamHandle = handle;
                            ChannelLength      = TimeSpan.FromSeconds(Un4seen.Bass.Bass.BASS_ChannelBytes2Seconds(ActiveStreamHandle, Un4seen.Bass.Bass.BASS_ChannelGetLength(ActiveStreamHandle, 0)));
                            Un4seen.Bass.BASS_CHANNELINFO info = new Un4seen.Bass.BASS_CHANNELINFO();
                            Un4seen.Bass.Bass.BASS_ChannelGetInfo(ActiveStreamHandle, info);
                            sampleFrequency = info.freq;

                            int syncHandle = Un4seen.Bass.Bass.BASS_ChannelSetSync(ActiveStreamHandle,
                                                                                   Un4seen.Bass.BASSSync.BASS_SYNC_END,
                                                                                   0,
                                                                                   endTrackSyncProc,
                                                                                   IntPtr.Zero);

                            if (syncHandle == 0)
                            {
                                throw new ArgumentException("Error establishing End Sync on file stream.", "url");
                            }

                            CanPlay = true;
                            RaiseOpenSucceededEvent();

                            switch (pendingOperation)
                            {
                            case PendingOperation.None:
                                break;

                            case PendingOperation.Play:
                                Play();
                                break;

                            case PendingOperation.Pause:
                                Pause();
                                break;

                            default:
                                break;
                            }
                        }
                        else                                                    //该文件不是正在打开的文件(即文件已过时,可能的原因是UI线程较忙,调用onlineFileWorker.Abort()时BeginInvoke的内容已提交,但还未执行)
                        {
                            if (!Un4seen.Bass.Bass.BASS_StreamFree(handle))
                            {
                                Debug.WriteLine("BASS_StreamFree失败:" + Un4seen.Bass.Bass.BASS_ErrorGetCode());
                            }
                            //Debug.WriteLine("已调用BASS_StreamFree()");
                        }
                    }
                    else
                    {
                        Debug.WriteLine(Un4seen.Bass.Bass.BASS_ErrorGetCode());
                        RaiseOpenFailedEvent();
                    }
                }));
                onlineFileWorker = null;
            }));
            onlineFileWorker.IsBackground = true;
            onlineFileWorker.Start();
        }