コード例 #1
0
        public BASSOutput(OutputDevice.StreamProc proc, uint freq, uint chans, string preferredDeviceName, int buflen)
        {
            var outdev = GetInitializedBassRealOutputDevice();

            if (outdev == 0)
            {
                int deviceid = -1;
                var devices  = BASS.GetDevices();
                for (int i = 0; i < devices.Length; i++)
                {
                    var device = devices[i];
                    if (device.Name == preferredDeviceName)
                    {
                        deviceid = i;
                        Logger.Debug("Found preferred output device:" + device.ToString());
                        break;
                    }
                }
                BASS.BASS_Init(deviceid, freq, 1500);
                outdev = GetInitializedBassRealOutputDevice();
            }
            BASS.BASS_SetDevice(outdev);
            StreamProc = proc;
            Bassout    = new BASS.UserSampleStream(freq, chans, (x, y) => StreamProc(x, y), (BASS.Stream.StreamFlag.BASS_STREAM_FLOAT) | BASS.Stream.StreamFlag.BASS_STREAM_AUTOFREE);
            Logger.Debug("Use Float Output");
        }
コード例 #2
0
ファイル: MusicService.cs プロジェクト: kirileec/SoundEx
        public Music AddTestMusic(string path)
        {
            UInt32 stream = BASS.BASS_StreamCreateFile(path, 0, 0, BASSFlag.BASS_DEFAULT);

            Music music = new Music();

            music.path         = path;
            music.relativePath = (new Uri(System.Environment.CurrentDirectory)).MakeRelativeUri(new Uri(path)).ToString();
            music.stream       = stream;
            music.position     = 0;
            music.bassTAG      = BASS_TAG.BASS_ChannelGetTags(stream, BASSTagFlags.BASS_TAG_ID3V2);
            music.content      = System.IO.Path.GetFileName(path);
            music.status       = MusicStatus.Stopped;
            return(music);
        }
コード例 #3
0
        /// <summary>
        /// BASS_Initが実行されたサウンド出力デバイスを取得する(除くno soundデバイス)
        /// </summary>
        /// <returns>最初に見つかったInitedなサウンド出力デバイスのデバイス。見つからなかった場合は0</returns>
        private uint GetInitializedBassRealOutputDevice()
        {
            uint a;

            BASS.BASS_DEVICEINFO?info;
            for (a = 1; (info = BASS.GetDeviceInfo(a)).HasValue; a++)
            {
                var _info = info.Value;
                if (_info.IsInit)
                {
                    return(a);
                }
            }
            return(0);
        }
コード例 #4
0
        public PlayButtonListViewModel()
        {
            BASS.BASS_Init(-1, 44100, BASSInitFlags.BASS_DEVICE_DEFAULTS, IntPtr.Zero);
            this.musics = new ObservableCollection <Music>();

            _eventAggregator.GetEvent <MusicAddFileEvent>().Subscribe(e => AddFile(e));


            MusicService musicservice = new MusicService();
            var          _music       = musicservice.AddTestMusic(@"D:\CodeBase\音效软件\Win32\Debug\单车.mp3");

            this.musics.Add(_music);

            _music = musicservice.AddTestMusic(@"D:\CodeBase\音效软件\Win32\Debug\苦瓜.mp3");
            this.musics.Add(_music);
        }
コード例 #5
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <exception cref="System.ArgumentException"></exception>
 /// <param name="filename"></param>
 /// <param name="isFloat"></param>
 /// <param name="preScan"></param>
 public BASSDecodeStreamAdapter(string filename, bool isFloat = true, bool preScan = false)
 {
     if (!Initialized)
     {
         BASS.BASS_SetDevice(0);
         Initialized = true;
     }
     try
     {
         this.Stream = new BASS.FileStream(filename, MakeFlag(isFloat, preScan), getData_retryMax: GET_DATA_RETRY_MAX_DEFAULT);
     }
     catch (BASS.BASSException ex)
     {
         throw new ArgumentException("Cannot create stream", ex);
     }
 }
コード例 #6
0
        /// <summary>
        /// アプリケーション全体の初期化
        /// </summary>
        /// <returns>メインウィンドウ</returns>
        internal static System.Windows.Forms.Form Init()
        {
            System.Windows.Forms.Form componentAsMainForm = null;
            SetDllDirectoryW("");

            // migemoのロード
            try
            {
                MyMigemo = new Migemo(@"dict\migemo-dict");
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }

            // ライブラリ準備
            Library = MyUserDirectory.OpenLibrary();

            // プレイリスト管理の開始
            MyPlaylistManager = new PlaylistManager();

            // コンポーネントの読み込み
            MyComponentManager.Add(MyCoreComponent);
            componentAsMainForm = MyComponentManager.BuildAllInstance(System.IO.Directory.GetFiles(MyUserDirectory.ComponentDir, "*.dll"));
            MyComponentManager.LoadSettings();

            MyPlaylistManager.CreatePlaylist(MyCoreComponent.LatestPlaylistQuery);

            if (BASS.IsAvailable)
            {
                BASS.BASS_Init(0, buffer_len: 500);
                if (System.IO.Directory.Exists(MyUserDirectory.PluginDir))
                {
                    foreach (String dllFilename in System.IO.Directory.GetFiles(MyUserDirectory.PluginDir, "*.dll"))
                    {
                        bool success = BASSPlugin.Load(dllFilename, 0);
                        Logger.Log("Loading " + dllFilename + (success ? " OK" : " Failed"));
                    }
                }
            }

            Controller.Startup();

            return(componentAsMainForm);
        }
コード例 #7
0
 private static void Main(string[] args)
 {
     if (BASS.BASS_Init(-1, 44100, BASSInitFlags.BASS_DEVICE_DEFAULTS, IntPtr.Zero))
     {
         UInt32 stream = BASS.BASS_StreamCreateFile(@"D:\alarm.mp3", 0, 0, BASSFlag.BASS_DEFAULT);
         if (stream != 0)
         {
             Console.WriteLine("Set playback position (in seconds):");
             double pos = double.Parse(Console.ReadLine());
             Console.WriteLine("Set master volume levevl (0..1):");
             float vlevel = float.Parse(Console.ReadLine());
             BASS.BASS_SetVolume(vlevel);
             BASS.BASS_ChannelSetPosition(stream, BASS.BASS_ChannelSeconds2Bytes(stream, pos),
                                          BASSPosMode.BASS_POS_BYTE);
             BASS.BASS_ChannelPlay(stream, false);
             BASS_TAG tags = BASS_TAG.BASS_ChannelGetTags(stream, BASSTagFlags.BASS_TAG_ID3V2);
             Console.WriteLine(
                 "Artist: {0}\nTitle: {1}\nAlbum: {2}\nTrackNo: {3}\nGenre: {4}\nYear: {5}\nComment: {6}",
                 tags.Artist, tags.Title, tags.Album, tags.TrackNo, tags.Genre, tags.Year, tags.Comment);
             while (true)
             {
                 TimeSpan t =
                     TimeSpan.FromSeconds(BASS.BASS_ChannelBytes2Seconds(stream,
                                                                         BASS.BASS_ChannelGetPosition(stream,
                                                                                                      BASSPosMode
                                                                                                      .BASS_POS_BYTE)));
                 Console.Write(
                     string.Format("\rPlayback postion: {0:D2}h:{1:D2}m:{2:D2}s:{3:D3}ms; CPU usage: {4}",
                                   t.Hours, t.Minutes, t.Seconds, t.Milliseconds, BASS.BASS_GetCPU()));
             }
             Console.WriteLine("Press any key to exit...");
             Console.ReadKey(false);
             BASS.BASS_StreamFree(stream);
         }
         else
         {
             Console.WriteLine(BASS.BASS_ErrorGetCode());
         }
         BASS.BASS_Free();
     }
 }
コード例 #8
0
ファイル: OutputDeviceFactory.cs プロジェクト: gageas/lutea
        public static IOutputDevice CreateOutputDevice(OutputDevice.StreamProc streamProc, uint freq, uint chans, bool useFloat, int bufferLen, string preferredDeviceName = null)
        {
            lock (outputChannelLock)
            {
                Logger.Debug("Rebuild output");
                if (Lutea.Core.AppCore.EnableWASAPIExclusive)
                {
                    try
                    {
                        var ret = new BASSWASAPIOutputChannel(streamProc, true, freq, chans, preferredDeviceName, (uint)bufferLen);
                        BASS.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical);
                        BASSWASAPIOutput.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical);
                        return(ret);
                    }
                    catch (BASSWASAPIOutput.BASSWASAPIException) { }
                }

                try
                {
                    var ret = new BASSWASAPIOutputChannel(streamProc, false, freq, chans, preferredDeviceName, (uint)bufferLen);
                    BASS.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical);
                    BASSWASAPIOutput.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical);
                    return(ret);
                }
                catch (BASSWASAPIOutput.BASSWASAPIException) { }

                try
                {
                    var ret = new BASSOutput(streamProc, freq, chans, preferredDeviceName, bufferLen);
                    BASS.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical);
                    return(ret);
                }
                catch (BASS.BASSException) { }

                throw new NotSupportedException();
            }
        }
コード例 #9
0
ファイル: BASSWASAPIOutput.cs プロジェクト: gageas/lutea
        public BASSWASAPIOutputChannel(OutputDevice.StreamProc proc, bool exclusive, uint freq, uint chans, string preferredDeviceName, uint bufLen)
        {
            this.Exclusive = exclusive;
            BASS.BASS_SetDevice(0);

            int deviceid = -1;
            var devices  = BASSWASAPIOutput.GetDevices();

            for (int i = 0; i < devices.Length; i++)
            {
                var device = devices[i];
                if ((device.Name == preferredDeviceName) &&
                    ((device.Flag & BASSWASAPIOutput.BASS_WASAPI_DEVICEINFO.Flags.BASS_DEVICE_INPUT) == 0) &&
                    (device.Mixchans >= chans))
                {
                    deviceid = i;
                    Logger.Debug("Found preferred output device:" + device.ToString());
                    break;
                }
            }
            StreamProc       = proc;
            BassWasapiOutput = new BASSWASAPIOutput(freq, chans, (x, y) => StreamProc(x, y), BASSWASAPIOutput.InitFlags.Buffer | (exclusive ? BASSWASAPIOutput.InitFlags.Exclusive : 0), deviceid, bufLen);
            Logger.Log("Use WASAPI Exclusive Output: freq=" + BassWasapiOutput.Info.Freq + ", format=" + BassWasapiOutput.Info.Format);
        }
コード例 #10
0
 /// <summary>
 /// 出力デバイスとして選択可能なデバイスの名前のリストを取得する
 /// </summary>
 /// <returns></returns>
 private static string[] GetDeviceNameListForSetting()
 {
     return(BASS.GetDevices().Select(((_, i) => i == 0 ? PseudoDeviceNameForDefaultOutput : _.Name)).ToArray());
 }